我只是用php开发了一些软件,使用curllib连接亚马逊,贝宝,微信,我想验证证书,我找到了一些与此相关的参数:
CURLOPT_SSL_VERIFYPEER:我认为如果你想验证ssl证书,这个参数应该设置为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,什么时候设置follow 4 params?
我认为CURLOPT_CAINFO是一种说法,为了确保亚马逊是亚马逊,贝宝是贝宝;
下面的4个参数是为了确认我是真实的我,亚马逊可以通过这4个参数来确认。
我说的对吗?
我不知道如何获得CURLOPT_CAINFO ca ?因为我想如果我确认亚马逊是亚马逊,我只是验证亚马逊给我的ca是足够的,为什么我要给亚马逊发送一个ca呢?
发布于 2018-09-14 14:39:08
如果您想使用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
发布于 2018-09-14 14:39:17
通常,当您从网站收到证书时-它包含网站自己的证书加上中间证书(签署/发布网站证书的证书)。为了验证它们,您必须有一个根证书列表(CA是Certificate Authority的缩写),它被称为"CA bundle“,通常位于/etc/ssl/certs/ca-bundle.crt。中间证书(可以有多个中间证书-每个证书都将由链中的下一个证书签名/必须由链中的下一个证书签名)必须由根证书签名才能可信。
因此,CURLOPT_CAINFO的目的是允许您指定ca-bundle.crt的路径名,如果cURL不能自动找到它-或者如果您想要检查您的自定义根证书。
CURLOPT_SSLCERT和CURLOPT_SSLKEY的目的是提供客户端(而不是服务器)证书,以便服务器可以验证您的身份(通常用于在线银行,以便您可以对交易进行签名)-在您的用例中最有可能不需要这些证书。
CURLOPT_SSL_VERIFYPEER的目的是使您能够强制cURL跳过服务器证书的验证-以防您的CA捆绑包不是最新的或根本不存在。
发布于 2018-09-14 15:21:53
因此,在将此cacert.pem文件下载到项目中后,您现在可以在PHP中执行以下操作:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");或者,可以通过将以下内容添加到php.ini进行全局设置
curl.cainfo=/path/to/cacert.pem希望这对你有帮助。
https://stackoverflow.com/questions/52325791
复制相似问题