[英]Add client certificate in socket connection
自最近幾天以來,我一直困擾於此問題,但無法獲得任何解決方案。
我正在使用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/
此命令顯示已連接,這是否意味着我的證書很好?
請有人幫我解決這個問題。 請
謝謝。
根據PHP文檔 ,必須在local_pk
流上下文選項中指定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
選項)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.