使用 Kohana 验证 SSL 证书失败

Posted

技术标签:

【中文标题】使用 Kohana 验证 SSL 证书失败【英文标题】:Verifying SSL certificate failing with Kohana 【发布时间】:2012-04-06 04:33:19 【问题描述】:

我正在尝试在我的 localhost 环境中使用 Kohana 使用 HTTPS,但它不断抛出以下错误,有人知道如何解决这个问题吗?

Request_Exception [ 0 ]: Error fetching remote /protected/someFunctionCall.json [ status 0 ] SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我正在构建这样的帖子请求:

$url = "https://www.foobar.com:18443";          
$data = http_build_query($params);

// This uses POST - http://kohanaframework.org/3.2/guide/kohana/requests#external-requests
$request = Request::factory($url)
        ->method(Request::POST)
        ->body($data)
        ->headers('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');

$response = $request->execute();

我已按照本指南使用 OpenSSL 生成了我的自签名证书:

(西蒙的回答):How do I allow HTTPS for Apache on localhost?

【问题讨论】:

【参考方案1】:

您很可能会看到此错误,因为您使用的是 SSL 客户端不信任的自签名证书。我不熟悉 Kohana 或 php,但我认为客户端可能在幕后使用 openssl。某处应该有一个名为 cacerts.pem 或 ca-bundle.crt 之类的文件来保存信任锚。这些信任锚是客户端软件将信任的 CA 证书。如果服务器使用从这些 CA 之一颁发的证书,则不应出现错误。您可以尝试将您的自签名服务器证书添加到您的 CA 证书文件(例如,cacerts.pem)的末尾。添加证书时,请确保您的证书采用 PEM 格式。 PEM 格式的证书由以下几行分隔:

-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----

或者,可能有一些选项告诉客户端接受任何服务器证书。不是很好的安全实践,但如果只是自己尝试一下,可以作为临时解决方案。例如,在 cURL 中,有一个选项可以执行此操作。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

cURL 中的正确方法是指定保存信任锚的文件。这段代码 sn-p 是基于我在下面链接到的文章。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/MyTrustedCerts.crt")

使用 CURLOPT_CAINFO,您可以指定保存信任锚的文件的名称。此文件应包含一个或多个证书,客户端软件将使用该证书来验证服务器证书。

此外,设置为 2 的 CURLOPT_SSL_VERIFYHOST 告诉 cURL 检查公用名是否存在,并验证它是否与提供的主机名匹配。在生产环境中,此选项的值应保持为 2(默认值)。

这篇文章Using cURL in PHP to access HTTPS (SSL/TLS) protected sites 在 PHP 中使用 cURL 时有一些解决方法/修复此错误的方法。

【讨论】:

是的,我已经设法通过 curl 执行 SSL POST 请求,并将上述 CURLOPT_SSL_VERIFYPEER 变量设置为 false。但这不是一个理想的解决方案。 是的,正确的方法是告诉客户端它可以信任哪些证书。使用 cURL 你可以做到这一点。我添加了一些示例代码。

以上是关于使用 Kohana 验证 SSL 证书失败的主要内容,如果未能解决你的问题,请参考以下文章

服务器的SSL证书验证失败问题,怎么解决

如何修复 SSL 证书验证失败

ncat SSL 问题,证书验证失败(自签名证书)

证书验证失败怎么回事?

MariaDB over SSL 不工作,“证书验证失败”

ClientWebsocket SSL 证书验证失败