使用 SSL/TLS 加密對 MySQL 資料庫執行個體的用戶端連線 - Amazon Relational Database Service

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

使用 SSL/TLS 加密對 MySQL 資料庫執行個體的用戶端連線

Secure Sockets Layer (SSL) 是一種產業標準通訊協定,可保護用戶端與伺服器之間的網路連線。SSL 3.0 版之後,名稱已變更為 Transport Layer Security (TLS)。Amazon RDS 支援在 MySQL 資料庫執行個體上啟用 SSL/TLS 加密。使用 SSL/TLS,您可以加密應用程式用戶端與 MySQL 資料庫執行個體之間的連接。SSL/TLS 支援適用於所有的 AWS 區域 for MySQL。

將 SSL/TLS 搭配 MySQL 資料庫執行個體使用

當 Amazon RDS 佈建執行個體時,Amazon RDS 會建立 SSL/TLS 憑證,並將該憑證安裝在資料庫執行個體上。憑證由憑證授權機構簽署。SSL/TLS 憑證會以通用名稱 (CN) 加入資料庫執行個體端點,讓 SSL/TLS 憑證免於遭受詐騙攻擊。

Amazon RDS 建立的 SSL/TLS 憑證是可信任的根實體,應可適用於大多數情況,但若您的應用程式不接受憑證鏈結,則可能無法使用。若您的應用程式不接受憑證鏈結,您可能需要使用中繼憑證來連線至您的 AWS 區域。舉例來說,您必須使用中繼憑證,透過 SSL/TLS 連線至 AWS GovCloud (US) 區域。

如需有關下載憑證的詳細資訊,請參閱使用 SSL/TLS 來加密資料庫執行個體的連線。如需在使用 SSL/TLS 搭配 MySQL 的詳細資訊,請參閱 將應用程式更新為使用新的 SSL/TLS 憑證來連線至 MySQL 資料庫執行個體

MySQL 使用 OpenSSL 進行安全連線。Amazon RDS for MySQL 支援 Transport Layer Security (TLS) 1.0、1.1、1.2 和 1.3 版。TLS 支援情形取決於 MySQL 版本。下表顯示 MySQL 版本的 TLS 支援。

MySQL 版本 TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3

MySQL 8.0

不支援

不支援

支援

支援

MySQL 5.7

支援

支援

支援

不支援

您可以要求特定使用者帳戶使用 SSL/TLS 連線。例如,您可以根據 MySQL 版本,使用下列任一陳述式,要求使用者帳戶 encrypted_user 使用 SSL/TLS 連線。

若要這麼做,請使用下列陳述式。

ALTER USER 'encrypted_user'@'%' REQUIRE SSL;

如需使用 MySQL 進行 SSL/TLS 連線的詳細資訊,請參閱 MySQL 文件中的使用加密連線

MySQL 資料庫執行個體的所有連線都需要 SSL/TLS

使用 require_secure_transport 參數來要求使用者與 MySQL 資料庫執行個體的所有連線都使用 SSL/TLS。依預設,require_secure_transport 參數設為 OFF。您可以將 require_secure_transport 參數設為 ON,以要求對資料庫執行個體的連線使用 SSL/TLS。

您可以更新資料庫執行個體的資料庫參數群組,以設定 require_secure_transport 參數值。您不需要重新啟動資料庫執行個體,變更即可生效。

當資料庫執行個體的 require_secure_transport 參數設為 ON 時,如果可以建立加密的連線,則資料庫用戶端即可連線到該資料庫叢集。否則,類似下列內容的錯誤訊息會傳回至用戶端:

MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

如需有關設定參數的詳細資訊,請參閱 修改資料庫參數群組中的參數

如需 require_secure_transport 參數的詳細資訊,請參閱 MySQL 文件

使用 SSL/TLS (加密) 從 MySQL 命令列用戶端連線

如果您使用的是 MySQL 5.7 版、MySQL 8.0 版或 MariaDB 版本,mysql 用戶端程式的參數略有不同。

若要找出您擁有的版本,請執行具有 --version 選項的 mysql 命令。在以下範例中,輸出顯示了用戶端程式是來自 MariaDB。

$ mysql --version mysql Ver 15.1 Distrib 10.5.15-MariaDB, for osx10.15 (x86_64) using readline 5.1

大多數 Linux 發行版本,例如 Amazon Linux、CentOS、SUSE 和 Debian 都用 MariaDB 取代 MySQL,而且發行版本中的 mysql 版是來自 MariaDB。

若要使用 SSL/TLS 連線到資料庫執行個體,請執行以下步驟:

使用 MySQL 命令列用戶端搭配 SSL/TLS 連接至資料庫執行個體
  1. 下載適用於所有 AWS 區域 的根憑證。

    如需有關下載憑證的詳細資訊,請參閱使用 SSL/TLS 來加密資料庫執行個體的連線

  2. 使用 MySQL 命令列用戶端搭配 SSL/TLS 加密連接至資料庫執行個體。在 -h 參數中,將 DNS 名稱 (端點) 取代為您的資料庫執行個體。在 --ssl-ca 參數中,取代 SSL/TLS 憑證檔名稱。在 -P 參數中,取代為您的資料庫執行個體連接埠。在 -u 參數中,請以有效資料庫使用者取代使用者名稱,例如主要使用者。出現提示時,輸入主要使用者密碼。

    下列範例顯示如何對於 MySQL 5.7 用戶端更新的版本使用 --ssl-ca 參數啟動用戶端:

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=REQUIRED -P 3306 -u myadmin -p

    若要要求 SSL/TLS 連線根據 SSL/TLS 憑證中的端點來驗證資料庫執行個體端點,請輸入下列命令:

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=VERIFY_IDENTITY -P 3306 -u myadmin -p

    下列範例顯示如何對於 MariaDB 用戶端更新的版本使用 --ssl-ca 參數啟動用戶端:

    mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl -P 3306 -u myadmin -p
  3. 出現提示時,輸入主要使用者密碼。

您將會看到類似下列的輸出。

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9738 Server version: 8.0.28 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>