Phpおよびcurlライブラリを使用して、安全な(httpsを使用する)Webページのコンテンツをダウンロードしようとしています。
ただし、読み取りに失敗し、エラー60が表示されます。「SSL証明書の問題、CA証明書に問題がないことを確認してください。」
「詳細:SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました」
だから...かなり自明なエラーメッセージです。
私の質問は次のとおりです。SSL証明書(正しい証明書)を送信し、このページを取得して検証し、許可する方法を教えてください。
また、ここにあなたが疑問に思っている場合の私のオプションの配列があります:
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_SSL_VERIFYHOST => 1,
);
どんな提案でも素晴らしいだろう、アンドリュー
エラーを誤って解釈しているようです。あなたが接続しているサイトは自己署名または他の一般的な問題のように思えます。通常のブラウザの警告と同様に、最も簡単な回避策はチェックを無効にすることです。
CURLOPT_SSL_VERIFYPEER
とCURLOPT_SSL_VERIFYHOST
をFALSE
に設定する必要があります。これにより、2つのメインチェックが無効になります。両方とも必要ではないかもしれませんが、少なくともこれでうまくいくはずです。
明確にするために、これはあなたを保護するために設計された機能を無効にします。他の方法で証明書とサーバーを検証した場合にのみ、これを行います。
PHPサイトの詳細: curl_setopt()
SSLピア検証を使用する場合(オフにすることは必ずしも良い考えではありません)、すべてのアプリケーションに対してグローバルにWindowsで次のソリューションを使用できます。
curl.cainfo=C:/path/to/cacert.pem
これはすべて魔法です。CURLは証明書を検証できるようになりました。
(Linuxでは、少なくともUbuntuではそのような問題はないと知っているので)
SOに関するアドバイスに従った後でも、次のようなエラーに問題がある可能性があります。
error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error
問題はSSLバージョンにあります。バージョン3には次を使用します
curl_setopt($ch, CURLOPT_SSLVERSION,3)
Uはピアとホストの検証も有効にしており、実際の証明書ファイルを指していると想定しています。例えば。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem");
これはopensslとVeriSignの「問題」です。
同様の問題があり、opensslには、サーバー証明書に署名するためにVeriSignが使用する中間SSL証明書がありませんでした。
https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR657
これらの中間証明書をVeriSignホームページまたはFirefox cert-database-exportからローカルca-certificatesリストにインポートする必要があり、この手順の後、エラーなしでwget/curlを使用して保護された接続を使用できました。
開発者のマシンの場合-この証明書をシステムに追加することもできます。このようなもの- https://www.globalsign.com/support/intermediate/intermediate_windows.php これはWinXP用ですが、他のバージョンでも動作します窓の。
これは明らかにopensslのバグにあります。 Tomcatは、使用可能な暗号リストを制限することにより、/ etc/Tomcat7/server.xmlでこれを回避するように構成できます。
<Connector protocol="HTTP/1.1" SSLEnabled="true" ... ciphers="SSL_RSA_WITH_RC4_128_SHA"/>
SSL証明書を送信していません。接続しているホストにSSL証明書がインストールされているため、SSL証明書に問題があるようです。オプション-kまたは--insecureを使用して、苦情を乗り越えます。
あ。ライアン・グラハムの答えをご覧ください