最近升级到PHP 5.6我遇到了与MySQL安全连接的一些问题。这涉及MySQLi以及PDO。
以下是我的设置:
MySQLi:
$db->ssl_set('/etc/mysql/certs/client-key.pem', '/etc/mysql/certs/client-cert.pem', '/etc/mysql/certs/ca-cert.pem', NULL, NULL);
PDO:
array(
PDO::MYSQL_ATTR_SSL_KEY => '/path/to/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT => '/path/to/client-cert.pem',
PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca-cert.pem'
)
首先,我收到错误“dh key too small”。
其次,我收到错误“证书验证失败”。
我正在使用根据此tutorial使用openssl生成的自签名证书。
答案 0 :(得分:5)
经过一些研究后,我找到了问题的答案:
由于logjam,DH密钥大小现在必须大于768位,而MySQL的默认大小为512位。 (注意:这将在MySQL 5.7)中修复。您必须在连接中提供适当的密码,例如: CAMELLIA128-SHA。
$db->ssl_set('/etc/mysql/certs/client-key.pem', '/etc/mysql/certs/client-cert.pem', '/etc/mysql/certs/ca-cert.pem', NULL, 'CAMELLIA128-SHA');
PDO:
array(
PDO::MYSQL_ATTR_SSL_KEY => '/path/to/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT => '/path/to/client-cert.pem',
PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca-cert.pem',
PDO::MYSQL_ATTR_SSL_CIPHER => 'CAMELLIA128-SHA'
)
生成证书时,您必须为每个证书使用正确的“公共名称”:
CA: hostname
Server: FQDN, e.g. hostname.example.com
Client: somename
重要的部分是服务器证书,其中公共名称必须与您要连接的主机相同,例如: hostname.example.com。