共用方式為


瞭解 SSL 支援

連接到 SQL Server 時,如果應用程式要求加密而且 SQL Server 的執行個體設定為支援 SSL 加密,Microsoft SQL Server 2005 JDBC Driver 會起始 SSL 交握。交握可讓伺服器與用戶端交涉要使用的加密和密碼編譯演算法來保護資料。SSL 交握完成後,用戶端和伺服器就可以安全地傳送加密的資料。在 SSL 交握期間,伺服器會將其公開金鑰憑證傳送到用戶端。公開金鑰憑證的發行者也就是所謂的「憑證授權單位 (CA)」。用戶端負責驗證憑證授權單位為用戶端所信任的憑證授權單位。

如果應用程式沒有要求加密,Microsoft SQL Server 2005 JDBC Driver 將不會強制 SQL Server 支援 SSL 加密。如果 SQL Server 執行個體的設定沒有強制 SSL 加密,就會在沒有加密的情況下建立連接。如果 SQL Server 執行個體的設定為強制 SSL 加密,在正確設定的 Java Virtual Machine (JVM) 上執行時,驅動程式將會自動啟用 SSL 加密,否則連接會中止而且驅動程式會引發錯誤。

注意

如需有關如何針對 SQL Server 設定 SSL 的詳細資訊,請參閱《SQL Server 2005 線上叢書》中的<加密 SQL Server 的連接>主題。

若要讓應用程式使用 SSL 加密,Microsoft SQL Server 2005 JDBC Driver 1.2 版提供下列連接屬性:encrypttrustServerCertificatetrustStoretrustStorePasswordhostNameInCertificate。如需詳細資訊,請參閱<設定連接屬性>。

下表摘要說明 Microsoft SQL Server 2005 JDBC Driver 1.2 版如何針對可能的 SSL 連接狀況運作。每個狀況都使用一組不同的 SSL 連接屬性。 此資料表包括:

  • blank: 「屬性不存在於連接字串中」

  • value: 「屬性存在於連接字串中,而且其值有效」

  • any: 「屬性是否存在於連接字串中,或者其值是否有效都不重要」

注意

相同的行為也適用於 SQL Server 使用者驗證與 Windows 整合式驗證。

加密 trustServerCertificate hostNameInCertificate trustStore trustStorePassword 行為

false 或空白

任意

任意

任意

任意

Microsoft SQL Server 2005 JDBC Driver 將不會強制 SQL Server 支援 SSL 加密。如果伺服器有自我簽署憑證,驅動程式會起始 SSL 憑證交換。SSL 憑證將不會經過驗證,而且只有認證 (在登入封包中) 會經過加密。

如果伺服器需要用戶端支援 SSL 加密,驅動程式將會起始 SSL 憑證交換。SSL 憑證將不會經過驗證,但是整個通訊將會經過加密。

注意

在某些 1.4 版的 JVM 上,JDBC 驅動程式可能不會加密登入認證。如果可能,建議您使用較新版本的 JVM。

true

true

任意

任意

任意

Microsoft SQL Server 2005 JDBC Driver 要求搭配 SQL Server 使用 SSL 加密。

如果伺服器要求用戶端支援 SSL 加密,或者,如果伺服器支援加密,驅動程式將會起始 SSL 憑證交換。請注意,如果 trustServerCertificate 屬性設定為 "true",驅動程式將不會驗證 SSL 憑證。

如果伺服器的設定不支援加密,驅動程式將引發錯誤,並中止連接。

true

false 或空白

空白

空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求搭配 SQL Server 使用 SSL 加密。

如果伺服器要求用戶端支援 SSL 加密,或者,如果伺服器支援加密,驅動程式將會起始 SSL 憑證交換。

驅動程式將使用在連接 URL 上指定的 serverName 屬性,驗證伺服器 SSL 憑證,並依賴信任管理員 Factory 的查閱規則決定要使用的憑證存放區。

如果伺服器的設定不支援加密,驅動程式將引發錯誤,並中止連接。

true

false 或空白

空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求搭配 SQL Server 使用 SSL 加密。

如果伺服器要求用戶端支援 SSL 加密,或者,如果伺服器支援加密,驅動程式將會起始 SSL 憑證交換。

驅動程式將會使用針對 hostNameInCertificate 屬性指定的值,驗證 SSL 憑證的主旨值。

如果伺服器的設定不支援加密,驅動程式將引發錯誤,並中止連接。

true

false 或空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求搭配 SQL Server 使用 SSL 加密。

如果伺服器要求用戶端支援 SSL 加密,或者,如果伺服器支援加密,驅動程式將會起始 SSL 憑證交換。

驅動程式將會使用 trustStore 屬性值來尋找憑證 trustStore 檔與 trustStorePassword 屬性值以檢查 trustStore 檔的完整性。

如果伺服器的設定不支援加密,驅動程式將引發錯誤,並中止連接。

true

false 或空白

空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求搭配 SQL Server 使用 SSL 加密。

如果伺服器要求用戶端支援 SSL 加密,或者,如果伺服器支援加密,驅動程式將會起始 SSL 憑證交換。

驅動程式將會使用 trustStorePassword 屬性值來檢查預設 trustStore 檔的完整性。

如果伺服器的設定不支援加密,驅動程式將引發錯誤,並中止連接。

true

false 或空白

空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求搭配 SQL Server 使用 SSL 加密。

如果伺服器要求用戶端支援 SSL 加密,或者,如果伺服器支援加密,驅動程式將會起始 SSL 憑證交換。

驅動程式將會使用 trustStore 屬性值來查閱 trustStore 檔的位置。

如果伺服器的設定不支援加密,驅動程式將引發錯誤,並中止連接。

true

false 或空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求搭配 SQL Server 使用 SSL 加密。

如果伺服器要求用戶端支援 SSL 加密,或者,如果伺服器支援加密,驅動程式將會起始 SSL 憑證交換。

驅動程式將會使用 trustStorePassword 屬性值來檢查預設 trustStore 檔的完整性。此外,驅動程式將會使用 hostNameInCertificate 屬性值來驗證 SSL 憑證。

如果伺服器的設定不支援加密,驅動程式將引發錯誤,並中止連接。

true

false 或空白

空白

Microsoft SQL Server 2005 JDBC Driver 要求搭配 SQL Server 使用 SSL 加密。

如果伺服器要求用戶端支援 SSL 加密,或者,如果伺服器支援加密,驅動程式將會起始 SSL 憑證交換。

驅動程式將會使用 trustStore 屬性值來查閱 trustStore 檔的位置。此外,驅動程式將會使用 hostNameInCertificate 屬性值來驗證 SSL 憑證。

如果伺服器的設定不支援加密,驅動程式將引發錯誤,並中止連接。

true

false 或空白

Microsoft SQL Server 2005 JDBC Driver 要求搭配 SQL Server 使用 SSL 加密。

如果伺服器要求用戶端支援 SSL 加密,或者,如果伺服器支援加密,驅動程式將會起始 SSL 憑證交換。

驅動程式將會使用 trustStore 屬性值來尋找憑證 trustStore 檔與 trustStorePassword 屬性值以檢查 trustStore 檔的完整性。此外,驅動程式將會使用 hostNameInCertificate 屬性值來驗證 SSL 憑證。

如果伺服器的設定不支援加密,驅動程式將引發錯誤,並中止連接。

如果 encrypt 屬性設定為 true,Microsoft SQL Server 2005 JDBC Driver 會使用 JVM 的預設 JSSE 安全性提供者與 SQL Server 交涉 SSL 加密。預設的安全性提供者可能不支援成功交涉 SSL 加密所需的所有功能。例如,預設的安全性提供者可能不支援 SQL Server SSL 憑證中使用之 RSA 公開金鑰的大小。在此情況下,預設的安全性提供者可能會引發錯誤,造成 JDBC 驅動程式中止連接。若要解決這個問題,請執行下列其中之一:

  • 利用 RSA 公開金鑰較小的伺服器憑證設定 SQL Server

  • 設定 JVM 在 "<java-home>/lib/security/java.security" 安全性屬性檔中使用不同的 JSSE 安全性提供者

  • 使用不同的 JVM

驗證 Server SSL 憑證

在 SSL 交握期間,伺服器會將其公開金鑰憑證傳送到用戶端。JDBC 驅動程式或用戶端必須驗證伺服器憑證是由用戶端所信任的憑證授權單位發行。驅動程式會要求伺服器憑證必須符合下列條件:

  • 憑證由信任的憑證授權單位所發行。

  • 憑證必須針對伺服器驗證而發行。

  • 憑證未過期。

  • 憑證的 Subject 屬性指出一般名稱 (CN) 開頭為連接字串中所指定的伺服器名稱,或者,如果有指定,則為 hostNameInCertificate 屬性值。如果伺服器名稱為 IP 位址,驅動程式會驗證 CN 值的開頭為 IP 位址。

另請參閱

概念

使用 SSL 加密

其他資源

保護 JDBC Driver 應用程式