我只是通过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 ?
答案 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_SSLCERT
和CURLOPT_SSLKEY
的目的是出示客户端(而不是服务器)证书,以便服务器可以验证您的身份(通常用于在线银行,以便您可以签名)您的交易)-很可能在用例中不需要这些交易。
CURLOPT_SSL_VERIFYPEER
的目的是让您能够强制cURL跳过服务器证书的验证-万一您的CA捆绑软件不是最新的或根本不存在。