簡體   English   中英

在套接字連接中添加客戶端證書

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM