Php MySQL SSL远程连接错误:无法获取私钥

Php MySQL SSL远程连接错误:无法获取私钥,php,mysql,ssl,Php,Mysql,Ssl,我正在尝试编写一个PHP脚本(托管在带有GoDaddy的VPS上),该脚本使用SSL连接到远程MySQL数据库(托管在AmazonEC2实例上) 我生成了一些证书(根据),并在远程/服务器数据库上配置了my.cnf,如下所示: [mysqld] ssl-ca =/etc/mysql/ca-cert.pem ssl-cert =/etc/mysql/server-cert.pem ssl-key =/etc/mysql/server-key.pem [client] ss

我正在尝试编写一个PHP脚本(托管在带有GoDaddy的VPS上),该脚本使用SSL连接到远程MySQL数据库(托管在AmazonEC2实例上)

我生成了一些证书(根据),并在远程/服务器数据库上配置了my.cnf,如下所示:

[mysqld]
ssl-ca      =/etc/mysql/ca-cert.pem
ssl-cert    =/etc/mysql/server-cert.pem
ssl-key     =/etc/mysql/server-key.pem

[client]
ssl-ca      =/etc/mysql/ca-cert.pem
ssl-cert    =/etc/mysql/client-cert.pem
ssl-key     =/etc/mysql/client-key.pem
配置在远程/服务器端工作(即,本地运行到远程数据库的php脚本能够使用生成的SSL证书建立连接)

但是,虽然我可以在VPS上托管的PHP脚本和远程数据库之间建立不安全的连接,但当我尝试在相同的两个系统之间建立SSL连接时,会出现错误

如果我尝试使用以下命令行连接到远程数据库:

mysql -h hostIP --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem –u ssluser –p
我得到一个错误:

ERROR 2026 (HY000): SSL connection error: Unable to get private key
(HY000/2026): SSL connection error: Unable to get private key
当我尝试通过php脚本连接到服务器时,我遇到了相同的错误,使用:

<?php
 $link = mysqli_init();

 $key   = '/home/userName/etc/mysql/certs/client-key.pem' ; 
 $cert  = '/home/userName/etc/mysql/certs/client-cert.pem'; 
 $ca    = '/home/userName/etc/mysql/certs/ca-cert.pem';
 $capath = NULL;
 $cipher = NULL;

 mysqli_ssl_set ( $link , $key , $cert , $ca , $capath , $cipher );
 mysqli_real_connect ($link, $host, $user, $pass, $schema, 3306, NULL, MYSQLI_CLIENT_SSL);
?>
我已经尝试了按照(forums.mysql.com/read.php?11400856401127)进行修复,但是进行此更改会导致“分段错误”


有没有我错过的一步?我做错了什么?

已解决:

使用删除了client-key.pem密码短语

openssl rsa -in client-key.pem -out client-key2.pem
按照上的说明

我变了

$key   = '/home/userName/etc/mysql/certs/client-key2.pem' ; 

但不是

[client]
ssl-key     =/etc/mysql/client-key.pem

“openssl genrsa”以PKCS#1格式生成密钥:

  -----BEGIN RSA PRIVATE KEY-----
    ...

    -----END RSA PRIVATE KEY----- 
'openssl pkey'openssl req-newkey…..以PKCS#8格式生成:

-----BEGIN PRIVATE KEY----- 
... 

-----END PRIVATE KEY----- 
MySQL服务器需要PKCS#1格式

在BEGIN和END之后添加RSA为我解决了这个问题


查看链接了解详细信息

在我的案例中,server-key.pem的所有者是root而不是mysql。

对于我来说,密钥需要转换为完整的rsa格式,而不仅仅是更改头:

openssl rsa-in-client.key-out-client.key.rsa


多亏了dba交换上的那个答案

将SSL CA文件传递到MySQL中的SSL密钥文件时,也会发生此错误


我认为第一个命令应该是带有破折号而不是下划线的输出
client-key2.pem
。您可以将原始密钥转换到位:
openssl rsa-in-client-key.pem-out-client-key.pem。截至2017年1月26日的openssl 1.0.2k,此命令需要密码,没有密码无法完成。
-----BEGIN PRIVATE KEY----- 
... 

-----END PRIVATE KEY-----