PHP curl SSL验证

时间:2018-09-14 06:03:27

标签: php ssl curl

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

CURLOPT_SSL_VERIFYPEER:我想如果您想验证ssl cert,则此参数应设置为true;

但是我对CURLOPT_CAINFO

感到困惑
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,何时设置以下4个参数?

我认为CURLOPT_CAINFO是确保Amazon是亚马逊,paypal是paypal的参数;

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

我正确吗?

而且我不知道该如何获取CURLOPT_CAINFO,因为我认为如果我确认亚马逊是亚马逊,我只是验证亚马逊发送给我的ca是否足够,为什么我要向亚马逊发送一个ca ?

2 个答案:

答案 0 :(得分:1)

如果要使用CURLOPT_SSL_VERIFYPEER,请尝试:

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 :(得分:1)

通常,当您从网站收到证书时-它包含网站自己的证书以及中间证书(签署/颁发网站证书的证书)。为了同时验证它们,您必须具有一个根证书列表(CA由证书颁发机构缩写),该列表称为“ CA bundle”,并且通常位于/etc/ssl/certs/ca-bundle.crt中。中间证书(可以有一个以上的中间证书-每个中间证书将/必须由链中的下一个证书签名)必须由根证书签名才能得到信任。

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

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

CURLOPT_SSL_VERIFYPEER的目的是让您能够强制cURL跳过服务器证书的验证-万一您的CA捆绑软件不是最新的或根本不存在。