首页  >  文章  >  后端开发  >  如何解决使用 OpenSSL 的 file_get_contents() 加密初始化失败的问题?

如何解决使用 OpenSSL 的 file_get_contents() 加密初始化失败的问题?

DDD
DDD原创
2024-10-23 12:22:36806浏览

How to Resolve Failed Crypto Initialization for file_get_contents() Using OpenSSL?

使用 OPENSSL 对 file_get_contents() 的加密初始化失败进行故障排除

在使用 OPENSSL 的 file_get_contents() 时遇到“无法启用加密”错误时,进行调查至关重要根本问题。

确定根本原因

提供的错误日志表明加密初始化期间超时。然而,问题可能出在其他地方。一种可能的原因是网站使用了不受支持的 SSL 版本,例如 SSLv3。

使用 cURL 的解决方案

绕过 file_get_contents() 的限制并启用 SSLv3 支持,建议改用 cURL:

<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>

此解决方案显式将 SSL 版本设置为 v3,允许curl 成功处理 SSL 握手。

Windows 用户的其他注意事项

对于Windows用户,可能还需要为curl指定根证书的位置。这可以通过以下方式实现:

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

通过将 CURLOPT_SSL_VERIFYPEER 选项设置为 true,curl 将根据指定的根证书验证对等方的证书。

以上是如何解决使用 OpenSSL 的 file_get_contents() 加密初始化失败的问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn