本節說明 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 協定 (直到 TLSv1.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
:用戶端允許用於使用 TLSv1.3 的連線的加密密碼套件清單。MYSQL_OPT_TLS_VERSION
:用戶端允許的加密協定。
已棄用的mysql_ssl_set()
函數可以用作方便的常式,等同於一組mysql_options()
呼叫,這些呼叫會指定憑證和金鑰檔案、加密密碼等等。請參閱第 5.4.82 節「mysql_ssl_set()」。
用於 SSL 憑證和金鑰檔案等資訊的mysql_options()
選項,可用於建立加密連線 (如果此類連線可用),但不會強制要求所取得的連線必須加密。若要要求加密連線,請使用下列技術
視需要呼叫
mysql_options()
,以提供適當的 SSL 參數 (憑證和金鑰檔案、加密密碼等等)。呼叫
mysql_options()
,以使用SSL_MODE_REQUIRED
值或更嚴格的選項值之一來傳遞MYSQL_OPT_SSL_MODE
選項。呼叫
mysql_real_connect()
以連線至伺服器。如果無法取得加密連線,則呼叫會失敗;並以錯誤結束。
為了提高相對於預設加密所提供的安全性,用戶端可以提供與伺服器使用的 CA 憑證相符的 CA 憑證,並啟用主機名稱身分驗證。如此一來,伺服器和用戶端會將其信任置於相同的 CA 憑證中,而用戶端會驗證其連線的主機是否為預期的主機
若要指定 CA 憑證,請呼叫
mysql_options()
以傳遞MYSQL_OPT_SSL_CA
(或MYSQL_OPT_SSL_CAPATH
) 選項,並呼叫mysql_options()
以使用SSL_MODE_VERIFY_CA
值傳遞MYSQL_OPT_SSL_MODE
選項。若要同時啟用主機名稱身分驗證,請呼叫
mysql_options()
以使用SSL_MODE_VERIFY_IDENTITY
值 (而非SSL_MODE_VERIFY_CA
) 傳遞MYSQL_OPT_SSL_MODE
選項。
使用SSL_MODE_VERIFY_IDENTITY
的主機名稱身分驗證不適用於伺服器自動建立的自我簽署憑證,或使用 mysql_ssl_rsa_setup 手動建立的自我簽署憑證 (請參閱使用 MySQL 建立 SSL 和 RSA 憑證和金鑰)。此類自我簽署憑證不包含伺服器名稱作為通用名稱值。
主機名稱身分驗證也不適用於使用萬用字元指定通用名稱的憑證,因為該名稱會逐字與伺服器名稱進行比較。