【问题标题】:SSL operation failed with code 1. OpenSSL Error messages:SSL 操作失败,代码为 1。OpenSSL 错误消息:
【发布时间】:2017-09-15 18:34:50
【问题描述】:

我正在使用http://www.question2answer.org/ 软件和标准插件进行验证。我尝试更新软件,升级后我不断收到此错误。我不知道如何解决这个问题。我环顾四周,但没有任何直接关系。

警告:file_get_contents():SSL 操作失败,代码为 1。 OpenSSL 错误消息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 /qa/qa-plugin/recaptcha-captcha/recaptchalib.php 在第 128 行

警告:file_get_contents():无法启用加密 /qa/qa-plugin/recaptcha-captcha/recaptchalib.php 在第 128 行

警告:file_get_contents( https://www.google.com/recaptcha/api/siteverify?secret=abc6LcMwv8SAAAAAN9QOkIlVKRQZzHS3DeZ8ZLxwxxcdsd-cs&response=03AOmkcwJV_JkhxK8hGJTIVKEDcPrNH5Y0wLwndp7v20Ipqd4HMO21LWHSyPsLFsdfdsfsdsdfsdA6FZ1LiFJZpl6-CmppsTAWc8Qzft_RXLvlzunzQtZWNDp0Kw8T-drMvHiOZf909v4ScysiPmaMrxkq_SSlJaOE_Q6sdfsdfdsfdsh5X7xLqvoFDFbV16BJBTkJ5Pot5ZDwmSGZSD_0pygTdEzh8j-tGuSpZLSDVJmQ7Xq6HR70Dd2idtKz_gfcIAZQisdfsdfdsfJHH1LyY3FAG_x9zHemy3tXF6oE7rWuBZ8JoHehkWhYYChe-cBbdSX1ZqPioNNaSvkREbooI7esdfsdfd3JkynEKlqnUBl3t__qpDMu&remoteip=12.102.238.217&version=php_1.1.2): 无法打开流:操作失败 /qa/qa-plugin/recaptcha-captcha/recaptchalib.php 在第 128 行

我去了第 128 行,这就是我在那里看到的。我看到这一行 "return file_get_contents(self::SITE_VERIFY_URL . $params->toQueryString());". 我在这行周围有更多代码供您参考。

/**
 * Sends GET requests to the reCAPTCHA service.
 */
class ReCaptchaGetRequestMethod implements ReCaptchaRequestMethod{

    const SITE_VERIFY_URL = 'https://www.google.com/recaptcha/api/siteverify?';

    /**
     * Submit the request with the specified parameters.
     *
     * @param ReCaptchaRequestParameters $params Request parameters
     * @return string Body of the reCAPTCHA response
     */
    public function submit(ReCaptchaRequestParameters $params){
        return file_get_contents(self::SITE_VERIFY_URL . $params->toQueryString());
    }
}

你能帮忙吗?我尝试了一些诸如在 php.ini 中添加证书之类的方法,但没有成功。一切正常,当我升级时,它开始失败。所有注册都卡住了。 请帮忙。

【问题讨论】:

    标签: php ssl openssl recaptcha


    【解决方案1】:

    上述解决方案是使用基于 CURL 的解决方案,将 file_get_contents 替换为 CURL。下面是新修改的代码。我已经在step by step blog article 中捕获了所有内容,并为每个人提供了步骤。

    $url = self::SITE_VERIFY_URL . $params->toQueryString();
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $data = curl_exec($ch);
        curl_close($ch);
    

    【讨论】:

    • 我不确定这个解决方案是否正确,您的错误消息显示“SSL3_GET_SERVER_CERTIFICATE:certificate verify failed”,看起来和这里一样 stackoverflow.com/q/26148701/2360229 你现在正在做的是:你设置了 CURLOPT_SSL_VERIFYPEER = false 您也可以使用 file_get_contents() 执行此操作,请参阅stackoverflow.com/a/28701786/2360229 所以,基本上,您只是说,该函数不应验证对等方,这就是您抑制初始错误的方式,但不能解决问题。
    猜你喜欢
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 2022-01-11
    • 2016-09-07
    • 2020-05-12
    • 2020-05-09
    • 2018-07-06
    • 2022-06-12
    相关资源
    最近更新 更多