首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php curl ssl验证

php curl ssl验证
EN

Stack Overflow用户
提问于 2018-09-14 14:03:27
回答 3查看 1.5K关注 0票数 2

我只是用php开发了一些软件,使用curllib连接亚马逊,贝宝,微信,我想验证证书,我找到了一些与此相关的参数:

CURLOPT_SSL_VERIFYPEER:我认为如果你想验证ssl证书,这个参数应该设置为true;

但我对CURLOPT_CAINFO

代码语言:javascript
复制
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT, $sslCertPath);
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY, $sslKeyPath); 

什么时候设置CURLOPT_CAINFO,什么时候设置follow 4 params?

我认为CURLOPT_CAINFO是一种说法,为了确保亚马逊是亚马逊,贝宝是贝宝;

下面的4个参数是为了确认我是真实的我,亚马逊可以通过这4个参数来确认。

我说的对吗?

我不知道如何获得CURLOPT_CAINFO ca ?因为我想如果我确认亚马逊是亚马逊,我只是验证亚马逊给我的ca是足够的,为什么我要给亚马逊发送一个ca呢?

EN

回答 3

Stack Overflow用户

发布于 2018-09-14 14:39:08

如果您想使用CURLOPT_SSL_VERIFYPEER,请尝试一下:

代码语言:javascript
复制
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/cacert.pem');

在此处https://curl.haxx.se/docs/caextract.html下载cacert.pem

票数 1
EN

Stack Overflow用户

发布于 2018-09-14 14:39:17

通常,当您从网站收到证书时-它包含网站自己的证书加上中间证书(签署/发布网站证书的证书)。为了验证它们,您必须有一个根证书列表(CA是Certificate Authority的缩写),它被称为"CA bundle“,通常位于/etc/ssl/certs/ca-bundle.crt。中间证书(可以有多个中间证书-每个证书都将由链中的下一个证书签名/必须由链中的下一个证书签名)必须由根证书签名才能可信。

因此,CURLOPT_CAINFO的目的是允许您指定ca-bundle.crt的路径名,如果cURL不能自动找到它-或者如果您想要检查您的自定义根证书。

CURLOPT_SSLCERTCURLOPT_SSLKEY的目的是提供客户端(而不是服务器)证书,以便服务器可以验证您的身份(通常用于在线银行,以便您可以对交易进行签名)-在您的用例中最有可能不需要这些证书。

CURLOPT_SSL_VERIFYPEER的目的是使您能够强制cURL跳过服务器证书的验证-以防您的CA捆绑包不是最新的或根本不存在。

票数 1
EN

Stack Overflow用户

发布于 2018-09-14 15:21:53

因此,在将此cacert.pem文件下载到项目中后,您现在可以在PHP中执行以下操作:

代码语言:javascript
复制
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");

或者,可以通过将以下内容添加到php.ini进行全局设置

代码语言:javascript
复制
curl.cainfo=/path/to/cacert.pem

希望这对你有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52325791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档