私はもともと、エラーを回避するために、SSL証明書に共通名を付けずにCURLOPT_SSL_VERIFYPEERを「false」に設定して実行している2台のサーバー間の接続を持っていました。以下は、証明書を使用してサーバーに接続したクライアントコードです。
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