暗号化を使用した接続Connecting with encryption

ダウンロードJDBC Driver のダウンロードDownloadDownload JDBC Driver

この記事の例では、Java アプリケーションでトランスポート層セキュリティ (TLS) 暗号化を使用できるようにする接続文字列プロパティの使用方法について説明します。The examples in this article describe how to use connection string properties that allow applications to use Transport Layer Security (TLS) encryption in a Java application. これらの新しい接続文字列プロパティ (encrypttrustServerCertificatetrustStoretrustStorePasswordhostNameInCertificate など) の詳細については、「接続プロパティの設定」を参照してください。For more information about these new connection string properties such as encrypt, trustServerCertificate, trustStore, trustStorePassword, and hostNameInCertificate, see Setting the Connection Properties.

encrypt プロパティが true に設定され、trustServerCertificate プロパティが true に設定されている場合、SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server では SQL ServerSQL Server の TLS 証明書が検証されません。When the encrypt property is set to true and the trustServerCertificate property is set to true, the SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server won't validate the SQL ServerSQL Server TLS certificate. これは、通常、テスト環境 (SQL ServerSQL Server インスタンスが自己署名入りの証明書しか備えていない環境など) で接続を許可する場合に必要になります。This is usually required for allowing connections in test environments, such as where the SQL ServerSQL Server instance has only a self signed certificate.

次のコード例では、接続文字列内に trustServerCertificate プロパティを設定する方法を示します。The following code example demonstrates how to set the trustServerCertificate property in a connection string:

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

encrypt プロパティが true に設定され、trustServerCertificate プロパティが false に設定されている場合、SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server では SQL ServerSQL Server の TLS 証明書が検証されます。When the encrypt property is set to true and the trustServerCertificate property is set to false, the SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server will validate the SQL ServerSQL Server TLS certificate. サーバー証明書の検証は、TLS ハンドシェイクの一部であり、接続先のサーバーが適切なサーバーであることが保証されます。Validating the server certificate is a part of the TLS handshake and ensures that the server is the correct server to connect to. サーバー証明書を検証するには、trustStore 接続プロパティと trustStorePassword 接続プロパティを明示的に使用するか、または基になる Java 仮想マシン (JVM) のトラスト ストアを暗黙的に使用して、接続時にトラスト マテリアルを提供する必要があります。To validate the server certificate, the trust material must be supplied at connection time either by using trustStore and trustStorePassword connection properties explicitly, or by using the underlying Java Virtual Machine (JVM)'s default trust store implicitly.

trustStore プロパティでは、証明書の trustStore ファイルへのパス (ファイル名を含む) を指定します。このファイルには、クライアントが信頼する証明書の一覧が含まれています。The trustStore property specifies the path (including filename) to the certificate trustStore file, which contains the list of certificates that the client trusts. trustStorePassword プロパティでは、trustStore データの整合性の確認に使用するパスワードを指定します。The trustStorePassword property specifies the password used to check the integrity of the trustStore data. JVM の既定のトラスト ストアの使用に関する詳細については、「暗号化のためのクライアントの構成」を参照してください。For more information on using the JVM's default trust store, see the Configuring the Client for Encryption.

次のコード例では、接続文字列内に trustStore プロパティと trustStorePassword プロパティを設定する方法を示します。The following code example demonstrates how to set the trustStore and trustStorePassword properties in a connection string:

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

JDBC Driver には、サーバーのホスト名を指定するための追加プロパティである hostNameInCertificate が用意されています。The JDBC Driver provides an additional property, hostNameInCertificate, which specifies the host name of the server. このプロパティの値は、証明書の subject プロパティと一致する必要があります。The value of this property must match the subject property of the certificate.

次のコード例では、接続文字列内で hostNameInCertificate プロパティを使用する方法を示します。The following code example demonstrates how to use the hostNameInCertificate property in a connection string:

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

注意

または、SQLServerDataSource クラスによって提供される適切な setter メソッドを使用して、接続プロパティの値を設定することもできます。Alternatively, you can set the value of connection properties by using the appropriate setter methods provided by the SQLServerDataSource class.

encrypt プロパティが true に設定され、trustServerCertificate プロパティが false に設定され、接続文字列のサーバー名が TLS 証明書のサーバー名に一致しない場合は、次のエラーが発行されます: The driver couldn't establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "java.security.cert.CertificateException: Failed to validate the server name in a certificate during Secure Sockets Layer (SSL) initialization."If the encrypt property is set to true and the trustServerCertificate property is set to false and if the server name in the connection string doesn't match the server name in the TLS certificate, the following error will be issued: The driver couldn't establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "java.security.cert.CertificateException: Failed to validate the server name in a certificate during Secure Sockets Layer (SSL) initialization.". バージョン 7.2 では、ドライバーにより、TLS 証明書のサーバー名の左端のラベルでのワイルドカードのパターン マッチングがサポートされます。As of version 7.2, the driver supports wildcard pattern matching in the left-most label of the server name in the TLS certificate.

参照See also

暗号化の使用 JDBC ドライバー アプリケーションのセキュリティ保護Using encryption Securing JDBC driver applications