true, "cafile" => $cafile ]]); $socket = stre-6ren">
gpt4 book ai didi

PHP:未使用 stream_socket_client() 设置 TLS 套接字

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:52 25 4
gpt4 key购买 nike

我正在尝试使用以下代码打开 TLS 连接:

<?php

$cafile = '/var/www/html/mosquitto/cert.pem';

$socketContext = stream_context_create(["ssl" => [
"verify_peer_name" => true,
"cafile" => $cafile
]]);

$socket = stream_socket_client("tls://xx.xx.xx.xx:8883", $errno, $errstr, 60, STREAM_CLIENT_CONNECT, $socketContext);

if (!$socket) {
print("Error: ".$errstr);
return false;
}else{
print("Connection Opened");
}

?>

Nginx 错误日志:

2018/02/08 17:40:28 [error] 1331#1331: *658 FastCGI sent in stderr: "PHP message: PHP Warning:  stream_socket_client(): SSL operation $
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in /var/www/html/test.php on line 10
PHP message: PHP Warning: stream_socket_client(): Failed to enable crypto in /var/www/html/test.php on line 10
PHP message: PHP Warning: stream_socket_client(): unable to connect to tls://xx.xx.xx.xx:8883 (Unknown error) in /var/www/html/test.$

这总是进入错误部分 !$socket 但没有任何错误字符串。这只是错误:。我该如何解决这个问题?我推测 cert.pem 文件可能是问题所在。我需要在那里放什么文件?

谢谢!

最佳答案

How can I fix this issue?

在您知道问题所在之前,这将非常困难。

使用 stream_socket_client 显然无法解决问题并且不会为您提供任何有用的诊断信息。您需要分解此调用的作用并单独测试每个部分。

'xx.xx.xx.xx' 代表 IP 地址还是主机名?如果是后者,您可能会遇到分辨率问题。尝试 dns_get_record () 如果是前者,您希望如何验证证书的主题?

你能在端口 8883 上连接吗?尝试 fsockopen ()

SSL 是否有效?

  • 你能协商一个密码吗
  • 证书是否有效
  • 是您的 certs.pem 文件中由 CA 签署的证书

您可以使用 openssl s_client 从命令行检查这些

更新

根据您的编辑:certificate verify failed - 请参阅上面关于 IP 地址和证书验证的注释

关于PHP:未使用 stream_socket_client() 设置 TLS 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48685270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com