ホームページ  >  記事  >  バックエンド開発  >  OpenSSL を使用して HTTPS URL にアクセスするときに発生する「警告: 暗号化を有効にできませんでした」エラーを解決するにはどうすればよいですか?

OpenSSL を使用して HTTPS URL にアクセスするときに発生する「警告: 暗号化を有効にできませんでした」エラーを解決するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-23 11:08:02379ブラウズ

How to Resolve

OPENSSL 警告: 特定の HTTPS URL の「暗号化を有効にできませんでした」

この問題は、file_get_contents を使用して特定の HTTPS URL にアクセスしようとすると発生します。 openssl 拡張機能を有効にしているにもかかわらず、() 関数が返されます。この関数は、必要な暗号化操作を実行できないことを示すエラー メッセージ「警告: 暗号化の有効化に失敗しました」を返します。

この問題の根本原因は、問題のある Web サイトで使用されているセキュリティ プロトコルにあります。この場合、Web サイトは、時代遅れで脆弱なプロトコルである SSLv3 を利用しています。 openssl のデフォルト設定は、セキュリティ上の理由から、デフォルトでは SSLv3 をサポートしていません。

この問題を解決し、Web サイトからコンテンツを正常に取得するには、回避策が必要です。 1 つのオプションは、curl_setopt() 関数を使用して、使用する SSL バージョンを手動で指定することです。これは、CURLOPT_SSLVERSION オプションを 3 (SSLv3 に対応) に設定することで実現できます。

<code class="php">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"));</code>

Windows で発生する可能性のあるもう 1 つの潜在的な問題は、ルート証明書にアクセスできないことです。これに対処するには、ルート証明書をダウンロードし、CURLOPT_CAINFO および CURLOPT_SSL_VERIFYPEER オプションを使用してその場所を手動で指定することをお勧めします。

<code class="php">curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/certs/cacert.pem");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);</code>

これらの回避策を実装すると、問題のある証明書に正常にアクセスしてコンテンツを取得できるようになります。 openssl を使用したウェブサイト

以上がOpenSSL を使用して HTTPS URL にアクセスするときに発生する「警告: 暗号化を有効にできませんでした」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。