OPENSSL 警告: 特定の HTTPS URL の「暗号化を有効にできませんでした」
この問題は、file_get_contents を使用して特定の HTTPS URL にアクセスしようとすると発生します。 openssl 拡張機能を有効にしているにもかかわらず、() 関数が返されます。この関数は、必要な暗号化操作を実行できないことを示すエラー メッセージ「警告: 暗号化の有効化に失敗しました」を返します。
この問題の根本原因は、問題のある Web サイトで使用されているセキュリティ プロトコルにあります。この場合、Web サイトは、時代遅れで脆弱なプロトコルである SSLv3 を利用しています。 openssl のデフォルト設定では、セキュリティ上の理由から、デフォルトでは SSLv3 がサポートされていません。
この問題を解決して Web サイトからコンテンツを正常に取得するには、回避策が必要です。 1 つのオプションは、curl_setopt() 関数を使用して、使用する SSL バージョンを手動で指定することです。これは、CURLOPT_SSLVERSION オプションを 3 に設定することで実現できます。これは、SSLv3 に対応します。
function getSSLPage($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
var_dump(getSSLPage("https://eresearch.fidelity.com/eresearch/evaluate/analystsOpinionsReport.jhtml?symbols=api"));
Windows で発生する可能性のあるもう 1 つの潜在的な問題は、ルート証明書。これに対処するには、ルート証明書をダウンロードし、CURLOPT_CAINFO および CURLOPT_SSL_VERIFYPEER オプションを使用してその場所を手動で指定することをお勧めします。
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/certs/cacert.pem");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
これらの回避策を実装すると、openssl を使用して問題のある Web サイトに正常にアクセスし、コンテンツを取得できるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3