本節描述 C 應用程式如何使用 C API 功能來進行加密連線。預設情況下,如果伺服器支援加密連線,MySQL 程式會嘗試使用加密連線,如果無法建立加密連線,則會回退到未加密的連線(請參閱設定 MySQL 使用加密連線)。對於需要超出預設行為來控制如何建立加密連線的應用程式,C API 提供了以下功能
mysql_options()
函式使應用程式能夠在呼叫mysql_real_connect()
之前設定適當的 SSL/TLS 選項。例如,若要要求使用加密連線,請參閱強制加密連線。mysql_get_ssl_cipher()
函式使應用程式能夠在建立連線後判斷該連線是否使用加密。NULL
返回值表示未使用加密。非NULL
返回值表示已加密連線,並會命名加密密碼。請參閱第 5.4.36 節「mysql_get_ssl_cipher()」。
mysql_options()
提供以下選項來控制加密連線的使用。如需選項詳細資訊,請參閱第 5.4.54 節「mysql_options()」。
MYSQL_OPT_SSL_CA
:憑證授權單位 (CA) 憑證檔案的路徑名稱。如果使用此選項,則必須指定與伺服器使用的憑證相同的憑證。MYSQL_OPT_SSL_CAPATH
:包含受信任的 SSL CA 憑證檔案的目錄路徑名稱。MYSQL_OPT_SSL_CERT
:用戶端公鑰憑證檔案的路徑名稱。MYSQL_OPT_SSL_CIPHER
:用戶端允許使用 TLS 1.2 版及更早版本之協定的連線的加密密碼清單。MYSQL_OPT_SSL_CRL
:包含憑證撤銷清單的檔案路徑名稱。MYSQL_OPT_SSL_CRLPATH
:包含憑證撤銷清單檔案的目錄路徑名稱。MYSQL_OPT_SSL_KEY
:用戶端私鑰檔案的路徑名稱。MYSQL_OPT_SSL_MODE
:連線安全性狀態。MYSQL_OPT_SSL_SESSION_DATA
:來自作用中連線的加密連線的序列化連線資料,該連線資料是透過呼叫mysql_get_ssl_session_data()
函式所傳回。MYSQL_OPT_TLS_CIPHERSUITES
:用戶端允許使用 TLS 1.3 版連線的加密密碼套件清單。MYSQL_OPT_TLS_VERSION
:用戶端允許的加密協定。
MySQL 8.2 及更早版本提供了 mysql_ssl_set()
函式,但該函式已移除。請改用mysql_options()
來指定憑證和金鑰檔案、加密密碼等。
mysql_options()
選項(例如 SSL 憑證和金鑰檔案)用於在有此類連線可用時建立加密連線,但不會強制要求所取得的連線必須加密。若要強制要求加密連線,請使用下列技術
根據需要呼叫
mysql_options()
,以提供適當的 SSL 參數(憑證和金鑰檔案、加密密碼等)。呼叫
mysql_options()
以傳遞MYSQL_OPT_SSL_MODE
選項,並將值設定為SSL_MODE_REQUIRED
或更嚴格的選項值之一。呼叫
mysql_real_connect()
以連線到伺服器。如果無法取得加密連線,則呼叫將會失敗;請使用錯誤結束。
為了提高相對於預設加密所提供的安全性,用戶端可以提供與伺服器使用的憑證相符的 CA 憑證,並啟用主機名稱身分驗證。這樣一來,伺服器和用戶端便會將信任放置於相同的 CA 憑證,而用戶端則會驗證它所連線的主機是否為預期的主機
若要指定 CA 憑證,請呼叫
mysql_options()
以傳遞MYSQL_OPT_SSL_CA
(或MYSQL_OPT_SSL_CAPATH
) 選項,並呼叫mysql_options()
以傳遞MYSQL_OPT_SSL_MODE
選項,並將值設定為SSL_MODE_VERIFY_CA
。若要同時啟用主機名稱身分驗證,請呼叫
mysql_options()
以傳遞MYSQL_OPT_SSL_MODE
選項,並將值設定為SSL_MODE_VERIFY_IDENTITY
,而不是SSL_MODE_VERIFY_CA
。
使用 SSL_MODE_VERIFY_IDENTITY
的主機名稱身分驗證不適用於伺服器自動建立的自我簽署憑證,或使用 mysql_ssl_rsa_setup 手動建立的自我簽署憑證 (請參閱使用 MySQL 建立 SSL 和 RSA 憑證和金鑰)。此類自我簽署憑證不包含伺服器名稱作為通用名稱值。
主機名稱身分驗證也不適用於使用萬用字元指定通用名稱的憑證,因為該名稱會與伺服器名稱逐字比較。