適用於:Linux 上的 SQL Server
Linux 上的 SQL Server 可以使用傳輸層安全性 (TLS) 來加密在用戶端應用程式與 SQL Server 執行個體之間的網路傳輸的資料。
作業系統支援
SQL Server 支援 Windows 與 Linux 上的相同 TLS 協定:1.3、1.2、1.1 及 1.0。
從 SQL Server 2025(17.x) 開始:
- TLS 1.3 預設是啟用的
- SUSE Linux 企業伺服器(SLES)不支援
設定 TLS 的步驟是執行 SQL Server 的作業系統特有的。
Note
TLS 不支援 Always On 可用性群組的資料庫鏡像端點。
憑證需求
請確定您的憑證遵循下列需求:
目前的系統時間必須在憑證的
Valid from屬性值之後,並且在憑證的Valid to屬性值之前。憑證必須是為了伺服器驗證而準備的。 這需要憑證的
Enhanced Key Usage屬性才能指定Server Authentication (1.3.6.1.5.5.7.3.1)。憑證必須使用
KeySpec的AT_KEYEXCHANGE選項來建立。 通常,憑證的金鑰使用方法屬性 (KEY_USAGE) 也包括金鑰編密 (CERT_KEY_ENCIPHERMENT_KEY_USAGE)。憑證的
Subject屬性必須指出一般名稱 (CN) 與伺服器電腦的主機名稱或完整網域名稱 (FQDN) 相同。Note
支援萬用字元憑證。
設定要使用的 OpenSSL 程式庫 (選擇性)
您可以在 /opt/mssql/lib/ 目錄中建立會參考應使用哪些 libcrypto.so 和 libssl.so 程式庫來進行加密的符號連結。 如果您想要強制 SQL Server 使用特定版本的 OpenSSL 而不是系統提供的預設值,這會相當有用。 如果這些符號連結不存在,SQL Server 就會在系統上載入預設設定的 OpenSSL 程式庫。
這些符號連結應該命名為 libcrypto.so 和 libssl.so,並放在 /opt/mssql/lib/ 目錄中。
Note
如需使用 Let's Encrypt 產生憑證的範例,請參閱部落格文章在 Linux Azure 虛擬機器上使用 SQL Server 和 Azure AI 搜尋來釋放 Azure 資料的潛力。
Overview
TLS 用來加密從用戶端應用程式到 SQL Server 的連線。 當已正確設定時,TLS 可為用戶端與伺服器之間的通訊同時提供私密性和安全性。 TLS 連線可以由用戶端起始或伺服器端起始。
Note
TLS 不支援 Always On 可用性群組的資料庫鏡像端點。
下一節說明如何設定用戶端起始的加密。
產生憑證
/CN 應與您的 SQL Server 主機完整網域名稱相符。
注意事項
此範例會使用自我簽署憑證。 自我簽署憑證不應該用於生產案例。 您應該使用 CA 憑證。
確保儲存憑證和私鑰的資料夾可供使用者或群組存取 mssql ,且權限設為 700 (drwx------)。 你可以手動建立資料夾,權限設為 700 (drwx------),由使用者或群組擁有 mssql 。 或者,將權限設為 755 (drwxr-xr-x),並確保這些資料夾對 mssql 群組可存取。 例如,你可以在路徑/var/opt/mssql/下方建立一個資料夾sslcert,並將憑證和私鑰儲存,並將檔案權限設為 600,如下範例所示。
openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365
sudo chown mssql:mssql mssql.pem mssql.key
sudo chmod 600 mssql.pem mssql.key
# Save the certificate to the certs folder under /etc/ssl/
sudo mv mssql.pem /etc/ssl/certs/
# Save the private key to the private folder under /etc/ssl/
sudo mv mssql.key /etc/ssl/private/
配置 SQL Server
針對 SQL Server 2022 (16.x) 和更早版本:
systemctl stop mssql-server
sudo cat /var/opt/mssql/mssql.conf
sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem
sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key
sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 0
systemctl restart mssql-server
針對 SQL Server 2025 (17.x):
systemctl stop mssql-server
sudo cat /var/opt/mssql/mssql.conf
sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem
sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 0
systemctl restart mssql-server
在您的用戶端機器 (Windows、Linux 或 macOS) 上註冊憑證
如果你使用的是 CA 簽署的憑證,請將憑證授權中心(CA)憑證複製到用戶端機器,而不是使用者憑證。
如果你使用自簽憑證,請將檔案複製
.pem到你發行版的資料夾,並執行啟用它的指令:Ubuntu:將憑證複製到
/usr/share/ca-certificates/,將其副檔名.crt改為 ,並用dpkg-reconfigure ca-certificates來啟用系統 CA 憑證。RHELs:複製憑證到
/etc/pki/ca-trust/source/anchors/並用update-ca-trust來啟用系統 CA 憑證。SUSE:將憑證複製到
/usr/share/pki/trust/anchors/並用update-ca-certificates來啟用系統 CA 憑證。Windows:將
.pem檔案作為憑證匯入 目前使用者>受信任的根憑證授權單位>憑證 底下。macOS:
將憑證複製到
/usr/local/etc/openssl/certs。執行下列命令以取得雜湊值:
/usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -noout將憑證重新命名為指定的值。 例如,使用
mv mssql.pem dc2dd900.0。 確保dc2dd900.0位於/usr/local/etc/openssl/certs中。
範例連接字串
注意事項
您的密碼應遵循 SQL Server 預設 密碼原則。 根據預設,密碼長度必須至少為8個字元,且包含下列四個集合中的三個字元:大寫字母、小寫字母、基底10位數和符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。
SQL Server Management Studio
sqlcmdsqlcmd -S <sqlhostname> -N -U sa -P '<password>'ADO.NET
"Encrypt=True; TrustServerCertificate=False;"ODBC
"Encrypt=Yes; TrustServerCertificate=no;"JDBC
"encrypt=true; trustServerCertificate=false;"
常見的連線錯誤
| 錯誤訊息 | 修復 |
|---|---|
The certificate chain was issued by an authority that is not trusted. |
當用戶端無法驗證 SQL Server 在 TLS 信號交換期間所出示憑證上的簽章時,就會發生此錯誤。 確定用戶端直接信任 SQL Server 憑證,或信任已簽署 SQL Server 憑證的 CA。 |
The target principal name is incorrect. |
確保 SQL Server 憑證上的通用名稱欄位與用戶端 連接字串 中指定的伺服器名稱相符。 |
An existing connection was forcibly closed by the remote host. |
當用戶端不支援 SQL Server 所需的 TLS 通訊協定版本時,就會發生此錯誤。 例如,如果 SQL Server 設定成需要 TLS 1.2,則請確定您的用戶端也支援 TLS 1.2 通訊協定。 |
Ubuntu 20.04 和其他最新 Linux 發行版本
癥狀
如果 Linux 上的 SQL Server 執行個體所載入的憑證是使用少於 112 位元安全性的簽章演算法所建立 (範例:MD5、SHA-1),則您可能會發現連線失敗錯誤,例如下列範例:
A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - An existing connection was forcibly closed by the remote host.) (Microsoft SQL Server, Error: 10054)
錯誤是預設在 Ubuntu 20.04 和更新版本上啟用的 OpenSSL 安全性層級 2 所造成。 安全性層級 2 禁止建立少於 112 位元安全性的 TLS 連線。
解決方案
使用至少 112 位元安全性的簽章演算法來安裝憑證。 符合此需求的簽章演算法包括 SHA-224、SHA-256、SHA-384 和 SHA-512。