PHP:无法使用函数stream_socket_client()使用TLS协议设置私钥文件

时间:2016-06-20 04:37:53

标签: php ssl certificate key

我在PHP中使用stream_socket_client()以使用TLS协议连接到服务器时出现问题。

让我在下面展示我的代码:

$host = '192.168.0.112';
$context = stream_context_create();
$result = stream_context_set_option($context, 'ssl', 'local_cert', 'D:/xampp/htdocs/ssl_test/cert.pem'); 
$result = stream_context_set_option($context, 'ssl', 'verify_peer', 'true');
$result = stream_context_set_option($context, 'ssl', 'passphrase', '123456'); 
$socket = stream_socket_client('tls://'.$host.':5443/Exec', $errno, $errstr, 60, STREAM_CLIENT_CONNECT, $context);

运行后,我得到了这样的消息错误:

  

警告:stream_socket_client():无法在第9行的D:\ xampp \ htdocs \ ssl_test \ index2.php中设置私钥文件“D:\ xampp \ htdocs \ ssl_test \ cert.pem”

     

警告:stream_socket_client():无法在第9行的D:\ xampp \ htdocs \ ssl_test \ index2.php中启用加密

     

警告:stream_socket_client():无法连接到第9行的D:\ xampp \ htdocs \ ssl_test \ index2.php中的tls://192.168.0.112:5443 / Exec(未知错误)

请注意,我有两个常用文件,用于证书cert.pem,key.pem和密码=“123456”

我不知道是什么错误或缺少将stream_context_set_option()配置到服务器以及将key.pem设置到配置的位置。

如果有人知道,请帮助我。

非常感谢先进, Vannak。

1 个答案:

答案 0 :(得分:2)

我找到了解决这个错误的原因,因为我的cert.pem需要附带私钥。所以我需要添加一行附加我的key.pem。

stream_context_set_option($context, 'ssl', 'local_pk', 'D:/xampp/htdocs/ssl_test/key.pem');

希望这个问题对其他人有用。