【问题标题】:PHP: TLS socket not setting up using stream_socket_client()PHP:未使用 stream_socket_client() 设置 TLS 套接字
【发布时间】:2018-07-19 00:14:45
【问题描述】:

我正在尝试使用此代码打开 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,但没有任何错误字符串。只是Error:。我该如何解决这个问题?我推测 cert.pem 文件可能是问题所在。我需要放什么文件?

谢谢!

【问题讨论】:

  • 服务器日志中没有任何内容?
  • @JulienLachal 问题已更新。

标签: php sockets ssl


【解决方案1】:

我该如何解决这个问题?

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

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

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

你能连接到 8883 端口吗?试试fsockopen()

SSL 工作正常吗?

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

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

更新

来自您的编辑:certificate verify failed - 请参阅上面有关 IP 地址和证书验证的说明

【讨论】:

  • xx.xx.xx.xx 是 IP。我可以使用 python 在端口 8883 上连接。 SSL 似乎在其他任何地方都可以使用。证书详细信息:Let's Encrypt Authority X3 身份:Let's Encrypt Authority X3 验证人:DST Root CA X3 到期时间:2021 年 3 月 17 日,星期三
  • 有了这个证书,又颁发了两个文件,一个是私钥,另一个是域标识。我也必须使用这些吗?
  • 否 - 请阅读 SSL 的工作原理。您无法使用证书验证 IP 地址。私钥绝不能暴露给客户。您验证连接的 PEM 文件是包含 CA 的文件,而不是服务器证书。您需要对技术的工作原理有基本的了解,然后才能开始针对它进行开发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2014-07-15
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
相关资源
最近更新 更多