Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php curl ssl验证_Php_Ssl_Curl - Fatal编程技术网

php curl ssl验证

php curl ssl验证,php,ssl,curl,Php,Ssl,Curl,我只是用php开发了一些softvare,使用curllib连接亚马逊、贝宝、微信,我想验证证书,我发现一些参数与此相关: CURLOPT\u SSL\u VERIFYPEER:我认为如果您想验证SSL证书,这个参数应该设置为true 但我对《卷发》(CURLOPT_CAINFO)感到困惑 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT, $sslCertPath); curl_setopt(

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

CURLOPT\u SSL\u 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参数

我认为,
CURLOPT_CAINFO
是一个参数,为了确保亚马逊就是亚马逊,贝宝就是贝宝

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

我说得对吗


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

如果你想使用CURLOPT_SSL\u VERIFYPEER,试试看:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/cacert.pem');

在此处下载cacert.pem

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

因此,
CURLOPT_CAINFO
的目的是允许您指定
ca bundle.crt
的路径名,前提是cURL无法自动找到该路径名,或者您希望根据自定义根证书进行检查

CURLOPT\u SSLCERT
CURLOPT\u SSLKEY
的目的是提供一个客户端(而不是服务器端)证书,以便服务器可以验证您的身份(通常用于在线银行,以便您可以签署您的交易)-在您的用例中,您很可能不需要这些证书


CURLOPT\u SSL\u VERIFYPEER
的目的是让您能够强制cURL跳过对服务器证书的验证,以防您的CA包根本不更新或丢失。

因此,在将此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
希望这对你有帮助