186

yum, curl, nss 之间的那点事

 5 years ago
source link: https://mp.weixin.qq.com/s?srcid=0722Mk0pxqnAfd0u3ak0WQg0&%3Bscene=23&%3Bmid=2455770021&%3Bsn=d0f01d0bbd34a82c24fc3f6a0ef53d7c&%3Bidx=1&%3B__biz=MzAwOTU4NzM5Ng%3D%3D&%3Bchksm=8cc9ec0ebbbe65181296e04
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

扫描关注公众号(yudadanwx,虞大胆的叽叽喳喳),了解我的最新文章。

vUbUr2q.jpg!web

这篇文章是 《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

本篇文章和《apt,curl,openssl之间的那点事》讲解了:

  • 学习使用 apt、yum 安装工具。

  • 了解 Ubuntu、CentOS 使用的密码库。

  • 了解 curl 在 Ubuntu、CentOS 依赖的包。

  • 了解 curl 是如何安装和测试的。

你也可以了解以下一些 HTTPS 文章:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK