美文网首页程序员
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