环境: Ubuntu 14.04 ,PHP 5.5.9 ,MYSQL 5.6.30
我不时会收到错误
mysqli::real_connect():
SSL操作失败,代码为1. OpenSSL
错误消息:
错误:1408F10B:SSL例程:SSL3_GET_RECORD:版本号错误
Front / nginx位于一台服务器上,而mysql位于不同的服务器上。
错误不是连续的,它是随机发生的,我在错误日志中找到了这些错误消息,所以我无法真正进行完全调试。
示例:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$this->objMySqli = mysqli_init();
mysqli_options ($this->objMySqli, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$this->objMySqli->ssl_set($this->SslKey, $this->SslCertificate, $this->SslCACertificate, null, null);
$link = $this->objMySqli->real_connect($this->Server, $this->Username, $this->Password, $this->Database, $this->Port);
if (!$link) {
throw new QMySqliDatabaseException("Unable to connect to Database", -1, null);
}
SSL密码:
此行失败:
$link = $this->objMySqli->real_connect($this->Server, $this->Username, $this->Password, $this->Database, $this->Port);
答案 0 :(得分:0)
mysql版本5.6.30有问题, 我已经更新到5.6.32,现在这个错误不再发生了。
答案 1 :(得分:0)
升级并没有解决我的问题,但我确实找到了新的解决方案。
TLDR; 将您的PKCS#8格式密钥转换为PKCS#1格式密钥
openssl rsa -in example.com.server.key.pem -out example.com.server.key.pkcs1.pem
我遇到了这些错误:
基本上,如果您的私钥是PKCS#8格式而不是PKCS#1格式,MySQL将不会“找到”私钥。
许多Stack Overflow答案都说重命名页眉和页脚,在页眉和页脚中包含RSA,如下所示:
来自(PKCS#8格式)
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
To(PKCS#1格式)
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
但是,这不会更改页眉和页脚之间的私钥数据。使用带有修改后的页眉和页脚的PKCS#8格式密钥时,MySQL启动时没有出现错误,但是当我尝试连接mysqli时,我得到了
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
通过将我的私钥转换为PKCS#1格式,密钥可以工作,我可以正常连接:
openssl rsa -in example.com.server.key.pem -out example.com.server.key.pkcs1.pem
请注意,较新的OpenSSL版本,至少1.0.2j(我使用的是)使用时输出PKCS#8键
openssl req -config "openssl.cnf" \
-keyout "private/example.com.server.key.pem" -new -sha256 \
-days 3652 -nodes -out "csr/example.com.server.csr.pem"
但是使用不同的选项可能会输出PKCS#1键(可能是-newkey rsa:2048
,我还没有测试过)。这可以解释为什么只有一些人在使用openssl生成的私钥时遇到这种情况。
在MySQL 5.6.17和5.7.14中出现了这个问题,所以好像错误没有修复。