zoukankan      html  css  js  c++  java
  • 访问方式由http改为https curl:(51)

    系统访问由http变为https,先申请了CA证书,然后win下浏览器访问时没问题的,但是linux下通过curl的方式访问就报错:

    curl:(51) SSLcertificate subject name '*.xxxxxx.com does not match target host name '10.10.xxx.xxx'。

    意思是SSL证书使用者名称与目标主机名不匹配。

    百度良久,基本修改方式有两种,

    方法一:设定为不验证证书和host ,是一段php的代码,如下写法:

    $url = 'https://www.jb51.net';

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL, $url);

    curl_setopt($curl, CURLOPT_HEADER, 1);

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);// https请求 不验证hosts

    $data = curl_exec($curl); curl_close($curl); var_dump($data);  

    方法二:设定一个正确的证书,如下写法:

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($curl, CURLOPT_TIMEOUT, 500); // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。 // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);

    curl_setopt($curl,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem');//这是根据http://curl.haxx.se/ca/cacert.pem 下载的证书,添加这句话之后就运行正常了

    curl_setopt($curl, CURLOPT_URL, $url);

    $res = curl_exec($curl);

    curl_close($curl);

    return $res;

    但是我们的这个是自己openssl自建CA签发的证书,因此还有另一种方式,将证书放在linux下,访问的时候加上此证书,验证就能通过了。

    我们最初生生成的证书格式为pfx,若服务端要求客户端认证,需要将pfx证书转换成pem格式。

    openssl pkcs12 -clcerts -nokeys -in cert.pfx -out client.pem    #客户端个人证书的公钥  

    openssl pkcs12 -nocerts -nodes -in cert.pfx -out key.pem #客户端个人证书的私钥

    也可以转换为公钥与私钥合二为一的文件

    openssl pkcs12 -in  cert.pfx -out all.pem -nodes                                   #客户端公钥与私钥,一起存在all.pem中

    转换完成之后,将pem格式的证书放在/etc/pki/tls/certs下。

    访问时的方式为: curl -k --cert www.pem https://xxxxxxxxxxx

    使用-k是不对服务器的证书进行检查,这样就不必关心服务器证书的导出问题了。

  • 相关阅读:
    Flask基础
    Scrapy框架(持久化,去重,深度控制,cookie)
    scrapy框架 简易整理
    BeautifulSoup 模块
    requests模块
    复习第三天
    在Django中使用原生Sql
    ajax跨域简单请求和复杂请求
    复习第二天
    IOS
  • 原文地址:https://www.cnblogs.com/qiujiababy/p/9895120.html
Copyright © 2011-2022 走看看