新しい SSL/TLS 証明書を使用して Microsoft SQL Server DB インスタンスに接続するようにアプリケーションを更新 - Amazon Relational Database Service

新しい SSL/TLS 証明書を使用して Microsoft SQL Server DB インスタンスに接続するようにアプリケーションを更新

2019 年 9 月 19 日に Amazon RDS は、Secure Socket Layer または Transport Layer Security (SSL/TLS) を使用して RDS DB インスタンスに接続するための新しい認証局 (CA) 証明書を公開しました。ここでは、新しい証明書を使用するためのアプリケーションの更新について説明します。

このトピックでは、クライアントアプリケーションが SSL/TLS を使用して DB インスタンスに接続されているかどうかを判断できます。該当する場合はさらに、それらのアプリケーションの接続に証明書の検証が必要かどうかを確認できます。

注記

一部のアプリケーションは、サーバー上の証明書を正常に検証できる場合にのみ、SQL Server DB インスタンスに接続されるように設定されています。

そのようなアプリケーションの場合は、新しい CA 証明書を含むように、クライアントアプリケーションの信頼ストアを更新する必要があります。

クライアントアプリケーションの信頼ストアで CA 証明書を更新した後、DB インスタンスで証明書をローテーションできます。これらの手順を開発環境またはステージング環境でテストしてから、本番環境で実装することを強くお勧めします。

証明書のローテーションの詳細については、「SSL/TLS 証明書の更新」を参照してください。証明書のダウンロードの詳細については、SSL/TLS を使用した DB インスタンスへの接続の暗号化 を参照してください。Microsoft SQL Server DB インスタンスで SSL/TLS を使用する方法については、「Microsoft SQL Server DB インスタンスでの SSL の使用」を参照してください。

アプリケーションが SSL を使用して Microsoft SQL Server DB インスタンスに接続しているかどうかの確認

DB インスタンスの設定で rds.force_ssl パラメータの値を確認します。デフォルトでは、rds.force_ssl パラメータは 0 (オフ) に設定されます。rds.force_ssl パラメータが 1(オン)に設定されている場合、クライアントは接続に SSL/TLS を使用する必要があります。パラメータグループの詳細については、「DB パラメータグループを使用する」を参照してください。また、このパラメータの設定も sys.dm_server_registry DMV にあります。

次のクエリを実行して、DB インスタンスへのすべての開いている接続に対する現在の暗号化オプションを取得します。接続が暗号化されている場合、列 ENCRYPT_OPTIONTRUE を返します。

select SESSION_ID, ENCRYPT_OPTION, NET_TRANSPORT, AUTH_SCHEME from SYS.DM_EXEC_CONNECTIONS

このクエリは現在の接続のみを表示します。過去に接続および切断したアプリケーションが SSL を使用したかどうかは表示しません。

クライアントを接続するために証明書の検証が必要かどうかを確認する

異なるタイプのクライアントは、接続するために証明書の検証が必要かどうかを確認できます。

注記

リストにあるもの以外のコネクタを使用する場合、暗号化接続を強制する方法については、具体的なコネクタのドキュメントを参照してください。詳細については、Microsoft SQL Server のドキュメントの「Connection modules for Microsoft SQL databases」を参照してください。

SQL Server Management Studio

SQL Server Management Studio 接続に暗号化が実行されているかどうかを確認します。

  1. SQL Server Management Studio を起動します。

  2. [サーバーに接続] に、サーバー情報、ログインユーザー名、パスワードを入力します。

  3. [Options] を選択します。

  4. 接続ページで [暗号化接続] が選択されているかどうかを確認します。

SQL Server Management Studio の詳細については、「SQL Server Management Studio の使用」を参照してください。

sqlcmd

次の sqlcmd クライアントの例では、スクリプトの SQL Server 接続をチェックして、正常な接続に有効な証明書が必要かどうかを確認する方法を示します。詳細については、Microsoft SQL Server のドキュメントの「Connecting with sqlcmd」を参照してください。

sqlcmd を使用するとき、次の例のように、接続を暗号化するために -N コマンドを使用する場合、SSL 接続にはサーバー証明書に対する検証が必要です。

$ sqlcmd -N -S dbinstance.rds.amazon.com -d ExampleDB
注記

sqlcmd-C オプションで呼び出される場合、クライアント側の信頼ストアと一致しない場合でも、サーバー証明書を信頼します。

ADO.NET

次の例では、アプリケーションは SSL を使用して接続し、サーバー証明書の検証が必要です。

using SQLC = Microsoft.Data.SqlClient; ... static public void Main() { using (var connection = new SQLC.SqlConnection( "Server=tcp:dbinstance.rds.amazon.com;" + "Database=ExampleDB;User ID=LOGIN_NAME;" + "Password=YOUR_PASSWORD;" + "Encrypt=True;TrustServerCertificate=False;" )) { connection.Open(); ... }

Java

次の例では、アプリケーションは SSL を使用して接続し、サーバー証明書の検証が必要です。

String connectionUrl = "jdbc:sqlserver://dbinstance.rds.amazon.com;" + "databaseName=ExampleDB;integratedSecurity=true;" + "encrypt=true;trustServerCertificate=false";

JDBC を使用して接続するクライアントの SSL 暗号化を有効にするには、Java CA 証明書ストアへの Amazon RDS 証明書の追加が必要になる場合があります。手順については、Microsoft SQL Server ドキュメントの「暗号化のためのクライアントの構成」を参照してください。trustStore=path-to-certificate-trust-store-file を接続文字列に追加して、信頼された CA 証明書ファイル名を直接入力することもできます。

注記

接続文字列で TrustServerCertificate=true(または同等のもの)を使用する場合、接続プロセスでは、信頼チェーンの検証をスキップします。この場合、証明書が確認できない場合でも、アプリケーションは接続します。TrustServerCertificate=false を使用すると、証明書の検証が強制され、これはベストプラクティスです。

アプリケーション信頼ストアの更新

Microsoft SQL Server を使用するアプリケーションの信頼ストアを更新できます。手順については、「特定の接続の暗号化」を参照してください。また、Microsoft SQL Server ドキュメントの「暗号化のためのクライアントの構成」を参照してください。

Microsoft Windows 以外のオペレーティングシステムを使用している場合、新しいルート CA 証明書の追加については、SSL/TLS 実装のためのソフトウェアディストリビューションのドキュメントを参照してください。たとえば、OpenSSL や GnuTLS は人気のあるオプションです。この実装方法を使用して、RDS ルート CA 証明書に信頼を追加します。Microsoft では、一部のシステムで証明書を設定する手順を提供しています。

注記

信頼ストアを更新するとき、新しい証明書を追加できるだけでなく、古い証明書を保持できます。

JDBC のアプリケーション信頼ストアの更新

SSL/TLS 接続に JDBC を使用するアプリケーションの信頼ストアを更新できます。

JDBC アプリケーションの信頼ストアを更新するには

  1. すべての AWS リージョンで動作する 2019 ルート証明書をダウンロードし、そのファイルを信頼ストアのディレクトリに置きます。

    ルート証明書のダウンロードについては、SSL/TLS を使用した DB インスタンスへの接続の暗号化 を参照してください。

  2. 次のコマンドを使用して、証明書を .der 形式に変換します。

    openssl x509 -outform der -in rds-ca-2019-root.pem -out rds-ca-2019-root.der

    ファイル名を、ダウンロードしたファイル名に置き換えます。

  3. 次のコマンドを使用して、証明書をキーストアにインポートします。

    keytool -import -alias rds-root -keystore clientkeystore -file rds-ca-2019-root.der
  4. キーストアが正常に更新されたことを確認します。

    keytool -list -v -keystore clientkeystore.jks

    キーストアのパスワードを求められたら、パスワードを入力します。

    出力には次の内容が含まれている必要があります。

    rds-root,date, trustedCertEntry, Certificate fingerprint (SHA1): D4:0D:DB:29:E3:75:0D:FF:A6:71:C3:14:0B:BF:5F:47:8D:1C:80:96 # This fingerprint should match the output from the below command openssl x509 -fingerprint -in rds-ca-2019-root.pem -noout
重要

データベース接続で SSL/TLS を使用することを決定し、アプリケーションの信頼ストアを更新したら、rds-ca-2019 証明書を使用するようにデータベースを更新できます。手順については、「DB インスタンスの変更による CA 証明書の更新」のステップ 3 を参照してください。