

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將應用程式更新為使用新的 SSL/TLS 憑證來連線至 Microsoft SQL Server 資料庫執行個體
<a name="ssl-certificate-rotation-sqlserver"></a>

自 2023 年 1 月 13 日起，Amazon RDS 已發佈新的憑證認證機構 (CA) 憑證，使用 Secure Socket Layer 或 Transport Layer Security (SSL/TLS) 來連線至 RDS 資料庫執行個體。接下來，您可以找到更新應用程式使用新憑證的相關資訊。

本主題可協助您判斷任何用戶端應用程式是否使用 SSL/TLS 連線至您的資料庫執行個體。若是如此，您可以進一步檢查那些應用程式是否需要驗證憑證才能連線。

**注意**  
有些應用程式設定為只有在成功驗證伺服器上的憑證時，才能連線至 SQL Server 資料庫執行個體。  
對於這些應用程式，您必須更新用戶端應用程式信任存放區來包含新的 CA 憑證。

更新用戶端應用程式信任存放區中的 CA 憑證之後，您就可以在資料庫執行個體輪換憑證。強烈建議先在開發或預備環境中測試這些步驟，再於生產環境中實作。

如需憑證輪換的詳細資訊，請參閱[輪換您的 SSL/TLS 憑證](UsingWithRDS.SSL-certificate-rotation.md)。如需下載憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。如需對 Microsoft SQL Server 資料庫執行個體使用 SSL/TLS 的資訊，請參閱[對 Microsoft SQL Server 資料庫執行個體使用 SSL](SQLServer.Concepts.General.SSL.Using.md)。

**Topics**
+ [判斷任何應用程式是否使用 SSL 連線至 Microsoft SQL Server 資料庫執行個體](#ssl-certificate-rotation-sqlserver.determining-server)
+ [判斷用戶端是否需要驗證憑證才能連線](#ssl-certificate-rotation-sqlserver.determining-client)
+ [更新應用程式信任存放區](#ssl-certificate-rotation-sqlserver.updating-trust-store)

## 判斷任何應用程式是否使用 SSL 連線至 Microsoft SQL Server 資料庫執行個體
<a name="ssl-certificate-rotation-sqlserver.determining-server"></a>

在資料庫執行個體組態中檢查 `rds.force_ssl` 參數的值。依預設，`rds.force_ssl` 參數會設為 0 (關閉)。如果 `rds.force_ssl` 參數設為 1 (開啟)，則用戶端需要使用 SSL/TLS 進行連線。如需參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

執行下列查詢，以取得資料庫執行個體的所有已開啟連線的目前加密選項。如果連線已加密，`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 文件中的 [Microsoft SQL 資料庫的連線模組](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 文件中的[使用 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                     
```

**注意**  
如果是以 `-C` 選項叫用 `sqlcmd`，即使伺服器憑證不符合用戶端信任存放區，還是會受到信任。

### 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 加密，您可能需要將 Amazon RDS 憑證新增至 Java CA 憑證存放區。如需說明，請參閱 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，請參閱有關 SSL/TLS 實作的軟體分發文件，以取得新增根 CA 憑證的相關資訊。例如，OpenSSL 和 GnuTLS 是常用的選項。使用實作方法將信任新增至 RDS 根 CA 憑證。Microsoft 提供在某些系統上設定憑證的相關指示。

如需下載根憑證的資訊，請參閱 [使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。

如需匯入憑證的範例指令碼，請參閱 [將憑證匯入信任存放區的範例指令碼](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script)。

**注意**  
更新信任存放區時，除了新增憑證，您還可以保留舊憑證。