SSL 暗号化を使用した接続
Microsoft SQL Server 2005 JDBC Driver Version 1.2 以降では、アプリケーションで SSL (Secure Sockets Layer) 暗号化を使用できるようにするための各種接続プロパティと getter メソッドおよび setter メソッドが新たに導入されました。
このトピックの例では、新しい接続文字列プロパティを Java アプリケーションで使用する方法について説明します。これらの新しい接続文字列プロパティ (encrypt、trustServerCertificate、trustStore、trustStorePassword、hostNameInCertificate など) の詳細については、「接続プロパティの設定」を参照してください。
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 メソッドを使用して、接続プロパティの値を設定することもできます。 |