1

私はもともと、エラーを回避するために、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
4

1 に答える 1

2

クライアントの要求に応じて、有効なホスト名で証明書を生成する必要があります。内部名に使用machine.localしたが、を介してそれを呼び出す外部クライアントを使用したいmachine.example.org場合は、使用する証明書が有効である必要がありますmachine.example.org

両方が必要な場合(同じマシンが異なるホスト名で呼び出される可能性があるため)、Subject Alternative Name拡張機能を使用して、証明書に複数のDNSエントリを配置します。

于 2012-06-05T16:37:57.297 に答える