为什么我收到此"SSL证书问题:无法获取本地颁发者证书"错误验证reCAPTCHA?

5 php ssl recaptcha laravel laravel-5

我是PHP的新手,而且在Laravel我有以下奇怪的问题.

我已经开发了包含Google reCAPTCHA字段的注册表单,如下所示:

<form method="post" action="/registration">

    ...............................................................
    ...............................................................
    ...............................................................

    <div class="form-group">
        <label>Captcha</label>
        <div class="input-group">
            {!! app('captcha')->display(); !!}
        </div>
    </div>

    {{csrf_field()}}

    <button type="submit" class="btn btn-default">Submit</button>

</form>
Run Code Online (Sandbox Code Playgroud)

所以这个领域经典的"我不是机器人"复选框.

如果我只需要选中此复选框,则表单提交给处理/ registration资源的控制器时没有问题.

这是控制器方法(带有相关的输入形式验证器),它处理此请求并验证表单输入:

public function store(Request $request) {

    Log::info('store() START');

    $data = Input::all();

    Log::info('INSERTED DATA: '.implode("|", $data));

    $rules = array(
        'name' => 'required',
        'surname' => 'required',
        'login' => 'required',
        'email' => 'required|email|confirmed',
        //'email_confirmation' => 'required|email|confirmed',
        'pass' => 'required|required',
        //'passConfirm' => 'required',
        'g-recaptcha-response' => 'required|captcha',

    );

    $validator = Validator::make($data, $rules);

    if ($validator->fails()){
        return Redirect::to('/registration')->withInput()->withErrors($validator);
    }
    else{
        // Do your stuff.
    }
}
Run Code Online (Sandbox Code Playgroud)

如果打开弹出窗口要求选择一些特定的图像,当我提交表单时,我获得以下错误消息:

RequestException in CurlFactory.php line 187:
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

in CurlFactory.php line 187
at CurlFactory::createRejection(object(EasyHandle), array('errno' => 60, 'error' => 'SSL certificate problem: unable to get local issuer certificate', 'url' => 'https://www.google.com/recaptcha/api/siteverify', 'content_type' => null, 'http_code' => 0, 'header_size' => 0, 'request_size' => 0, 'filetime' => -1, 'ssl_verify_result' => 20, 'redirect_count' => 0, 'total_time' => 0.079000000000000001, 'namelookup_time' => 0.016, 'connect_time' => 0.032000000000000001, 'pretransfer_time' => 0, 'size_upload' => 0, 'size_download' => 0, 'speed_download' => 0, 'speed_upload' => 0, 'download_content_length' => -1, 'upload_content_length' => -1, 'starttransfer_time' => 0, 'redirect_time' => 0, 'redirect_url' => '', 'primary_ip' => '216.58.212.132', 'certinfo' => array(), 'primary_port' => 443, 'local_ip' => '168.202.22.52', 'local_port' => 50542)) in CurlFactory.php line 150
Run Code Online (Sandbox Code Playgroud)

它进入上一个商店(Request $ request)控制器方法.我认为问题与此验证设置有关:

'g-recaptcha-response' => 'required|captcha'
Run Code Online (Sandbox Code Playgroud)

因为我认为它会自动调用Google服务器来检查验证码(事实上,在之前的错误消息中,它指定了应该与Google相关的IP:216.58.212.132).

所以,在网上搜索我发现这样的错误与这种错误有关:

https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate

这基本上是一个必须设置为Apachecacert.pem文件.

这很难过:

我有完全相同的但在Windows和xampp上.我的解决方案很简单:请点击此链接:http://curl.haxx.se/ca/cacert.pem复制整个页面并将其保存在:"cacert.pem"

然后在php.ini文件中插入或编辑以下行:curl.cainfo ="[pathtothisfile]\cacert.pem"

问题解决了

所以根据我的理解,这个文件(https://curl.haxx.se/ca/cacert-2017-01-18.pem)是一组CA证书,用于验证服务器是否真的是正确的站点你正在和你说话.

所以我没有将这个文件设置到我的Apache中的事实可能是我的问题的原因?

如果有什么我要做的确切设置它?我没有承诺如何处理这个下载的文件.

小智 3

我自己解决了,这就是问题解释和解决方案;-)

http://ourcodeworld.com/articles/read/196/xampp-wampp-php-ssl-certificate-error-unable-to-get-local-issuer-certificate

  • 你最好在这里解释一下。会更有帮助。 (5认同)