我有一個遠程MySQL服務器,需要我使用SSL進行連接。我可以使用我的終端連接到它。但是,當我嘗試連接它使用PHP,我得到以下錯誤:PHP到MySQL使用SSL
SSL3_GET_RECORD:wrong version number
看起來OpenSSL的握手失敗,原因可能是我的PHP嘗試使用SSL3連接到它。 MySQL服務器僅支持TLSv1.2。有沒有辦法強制PHP使用TLSv1.2進行連接?
下面是用於連接我的代碼:
<?php
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);
$db = mysqli_init();
mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$db->ssl_set(NULL, NULL, '/path/to/ca-cert.pem' , NULL, NULL);
$link = mysqli_real_connect ($db, 'hostname', 'user', 'password', 'dbname', 3306, NULL, MYSQLI_CLIENT_SSL);
if (!$link)
{
die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
} else {
$res = $db->query('SHOW TABLES;');
print_r ($res);
$db->close();
}
?>
事情我已經嘗試和可能出現的問題:
- 好像OpenSSL的版本不匹配。我可以連接使用我的終端,而不是PHP,所以我在終端使用phpinfo()來檢查我的openssl版本,它們是一樣的
- PHP可能使用SSL3連接,並且服務器僅支持TLSv1 .2,我無法找到強制使用TLSv1.2連接MySQL的PHP方法。
- 我試圖使用tcpdump/Wireshark觀察握手,但我不認爲這個過程甚至開始,因爲有一個版本不匹配。
- 我確認使用「openssl s_client -debug」,服務器不支持SSL3,這讓我覺得這是我的電腦上的問題,但不知道。
- 我說我的客戶端可能使用SSL3的原因是因爲SSL3_GET_RECORD,我不確定我是否也適用。
所以,總之,幫助!
環境:
PHP 7.0.18
的MySQL Server Enterprise版本5.7.18
的OpenSSL 1.0.2g
操作系統:Windows 7,Ubuntu的16.04。試圖在兩個
https://stackoverflow.com/questions/39330686/how-to-fix-mysqlireal-connect-ssl-operation-failed-error –
https://stackoverflow.com/questions/ 26182346/error-on-pdo-ssl-connection –
@IlyaBursov:兩個答案都不適用於我。 – Silencer310