|
)
如果网站SSL证书买的是CA的(通常比较贵),那么访问时可以使用比较严格的认证,即:
[U]复制代码[/U] 代码如下:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 只信任CA颁布的证书
curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
如果网站的证书是自己生成的,或者是网上的小机构申请的,那么访问时如果使用严格认证则不会通过,直接返回false。(对了,返回false时可以打印curl_error($ch)查看具体错误信息。)此时可以根据情况通过降低验证程度来保证正常访问,例如:
[U]复制代码[/U] 代码如下:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)
平时我们使用浏览器访问各个https网站时,有时会遇到证书不受信的提示,其实就是因为这些网站的证书不是正规CA机构颁布的。
市面上各种浏览器中都内置了CA根证书列表信息,访问有CA颁布证书的网站时,会根据根证书验证这些网站的证书,所以就不会有这个提示了。
关于CA根证书文件,其实就是包含了各个主要CA机构的公钥证书,用来验证网站的证书是否是这些机构颁发的。
这里的这个文件是来源于mozilla的源码树,又转换成PEM格式证书文件。(大家可以到这里下载现成的http://curl.haxx.se/ca/cacert.pem)
最后说一个和SSL无关的东西:
[U]复制代码[/U] 代码如下:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
这个主要是为了解决POST时数据过长问题
您可能感兴趣的文章:php抓取https的内容的代码Centos 5下配置https服务器的方法Python使用Socket(Https)Post登录百度的实现代码apache设置自动将http跳转到https的方法解决file_get_contents无法请求https连接的方法android教程使用webview访问https的url处理sslerror示例nodejs实现HTTPS发起POST请求Apache mod_rewrite实现HTTP和HTTPS重定向跳转浅析Android系统中HTTPS通信的实现iOS9苹果将原http协议改成了https协议的方法Http与https对比详细介绍
|
|