SSL 暗号化を使用した接続

来源:互联网 发布:react native vue.js 编辑:程序博客网 时间:2024/05/21 19:02

このトピックの例では、Java アプリケーションで SSL (Secure Sockets Layer) 暗号化を使用できるようにする接続文字列プロパティの使用方法について説明します。これらの新しい接続文字列プロパティ (encrypttrustServerCertificatetrustStoretrustStorePasswordhostNameInCertificate など) の詳細については、「接続プロパティの設定」を参照してください。

encrypt プロパティが true に設定され、trustServerCertificate プロパティが true に設定されている場合、Microsoft SQL Server 用 JDBC Driver は SQL Server の SSL 証明書を検証しません。これは、通常、テスト環境 (SQL Server インスタンスが自己署名入りの証明書しか備えていない環境など) で接続を許可する場合に必要になります。

次のコード例では、接続文字列内に trustServerCertificate プロパティを設定する方法を示します。

String connectionUrl =     "jdbc:sqlserver://localhost:1433;" +     "databaseName=AdventureWorks;integratedSecurity=true;" +     "encrypt=true;trustServerCertificate=true";

encrypt プロパティが true に設定され、trustServerCertificate プロパティが false に設定されている場合、Microsoft SQL Server 用 JDBC Driver は SQL Server の SSL 証明書を検証します。サーバー証明書の検証は、SSL ハンドシェイクの一部であり、接続先のサーバーが適切なサーバーであることを保証します。サーバー証明書を検証するには、trustStore 接続プロパティと trustStorePassword 接続プロパティを明示的に使用するか、または基になる Java 仮想マシンのトラスト ストアを暗黙的に使用して、接続時にトラスト マテリアルを提供する必要があります。

trustStore プロパティでは、証明書の trustStore ファイルへのパス (ファイル名を含む) を指定します。このファイルには、クライアントが信頼する証明書の一覧が含まれています。trustStorePassword プロパティでは、trustStore データの整合性の確認に使用するパスワードを指定します。JVM の既定のトラスト ストアの詳細については、「SSL 暗号化のためのクライアントの構成」を参照してください。

次のコード例では、接続文字列内に trustStore プロパティと trustStorePassword プロパティを設定する方法を示します。

String connectionUrl =     "jdbc:sqlserver://localhost:1433;" +     "databaseName=AdventureWorks;integratedSecurity=true;" +     "encrypt=true; trustServerCertificate=false;" +     "trustStore=storeName;trustStorePassword=storePassword";

JDBC Driver には、サーバーのホスト名を指定するための追加プロパティである hostNameInCertificate が用意されています。このプロパティの値は、証明書の subject プロパティと一致する必要があります。

次のコード例では、接続文字列内で hostNameInCertificate プロパティを使用する方法を示します。

String connectionUrl =     "jdbc:sqlserver://localhost:1433;" +     "databaseName=AdventureWorks;integratedSecurity=true;" +     "encrypt=true; trustServerCertificate=false;" +     "trustStore=storeName;trustStorePassword=storePassword" +     "hostNameInCertificate=hostName";
注意

または、SQLServerDataSource クラスによって提供される適切な setter メソッドを使用して、接続プロパティの値を設定することもできます。

encrypt プロパティが true に設定され、trustServerCertificate プロパティが false に設定され、接続文字列のサーバー名が SQL Server SSL 証明書のサーバー名に一致しない場合は、次のエラーが発行されます: ドライバーは SSL (Secure Sockets Layer) 暗号化を使用して SQL Server への安全な接続を確立できませんでした。エラー: "java.security.cert.CertificateException: SSL (Secure Sockets Layer) の初期化中に、証明書内のサーバー名の検証が失敗しました。"

原创粉丝点击