美文网首页程序员
yum,curl,nss之间的那点事

yum,curl,nss之间的那点事

作者: 虞大胆的叽叽喳喳 | 来源:发表于2018-07-23 11:10 被阅读750次

    这篇文章是《apt,curl,openssl之间的那点事》姐妹版,说明在 CentOS 下如何使用 yum 包安装方式安装 curl 和 NSS。

    强调一下,在 CentOS 下,curl 默认使用的密码学库是 NSS,如果你对 NSS 不了解,可以查看《初识NSS,一文了解全貌》,通过本文也可以学习 yum 相关知识。

    首先看看 curl 依赖于哪些包,执行如下命令:

    $ rpm -q --requires curl 
    

    输出:

    libcurl = 7.19.7-52.el6
    

    依赖的核心包就是 liubcurl,接下去输入以下命令查看 libcurl 依赖的包:

    $ rpm -q libcurl 
    

    重点输出:

    libnss3.so => /usr/lib64/libnss3.so (0x0000003a78800000)
    libnssutil3.so => /usr/lib64/libnssutil3.so (0x0000003a77400000)
    

    那么这两个包是谁提供的?输入如下命令:

     
    $ rpm -qf /usr/lib64/libnss3.so 
        nss-3.15.1-15.el6.x86_64
    $ rpm -qf  /usr/lib64/libnssutil3.so 
        nss-util-3.15.1-3.el6.x86_64
    

    可见 lbcurl 依赖 nss 包,也依赖 nss-util 包,nss-util 包很熟悉,在《初识NSS,一文了解全貌》一文中也介绍过,是 CentOS 系统 nss 命令行工具。

    输入以下命令也可以看出 nss-tools 也依赖于 nss 包:

    $ rpm -q --requires nss-tools 
        nss(x86-64) = 3.15.1-15.el6
    

    接下去输入以下命令,看看核心的 nss 包包含了什么:

    $ rpm -ql nss
    
        /etc/pki/nssdb
        /etc/pki/nssdb/cert8.db
        /etc/pki/nssdb/key3.db
        /etc/pki/nssdb/secmod.db
        /usr/lib64/libnss3.so
        /usr/lib64/libnssckbi.so
        /usr/lib64/libnsspem.so
        /usr/lib64/libsmime3.so
        /usr/lib64/libssl3.so
        /usr/lib64/nss/libnssckbi.so
    

    我们非常熟悉的 cert8.db 文件也包含在之内,但其实 curl 最终使用的根证书库并不是该文件。那 curl 使用的根证书文件在哪儿呢?

    使用 curl-config 命令行工具,能够了解更多:

    $ curl-config --ca                        
        /etc/pki/tls/certs/ca-bundle.crt
    

    至于 /etc/pki/tls/certs/ca-bundle.crt 库证书文件如何而来,和 Ubuntu 系统中的 curl 一样,后续我会描述。

    如果你没有安装 curl,执行一条命令即可:

    $ yum install curl
    

    接下去查看 curl 版本,可以通过两种方式:

    (1)curl-config

    $ curl-config --version
        libcurl 7.19.7
    

    (2)curl -V

    $ curl -V
    
    curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp 
    Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 
    

    通过输出看出 curl 依赖 libcurl/7.19.7 和 NSS/3.14.0.0。

    最后执行下列命令,查看 curl 是如何和 https 网站交互的:

    $ curl "https://www.simplehttps.com" -v
    

    输出如下:

    * About to connect() to www.simplehttps.com port 443 (#0)
    *   Trying 139.129.23.162... connected
    * Connected to www.simplehttps.com (139.129.23.162) port 443 (#0)
    * Initializing NSS with certpath: sql:/etc/pki/nssdb
    *   CAfile: /etc/pki/tls/certs/ca-bundle.crt
      CApath: none
    

    初始化 certpath 目录是 /etc/pki/nssdb,而校验证书使用的根证书库可以是 CAfile,也可以是 CApath。

    如果你想动态修改 curl 使用的根证书库,可以执行下列命令,关于 curl 在不同系统中使用的根证书库,我后悔会写文章讲解:

    $ curl "https://www.baidu.com" --cacert /etc/pki/tls/certs/ca-bundle.crt
    

    我最近写了一本书《深入浅出HTTPS:从原理到实战》,欢迎去各大电商购买,也欢迎关注我的公众号(yudadanwx,虞大胆的叽叽喳喳),了解我最新的博文和本书。

    公众号二维码

    相关文章

      网友评论

        本文标题:yum,curl,nss之间的那点事

        本文链接:https://www.haomeiwen.com/subject/pgbdmftx.html