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

最近升级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键太小”.

其次,我收到错误“证书验证失败”.

我正在使用根据此tutorial使用openssl生成的自签名证书.

解决方法:

做了一些研究后,我找到了问题的答案:

1.错误“dh键太小”

由于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.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...