[英]PHP mysqli and SSL
我正在嘗試通過 WAN 配置 Galera Cluster(VPN 不是一個選項)。 出於顯而易見的原因,我將連接設置為需要 SSL 密鑰,但在連接應用程序時遇到了困難。 我可以使用 PDO 成功連接,但無法讓 mysqli 工作。 設置將是:
美國地點:
中國位置:
Galera 集群名稱是 myServer,節點名稱是 myServerX 對應於它們的實際主機名。
PHP 版本信息:
me@mydevbox:~> php --version
PHP 7.4.9 (cli) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies
MySQL 服務器版本信息:
me@myServer1:~$ mysql --version
mysql Ver 8.0.19-26.3 for Linux on x86_64 (MySQL Wsrep Server - GPL)
代碼:
<?php
$conn = mysqli_init() or print("init failed\n");
mysqli_ssl_set(
$conn,
'/srv/www/vhosts/myProject/mysql_ssl_certs/client-key.pem',
'/srv/www/vhosts/myProject/mysql_ssl_certs/client-cert.pem',
'/srv/www/vhosts/myProject/mysql_ssl_certs/ca-cert.pem',
NULL,
NULL
);
mysqli_real_connect(
$conn,
'myServer1',
'myUser',
'myPassword',
'myDB',
3306,
MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT
) or print("connect failed to myServer1 [{$conn->connect_errno}: {$conn->connect_error}]\n");
print_r($conn);
輸出:
me@mydevbox:~> php sqlssltest.php
PHP Warning: mysqli_real_connect(): Peer certificate CN=`myServer' did not match expected CN=`myServer1' in /home/me/sqlssltest.php on line 21
PHP Warning: mysqli_real_connect(): Cannot connect to MySQL by using SSL in /home/me/sqlssltest.php on line 21
PHP Warning: mysqli_real_connect(): [2002] (trying to connect via (null)) in /home/me/sqlssltest.php on line 21
PHP Warning: mysqli_real_connect(): (HY000/2002): in /home/me/sqlssltest.php on line 21
connect failed to myServer1 [2002: ]
mysqli Object
(
[client_info] => mysqlnd 7.4.9
[client_version] => 70409
[connect_errno] => 2002
[connect_error] =>
[errno] => 2002
[error] =>
)
從外觀MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT
,mysqli 忽略了我的MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT
標志。 我能夠使用PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false
成功連接到 PDO - 有沒有辦法讓 mysqli 工作? 不幸的是,這是為了支持仍然使用 mysqli 的遺留應用程序代碼,並且在需要上線時無法重構。 我相信創建單獨的 CA 證書會破壞復制連接,因為它們都有不同的主機名。
您將MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT
作為第 7 個參數傳遞,但這是套接字參數,flags 是第 8 個參數。 嘗試為第 7 次傳遞一個null
,並將MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT
到第 8 次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.