暗号化のサポートについてUnderstanding encryption support

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

SQL ServerSQL Server に接続する際、アプリケーションによって暗号化が要求され、なおかつ、SQL ServerSQL Server のインスタンスで TLS 暗号化がサポートされる構成になっていた場合、SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server では TLS ハンドシェイクが開始されます。When connecting to SQL ServerSQL Server, if the application requests encryption and the instance of SQL ServerSQL Server is configured to support TLS encryption, the SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server initiates the TLS handshake. サーバーとクライアントは、このハンドシェイクによって、データの保護に使用する暗号化と暗号アルゴリズムをネゴシエートします。The handshake allows the server and client to negotiate the encryption and cryptographic algorithms to be used to protect data. TLS ハンドシェイクが完了すると、暗号化されたデータを安全に送信できるようになります。After the TLS handshake is complete, the client and server can send the encrypted data securely. サーバーでは、TLS ハンドシェイクの際にクライアントに公開キー証明書が送信されます。During the TLS handshake, the server sends its public key certificate to the client. 公開キー証明書の発行者は証明機関 (CA) と呼ばれます。The issuer of a public key certificate is known as a Certificate Authority (CA). その証明機関が、クライアントが信頼するいずれかの証明機関に該当するかどうかは、クライアント側で検証する必要があります。The client is responsible for validating that the certificate authority is one that the client trusts.

アプリケーションから暗号化を要求されなかった場合、SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server は、TLS 暗号化をサポートするよう SQL ServerSQL Server によって強制されることはありません。If the application does not request encryption, the SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server will not force SQL ServerSQL Server to support TLS encryption. SQL ServerSQL Server インスタンスが TLS 暗号化を強制的に使用するように構成されていない場合、接続は暗号化なしで確立されます。If the SQL ServerSQL Server instance is not configured to force the TLS encryption, a connection is established without encryption. SQL ServerSQL Server インスタンスが TLS 暗号化を強制的に使用するように構成されている場合は、使用中の Java 仮想マシン (JVM) が正常に構成されていれば自動的に TLS 暗号化が有効になり、そうでなければ接続が終了してエラーが生成されます。If the SQL ServerSQL Server instance is configured to force the TLS encryption, the driver will automatically enable TLS encryption when running on properly configured Java Virtual Machine (JVM), or else the connection is terminated and the driver will raise an error.

注意

TLS 接続に成功するためには、serverName に渡された値が、サーバー証明書に含まれる Subject Alternate Name (SAN) の Common Name (CN) または DNS 名と厳密に一致している必要があります。Make sure the value passed to serverName exactly matches the Common Name (CN) or DNS name in the Subject Alternate Name (SAN) in the server certificate for a TLS connection to succeed.

SQL ServerSQL Server 用に TLS を構成する方法の詳細については、「データベース エンジンへの暗号化接続の有効化」を参照してください。For more information about how to configure TLS for SQL ServerSQL Server, see Enable Encrypted Connections to the Database Engine.

解説Remarks

TLS 暗号化をアプリケーションで使用できるようにするために、SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server のバージョン 1.2 リリース以降では、encrypttrustServerCertificatetrustStoretrustStorePasswordhostNameInCertificate の各接続プロパティが導入されました。In order to allow applications to use TLS encryption, the SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server has introduced the following connection properties starting with the version 1.2 release: encrypt, trustServerCertificate, trustStore, trustStorePassword, and hostNameInCertificate. 詳細については、「接続プロパティの設定」を参照してください。For more information, see Setting the Connection Properties.

次の表は、想定される TLS 接続シナリオでの SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server バージョンの動作をまとめたものです。The following table summarizes how the SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server version behaves for possible TLS connection scenarios. 使用する TLS 接続プロパティの組み合わせをシナリオごとに変えています。Each scenario uses a different set of TLS connection properties. 表の値の意味を以下に示します。The table includes:

  • blank: "接続文字列にプロパティが存在しない"blank: "The property does not exist in the connection string"

  • value: "接続文字列にプロパティが存在し、その値が有効である"value: "The property exists in the connection string and its value is valid"

  • any: "接続文字列にプロパティが存在するかどうか、またはその値が有効であるかどうかは関係ない"any: "It does not matter whether the property exists in the connection string or its value is valid"

注意

SQL ServerSQL Server ユーザー認証でも Windows 統合認証でも同じ動作になります。The same behavior applies for SQL ServerSQL Server user authentication and Windows integrated authentication.

encryptencrypt trustServerCertificatetrustServerCertificate hostNameInCertificatehostNameInCertificate trustStoretrustStore trustStorePasswordtrustStorePassword 動作Behavior
false または blankfalse or blank anyany anyany anyany anyany SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server は TLS 暗号化のサポートを強制されません。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server will not force SQL ServerSQL Server to support TLS encryption. サーバーに自己署名証明書が存在する場合、その TLS 証明書の交換がドライバーによって開始されます。If the server has a self-signed certificate, the driver initiates the TLS certificate exchange. TLS 証明書の検証は行われず、(ログイン パケット内の) 資格情報のみが暗号化されます。The TLS certificate will not be validated and only the credentials (in the login packet) are encrypted.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合は、TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption, the driver will initiate the TLS certificate exchange. TLS 証明書の検証は行われませんが、通信全体が暗号化されます。The TLS certificate will not be validated, but the entire communication will be encrypted.
truetrue truetrue anyany anyany anyany SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server に TLS 暗号化を使用するよう要求されます。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server requests to use TLS encryption with the SQL ServerSQL Server.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合、またはサーバーで暗号化がサポートされている場合、ドライバーによって TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption or if the server supports encryption, the driver will initiate the TLS certificate exchange. trustServerCertificate プロパティが "true" に設定されている場合は TLS 証明書の検証が行われないことに注意してください。Note that if the trustServerCertificate property is set to "true", the driver will not validate the TLS certificate.

サーバーが暗号化をサポートするように構成されていない場合、ドライバーはエラーを生成して接続を終了します。If the server is not configured to support encryption, the driver will raise an error and terminate the connection.
truetrue false または blankfalse or blank blankblank blankblank blankblank SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server に TLS 暗号化を使用するよう要求されます。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server requests to use TLS encryption with the SQL ServerSQL Server.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合、またはサーバーで暗号化がサポートされている場合、ドライバーによって TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption or if the server supports encryption, the driver will initiate the TLS certificate exchange.

ドライバーにより、接続 URL に指定されている serverName プロパティを使用してサーバーの TLS 証明書が検証され、信頼マネージャー ファクトリの検索ルールに従って、使用する証明書ストアが決定されます。The driver will use the serverName property specified on the connection URL to validate the server TLS certificate and rely on the trust manager factory's look-up rules to determine which certificate store to use.

サーバーが暗号化をサポートするように構成されていない場合、ドライバーはエラーを生成して接続を終了します。If the server is not configured to support encryption, the driver will raise an error and terminate the connection.
truetrue false または blankfalse or blank valuevalue blankblank blankblank SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server に TLS 暗号化を使用するよう要求されます。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server requests to use TLS encryption with the SQL ServerSQL Server.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合、またはサーバーで暗号化がサポートされている場合、ドライバーによって TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption or if the server supports encryption, the driver will initiate the TLS certificate exchange.

ドライバーにより、hostNameInCertificate プロパティに指定されている値を使用して、TLS 証明書のサブジェクトの値が検証されます。The driver will validate the TLS certificate's subject value by using the value specified for the hostNameInCertificate property.

サーバーが暗号化をサポートするように構成されていない場合、ドライバーはエラーを生成して接続を終了します。If the server is not configured to support encryption, the driver will raise an error and terminate the connection.
truetrue false または blankfalse or blank blankblank valuevalue valuevalue SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server に TLS 暗号化を使用するよう要求されます。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server requests to use TLS encryption with the SQL ServerSQL Server.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合、またはサーバーで暗号化がサポートされている場合、ドライバーによって TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption or if the server supports encryption, the driver will initiate the TLS certificate exchange.

ドライバーは、trustStore プロパティの値を使用して証明書の trustStore ファイルを検索し、trustStorePassword プロパティの値を使用して trustStore ファイルの整合性をチェックします。The driver will use the trustStore property value to find the certificate trustStore file and trustStorePassword property value to check the integrity of the trustStore file.

サーバーが暗号化をサポートするように構成されていない場合、ドライバーはエラーを生成して接続を終了します。If the server is not configured to support encryption, the driver will raise an error and terminate the connection.
truetrue false または blankfalse or blank blankblank blankblank valuevalue SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server に TLS 暗号化を使用するよう要求されます。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server requests to use TLS encryption with the SQL ServerSQL Server.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合、またはサーバーで暗号化がサポートされている場合、ドライバーによって TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption or if the server supports encryption, the driver will initiate the TLS certificate exchange.

ドライバーは、trustStorePassword プロパティの値を使用して、既定の trustStore ファイルの整合性をチェックします。The driver will use the trustStorePassword property value to check the integrity of the default trustStore file.

サーバーが暗号化をサポートするように構成されていない場合、ドライバーはエラーを生成して接続を終了します。If the server is not configured to support encryption, the driver will raise an error and terminate the connection.
truetrue false または blankfalse or blank blankblank valuevalue blankblank SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server に TLS 暗号化を使用するよう要求されます。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server requests to use TLS encryption with the SQL ServerSQL Server.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合、またはサーバーで暗号化がサポートされている場合、ドライバーによって TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption or if the server supports encryption, the driver will initiate the TLS certificate exchange.

ドライバーは、trustStore プロパティの値を使用して、trustStore ファイルの場所を調べます。The driver will use the trustStore property value to look up the location of the trustStore file.

サーバーが暗号化をサポートするように構成されていない場合、ドライバーはエラーを生成して接続を終了します。If the server is not configured to support encryption, the driver will raise an error and terminate the connection.
truetrue false または blankfalse or blank valuevalue blankblank valuevalue SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server に TLS 暗号化を使用するよう要求されます。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server requests to use TLS encryption with the SQL ServerSQL Server.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合、またはサーバーで暗号化がサポートされている場合、ドライバーによって TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption or if the server supports encryption, the driver will initiate the TLS certificate exchange.

ドライバーは、trustStorePassword プロパティの値を使用して、既定の trustStore ファイルの整合性をチェックします。The driver will use the trustStorePassword property value to check the integrity of the default trustStore file. また、hostNameInCertificate プロパティの値を使用して、TLS 証明書が検証されます。In addition, the driver will use the hostNameInCertificate property value to validate the TLS certificate.

サーバーが暗号化をサポートするように構成されていない場合、ドライバーはエラーを生成して接続を終了します。If the server is not configured to support encryption, the driver will raise an error and terminate the connection.
truetrue false または blankfalse or blank valuevalue valuevalue blankblank SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server に TLS 暗号化を使用するよう要求されます。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server requests to use TLS encryption with the SQL ServerSQL Server.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合、またはサーバーで暗号化がサポートされている場合、ドライバーによって TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption or if the server supports encryption, the driver will initiate the TLS certificate exchange.

ドライバーは、trustStore プロパティの値を使用して、trustStore ファイルの場所を調べます。The driver will use the trustStore property value to look up the location of the trustStore file. また、hostNameInCertificate プロパティの値を使用して、TLS 証明書が検証されます。In addition, the driver will use the hostNameInCertificate property value to validate the TLS certificate.

サーバーが暗号化をサポートするように構成されていない場合、ドライバーはエラーを生成して接続を終了します。If the server is not configured to support encryption, the driver will raise an error and terminate the connection.
truetrue false または blankfalse or blank valuevalue valuevalue valuevalue SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server によって SQL ServerSQL Server に TLS 暗号化を使用するよう要求されます。The SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server requests to use TLS encryption with the SQL ServerSQL Server.

サーバーによってクライアントに TLS 暗号化のサポートが要求されている場合、またはサーバーで暗号化がサポートされている場合、ドライバーによって TLS 証明書の交換が開始されます。If the server requires the client to support TLS encryption or if the server supports encryption, the driver will initiate the TLS certificate exchange.

ドライバーは、trustStore プロパティの値を使用して証明書の trustStore ファイルを検索し、trustStorePassword プロパティの値を使用して trustStore ファイルの整合性をチェックします。The driver will use the trustStore property value to find the certificate trustStore file and trustStorePassword property value to check the integrity of the trustStore file. また、hostNameInCertificate プロパティの値を使用して、TLS 証明書が検証されます。In addition, the driver will use the hostNameInCertificate property value to validate the TLS certificate.

サーバーが暗号化をサポートするように構成されていない場合、ドライバーはエラーを生成して接続を終了します。If the server is not configured to support encryption, the driver will raise an error and terminate the connection.

encrypt プロパティが true に設定されている場合、SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server では、JVM の既定の JSSE セキュリティ プロバイダーを使用して、SQL ServerSQL Server と TLS 暗号化がネゴシエートされます。If the encrypt property is set to true, the SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server uses the JVM's default JSSE security provider to negotiate TLS encryption with SQL ServerSQL Server. 既定のセキュリティ プロバイダーでは、TLS 暗号化の正常なネゴシエートに必要なすべての機能がサポートされているとは限りません。The default security provider may not support all of the features required to negotiate TLS encryption successfully. たとえば、既定のセキュリティ プロバイダーでは、SQL ServerSQL Server の TLS 証明書で使用されている RSA 公開キーのサイズがサポートされていない場合があります。For example, the default security provider may not support the size of the RSA public key used in the SQL ServerSQL Server TLS certificate. この場合、既定のセキュリティ プロバイダーでエラーが発生し、その結果 JDBC ドライバーが接続を終了する可能性があります。In this case, the default security provider might raise an error that will cause the JDBC driver to terminate the connection. この問題を解決するには、次のいずれかを実行します。In order to resolve this issue, do one of the following:

  • サイズの小さい RSA 公開キーを持つサーバー証明書を使用して、SQL ServerSQL Server を構成します。Configure the SQL ServerSQL Server with a server certificate that has a smaller RSA public key

  • "<java-home>/lib/security/java.security" セキュリティ プロパティ ファイルで、別の JSSE セキュリティ プロバイダーを使用するように JVM を構成します。Configure the JVM to use a different JSSE security provider in the "<java-home>/lib/security/java.security" security properties file

  • 別の JVM を使用します。Use a different JVM

サーバーの TLS 証明書の検証Validating server TLS certificate

サーバーでは、TLS ハンドシェイクの際にクライアントに公開キー証明書が送信されます。During the TLS handshake, the server sends its public key certificate to the client. そのサーバー証明書が、クライアントが信頼している証明機関によって発行されているかどうかを、JDBC ドライバーまたはクライアントが検証する必要があります。The JDBC driver or client has to validate that the server certificate is issued by a certificate authority that the client trusts. ドライバーは、サーバー証明書で次の条件が満たされている状態を必要とします。The driver requires that the server certificate must meet the following conditions:

  • 信頼されている証明機関から発行されている。The certificate was issued by a trusted certificate authority.

  • サーバー認証用に証明書が発行されている。The certificate must be issued for server authentication.

  • 証明書の有効期限が切れていない。The certificate is not expired.

  • 証明書の Subject の Common Name (CN) または Subject Alternate Name (SAN) の DNS 名が、接続文字列に指定された serverName の値 (または hostNameInCertificate プロパティの値が指定されている場合はその値) と厳密に一致している。The Common Name (CN) in the Subject or a DNS name in the Subject Alternate Name (SAN) of the certificate exactly matches the serverName value specified in the connection string or, if specified, the hostNameInCertificate property value.

  • DNS 名にはワイルドカード文字を含めることができます。A DNS name can include wild card characters. ただし、SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server では、ワイルドカードでのマッチングがサポートされません。But the SQL Server 用 Microsoft JDBC ドライバーMicrosoft JDBC Driver for SQL Server does not support wild card matching. つまり、abc.com は *.com とは一致せず、*.com は *.com と一致します。That is, abc.com will not match *.com but *.com will match *.com.

参照See also

暗号化の使用Using encryption

JDBC ドライバー アプリケーションのセキュリティ保護Securing JDBC driver applications