

# 新しい SSL/TLS 証明書を使用して Microsoft SQL Server DB インスタンスに接続するようにアプリケーションを更新する
<a name="ssl-certificate-rotation-sqlserver"></a>

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

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

**注記**  
一部のアプリケーションは、サーバー上の証明書を正常に検証できる場合にのみ、SQL Server DB インスタンスに接続されるように設定されています。  
そのようなアプリケーションの場合は、新しい CA 証明書を含むように、クライアントアプリケーションの信頼ストアを更新する必要があります。

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

証明書のローテーションの詳細については、「[SSL/TLS 証明書のローテーション](UsingWithRDS.SSL-certificate-rotation.md)」を参照してください。証明書のダウンロードの詳細については、[SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化](UsingWithRDS.SSL.md) を参照してください。Microsoft SQL Server DB インスタンスで SSL/TLS を使用する方法については、「[Microsoft SQL Server DB インスタンスでの SSL の使用](SQLServer.Concepts.General.SSL.Using.md)」を参照してください。

**Topics**
+ [アプリケーションが SSL を使用して Microsoft SQL Server DB インスタンスに接続しているかどうかの確認](#ssl-certificate-rotation-sqlserver.determining-server)
+ [クライアントが接続するために証明書の検証を必要とするかどうかの確認](#ssl-certificate-rotation-sqlserver.determining-client)
+ [アプリケーション信頼ストアの更新](#ssl-certificate-rotation-sqlserver.updating-trust-store)

## アプリケーションが SSL を使用して Microsoft SQL Server DB インスタンスに接続しているかどうかの確認
<a name="ssl-certificate-rotation-sqlserver.determining-server"></a>

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

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

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

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

## クライアントが接続するために証明書の検証を必要とするかどうかの確認
<a name="ssl-certificate-rotation-sqlserver.determining-client"></a>

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

**注記**  
リストにあるもの以外のコネクタを使用する場合、暗号化接続を強制する方法については、具体的なコネクタのドキュメントを参照してください。詳細については、Microsoft SQL Server のドキュメントの「[Connection modules for Microsoft SQL databases](https://docs.microsoft.com/en-us/sql/connect/sql-connection-libraries?view=sql-server-ver15)」を参照してください。

### SQL Server Management Studio
<a name="ssl-certificate-rotation-sqlserver.determining-client.management-studio"></a>

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

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

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

1. [**Options**] を選択します。

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

SQL Server Management Studio の詳細については、「[SQL Server Management Studio の使用](http://msdn.microsoft.com/en-us/library/ms174173.aspx)」を参照してください。

### Sqlcmd
<a name="ssl-certificate-rotation-sqlserver.determining-client.sqlcmd"></a>

次の `sqlcmd` クライアントの例では、スクリプトの SQL Server 接続をチェックして、正常な接続に有効な証明書が必要かどうかを確認する方法を示します。詳細については、Microsoft SQL Server のドキュメントの「[Connecting with sqlcmd](https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/connecting-with-sqlcmd?view=sql-server-ver15)」を参照してください。

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

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

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

### ADO.NET
<a name="ssl-certificate-rotation-sqlserver.determining-client.adonet"></a>

次の例では、アプリケーションは 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
<a name="ssl-certificate-rotation-sqlserver.determining-client.java"></a>

次の例では、アプリケーションは 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 ドキュメントの「[暗号化のためのクライアントの構成](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)」を参照してください。`trustStore=path-to-certificate-trust-store-file` を接続文字列に追加して、信頼された CA 証明書ファイル名を直接入力することもできます。

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

## アプリケーション信頼ストアの更新
<a name="ssl-certificate-rotation-sqlserver.updating-trust-store"></a>

Microsoft SQL Server を使用するアプリケーションの信頼ストアを更新できます。手順については、[特定の接続の暗号化](SQLServer.Concepts.General.SSL.Using.md#SQLServer.Concepts.General.SSL.Client) を参照してください。また、Microsoft SQL Server ドキュメントの「[暗号化のためのクライアントの構成](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)」を参照してください。

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

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

証明書をインポートするサンプルスクリプトについては、[証明書を信頼ストアにインポートするためのサンプルスクリプト](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script) を参照してください。

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