エラー:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました

今日デバッグHTTPSインターフェイスこのようなエラーに遭遇する場合:
;カールのerrno = 60カールエラー= SSL証明書の問題は、CA CERTでOKが詳細:.されていることを確認
:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書確認に失敗しましたエラー

関連する記事が見つかりましたカール・イン・php-を使用すると、アクセスHTTPS-ssltls保護-サイト

記事による一時的な解決策は、検出証明書バイパスにする方法について説明します。

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

このような設定の後、それが正常に行わことができます。

しかし、適切な治療法は、証明書をダウンロードして資料に記載され、指定します

curl_setopt($curl, CURLOPT_CAINFO, getcwd().'/CA/***.crt');

リクエストの実行後、再び、しかし、問題は解決しませんでした。

いくつかの奇妙なは、ときFrameworkのクラスライブラリの操作を使用する前に、この問題を持って、その後、フレームワークライブラリのソースコードをチェックし、次の設定を見つけることができません。

curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);

これらの2つの特定の役割の設定パラメータで確認されています。

CURLOPT_SSL_VERIFYPEER  

FALSE 禁止 cURL 验证对等证书(peer's certificate)。要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录。     

自cURL 7.10开始默认为 TRUE。从 cURL 7.10开始默认绑定安装。
-----------------------------
CURLOPT_SSL_VERIFYHOST  

设置为 1 是检查服务器SSL证书中是否存在一个公用名(common name)。
译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。 
设置成 2,会检查公用名是否存在,并且是否与提供的主机名匹配。 0 为不检查名称。 在生产环境中,这个值应该是 2(默认值)。     

值 1 的支持在 cURL 7.28.1 中被删除了。

カールの独自のサーバのバージョンを確認しcurl --version、それが7.22であることが判明し、またはサポートCURLOPT_SSL_VERIFYHOST値の設定1。

続行あなたが設定されていない場合は、「CURLOPT_SSL_VERIFYPEER」このオプションは、デフォルトでは、効果的なことを確認するためにOSCP証明書サーバーに必要であること、真の間、証明書は、有効性を確認するために、OSCP証明書サーバーに必要がある場合がありますことを発見し、このことを「証明書をピア」にチェックセックス、まだ私達のサーバー、証明書を使用する自己生成されているので、ここでは、購入しない証明書サーバが生成した独自のを使用するため、カールは、このパラメータが設定されていないときに、問題を決定するには、はるかに可能性があります証明書を確認するためにOSCP証明書へのデフォルトサーバがエラーをしてきていません。

同社は現在、証明書を購入するために使用していないので、それは「CURLOPT_SSL_VERIFYPEERを」検証を続行することはできませんので、購入した証明書を使用して、正しく実行することができたときに、本当です。

公開された105元の記事 ウォン称賛58 ビュー410 000 +

おすすめ

転載: blog.csdn.net/ljl890705/article/details/78595047