我最初在我的 2 台服务器之间建立了连接,CURLOPT_SSL_VERIFYPEER 在 SSL 证书中设置为"false",没有公用名以避免错误。 以下是使用证书连接到服务器的客户端代码:
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
客户端的请求生成具有有效主机名的证书。如果您已使用 machine.local
作为内部名称,但现在想要使用通过 machine.example.org
调用它的外部客户端,则需要您使用的证书对 machine.example.org
有效。
如果同时需要两者(因为可能使用不同的主机名调用同一台计算机),请使用使用者备用名称扩展并在证书中放置多个 DNS 条目。