cURL PHP 具有自签名证书的专用服务器之间的正确SSL


cURL PHP Proper SSL between private servers with self-signed certificate

我最初在我的 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 条目。