1

我最初在运行 CURLOPT_SSL_VERIFYPEER 的 2 台服务器之间建立了连接,设置为“false”,SSL 证书中没有通用名称以避免错误。以下是使用证书连接到服务器的客户端代码:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);

但是,我最近更改了此代码(将其设置为 true)并以 PEM 格式指定了计算机证书。

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);
curl_setopt($ch,CURLOPT_CAINFO,getcwd().'/includes/hostcert/Hostname.crt');

这在测试机器上的本地网络上效果很好,因为证书是用它的 CN 主机名签名的。如何设置 PHP 代码,使其仅信任主机名计算机并保持安全连接。

我很清楚您可以将 CURLOPT_SSL_VERIFYHOST 设置为“0”或“1”并将 CURLOPT_SSL_VERIFYPEER 设置为“false”,但这些不是有效的解决方案,因为它们破坏了 SSL 安全性。

我的 /etc/hosts 文件如下:

#<ip-address>   <hostname.domain.org>   <hostname>
127.0.0.1       localhost.localdomain   localhost ExampleHostName
::1             localhost.localdomain   localhost
4

1 回答 1

2

您需要按照客户端的要求生成具有有效主机名的证书。如果您使用machine.local了您的内部名称,但现在想使用外部客户端通过 调用它machine.example.org,那么您需要您使用的证书对machine.example.org.

如果您需要两者(因为可能使用不同的主机名调用同一台机器),请使用主题备用名称扩展名并将多个 DNS 条目放入您的证书中。

于 2012-06-05T16:37:57.297 回答