自从过去几天以来我一直坚持这个问题,但无法得到任何解决方案。
我正在使用net php-epp客户端,这是我的代码......
$context = stream_context_create(
array(
'ssl'=>array(
'local_cert'=> dirname(__FILE__).'/cert.pem',
'passphrase' => dirname(__FILE__).'/key.pem',
)
)
);
$greeting = $client->connect($host, $port, $timeout, $ssl, $context);
echo $greeting;
我收到以下错误...
Warning: stream_socket_client(): Unable to set private key file
在您key.pem
开头-----BEGIN RSA PRIVATE KEY-----
和cert.pem
以-----BEGIN CERTIFICATE-----
但是我可以使用...
连接openssl s_client -connect epp.dom.net:700 -key key.pem -cert cert.pem -CApath /etc/ssl/certs/
此命令显示已连接,这是否意味着我的证书没问题?
有人帮我解决这个问题。请
谢谢。
答案 0 :(得分:1)
根据PHP documentation,必须在local_pk
流上下文选项中指定私钥。当私钥文件本身使用密码加密时,passphrase
选项(您当前正在使用)是必需的:
local_pk
字符串在证书(local_cert)和私钥的单独文件的情况下,文件系统上的本地私钥文件的路径。
passphrase
字符串用于编码local_cert文件的密码短语。
这意味着你的流上下文应该像这样初始化:
$context = stream_context_create(array(
'ssl' => array(
'local_cert' => dirname(__FILE__) . '/cert.pem',
'local_pk' => dirname(__FILE__) . '/key.pem',
)
));
或者,您也可以将证书和私钥连接到一个文件中,并仅使用local_cert
选项(如果 - 并且仅当 - 您的私钥使用加密时加passphrase
选项密码)。