• curl 错误总结


    证书域名与访问的域名不一致

    • 问题:curl SSL: certificate subject name 'luffichen_server.tencent.com' does not match target host name '127.0.0.1'
    • 原因:这是因为 curl 访问 https 服务器时,会验证服务器证书的有效性和证书域名与访问域名一致性
    • 解决方法:

    (1) 修改 curl 选项,使其不验证服务器证书

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($process, CURLOPT_SSL_VERIFYPEER, FALSE);
    

    (2) 针对 curl 命令,-k 选项,也可以使其不验证证书
    (3) 保证证书域名与访问的域名一致,因为访问的是一个 IP,在 hosts 文件添加IP域名关系映射,然后使用服务器证书的域名进行访问

    • 参考:
    1. https://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html
    2. https://stackoverflow.com/questions/20842970/fix-curl-51-ssl-error-no-alternative-certificate-subject-name-matches

    CA 证书不存在

    • 问题:curl: (60) SSL certificate : unable to get local issuer certificate
    • 原因:在验证服务器证书时,CA 证书不存在
    • 解决方法:

    因为你指定了要验证服务器证书有效性,那么需要指定 CA 证书或者使用 curl 默认证书(https://curl.haxx.se/docs/caextract.html,haxx.se had a bundle of all sorts of CA certs,但不会有你服务器的自签证书,这个需要自己指定了)

    // 指定 CA 证书路径
    curl_easy_setopt(m_curl_handler, CURLOPT_CAINFO, m_ca_cert_file.c_str());
    
    • 参考:
    1. https://stackoverflow.com/questions/24611640/curl-60-ssl-certificate-unable-to-get-local-issuer-certificate
    2. https://curl.haxx.se/libcurl/c/CURLOPT_CAINFO.html
    3. https://github.com/openssl/openssl/issues/2833
    4. https://my.oschina.net/lemonzone2010/blog/467213(未验证)

    CA 证书不正确

    • 问题: ssl peer certificate or ssh remote key was not ok
    • 原因:在验证服务器证书时,CA 证书不正确,比如使用错了证书

    无法设置私钥

    • 问题:curl: (58) unable to set private key file
    • 原因:错误的原因有很多,当时我的私钥是带密私钥,密码输错了,导致后面的验证失败

    访问 HTTPS 服务器报SSL_ERROR_SYSCALL

    • 问题:curl -k 一个 https 服务器时,发现 curl 连接失败,并返回 curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 127.0.0.1:39000
    • 原因:错误原因可能很多,我这里curl 已经带上 -k 选项,客户端不验服务器证书了,后来发现是因为服务器侧的问题导致的,未设置服务器私钥
    • 解决方法:
    httpd.socket = ssl.wrap_socket (httpd.socket, certfile=CERTFILE,keyfile=KEYFILE, server_side=True)
    # 问题代码: httpd.socket = ssl.wrap_socket (httpd.socket, certfile=CERTFILE, server_side=True)
    

    SSL certificate problem, verify that the CA cert is OK

    CURLOPT_SSL_VERIFYPEER 为 1 时,表示启用了验证访问的服务器合法性,且必须设置 CURLOPT_CAINFOCURLOPT_CAPATH 其中一个,而 CURLOPT_SSL_VERIFYHOST 为 2 时,表示验证 CA 证书中的 common name 是否与访问的服务器域名是否一致。在测试的时候,需要记得为客户端侧机器添加相应的 host 域名 IP 解析,如果直接使用 IP 访问也会报 SSL certificate problem, verify that the CA cert is OK 错误。

    curl: (60) SSL certificate : unable to get local issuer certificate

    问题的原因有很多,这里只列举一二。

    在验证服务器证书时,找不到CA证书,如果正确设置了 cainfo 或 capath 参数且 CA 证书已经是 rootCA,依然出错,那么可能是证书生成的时候出错,再重新生成一个;如果 CA 证书由一个中间证书签发,rootCA 签发中间证书,那么如果服务器没有提供中间证书,在验证过程中,openssl 在形成完整的证书链也会报这个错误,所以 cat intermediate.crt >> domain.crt 将所有中间证书与rootCA证书捆绑在一起。

  • 相关阅读:
    抓老鼠啊
    币值转换
    打印沙漏
    秋季学习总结
    第五周课程总结&试验报告(三)
    第四周课程总结&试验报告2
    实验报告一 &第三周课程总结
    Java第二周总结
    2019春总结作业
    第十六周
  • 原文地址:https://www.cnblogs.com/cposture/p/9029017.html
Copyright © 2020-2023  润新知