这篇文章是《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,虞大胆的叽叽喳喳),了解我最新的博文和本书。
网友评论