PHP 5.6,MySQL,SSL和自签名证书

6
最近我升级到了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”的错误。

其次,我遇到了“certificate verify failed”的错误。

我正在使用自签名证书,该证书是根据此教程使用openssl生成的。

1个回答

6

经过一些研究,我找到了解决问题的答案:

1. 错误"dh key too small"

由于logjam攻击,DH密钥大小现在必须大于768位,而MySQL的默认大小为512位。(注意:这将在MySQL 5.7中得到修复)。您必须在连接中提供适当的密码,例如CAMELLIA128-SHA。

MySQLi:

$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'
)

2. 错误 "证书验证失败"

在生成您的证书时,您必须为每个证书使用正确的 "公共名称":

CA: hostname 
Server: FQDN, e.g. hostname.example.com 
Client: somename

重要的部分是 服务器证书,其中的公共名称必须与您连接的主机相同,例如:hostname.example.com。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接