這是近期關(guān)于 Curl、NSS 最后一篇文章盹廷,客觀的說征绸,國內(nèi)對于這方面(尤其是 NSS)的知識介紹的非常少,很多人可能會使用 Curl俄占,但并不知道它是如何支持 HTTPS 協(xié)議的歹垫,一旦遇到 Curl 不能請求 HTTPS 網(wǎng)站的時(shí)候,就抓蝦了颠放。網(wǎng)絡(luò)上也充斥著各種不嚴(yán)謹(jǐn)?shù)奈恼屡挪遥寣@方面感興趣的技術(shù)人員望而卻步,如果你耐心看完我最近寫的一系列文章碰凶,相信必然會所收獲暮芭。
前面幾篇文章都使用 Linxu 發(fā)行版的包安裝方式介紹 Curl鹿驼、OpenSSL、NSS辕宏,包安裝方式的好處就在于安裝方便畜晰,但也屏蔽了很多技術(shù)細(xì)節(jié),一旦在使用中遇到問題瑞筐,可能就不知道如何解決了凄鼻。
這篇文章很簡單,就是源代碼安裝 Curl聚假,讓其支持 NSS 密碼學(xué)庫块蚌,從而進(jìn)一步加深對 NSS 的理解。
為了讓 Curl 編譯支持 NSS膘格,有以下幾個關(guān)鍵點(diǎn):
- 下載峭范、配置、編譯瘪贱、安裝 Curl纱控。
- Curl 的 HTTPS 功能支持依賴于 NSS,所以也需要源代碼安裝 NSS菜秦。
如果你不知道如何編譯安裝 NSS甜害,那么必須查看這篇文章《初識NSS,一文了解全貌》球昨,現(xiàn)在假設(shè)編譯后的 NSS 保存在 /root/nssproject/ 目錄下唾那。
接下去跟隨我一步步編譯把。
1:下載 Curl 源代碼褪尝。
下載 curl-7.61.0.tar.gz:
$ wget "https://curl.haxx.se/download/curl-7.57.0.tar.gz"
$ tar xvf curl-7.57.0.tar.gz
$ cd curl-7.57.0
$ ./configure -h
2:配置
運(yùn)行下列命令:
$ export LD_LIBRARY_PATH='/root/nssproject/dist/Linux3.13_x86_64_cc_glibc_PTH_64_OPT.OBJ/lib'
$ ./configure --prefix=/opt/curlnss --with-nss=/root/nssproject/dist/Linux3.13_x86_64_cc_glibc_PTH_64_OPT.OBJ/ --without-ssl
其中 --without-ssl 表示禁止安裝 OpenSSL闹获;--prefix 表示將 Curl 安裝到特定的目錄;--with-nss 表示 NSS 安裝目錄河哑。
切記:
- LD_LIBRARY_PATH 變量一定要設(shè)置避诽,否則編譯的時(shí)候不會找到 NSS。
- 命令行最后一行輸出如果出現(xiàn) HTTPS IMAP IMAPS璃谨,說明配置成功了沙庐。
3:編譯
然后運(yùn)行下列命令編譯:
$ make
出現(xiàn)以下錯誤:
curl_ntlm_core.c:101:23: fatal error: pk11pub.h: No such file or directory
# include <pk11pub.h>
^
compilation terminated.
提示不能找到一個頭文件,可以打開 lib/Makefile 文件佳吞,然后找到 CPPFLAGS 變量拱雏,如下:
CPPFLAGS = -I/root/nssproject/dist/Linux3.13_x86_64_cc_glibc_PTH_64_OPT.OBJ//include -I/usr/local/include
將其修改為:
CPPFLAGS = -I/root/nssproject/dist/Linux3.13_x86_64_cc_glibc_PTH_64_OPT.OBJ//include -I/usr/local/include -I/root/nssproject/dist/public/nss
4:安裝
編譯成功后,運(yùn)行如下命令安裝:
$ make install
5:測試
安裝完成后底扳,測試是否成功:
$ /opt/curlnss/bin/curl -V
curl 7.57.0 (x86_64-pc-linux-gnu) libcurl/7.57.0 NSS/3.38 Beta zlib/1.2.8 nghttp2/1.31.0-DEV
Release-Date: 2017-11-29
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy
需要注意的是 curl 使用的根證書铸抑,運(yùn)行 curl-config 工具(源代碼編譯生成的):
$ opt/curlnss/bin/curl-config --ca
/etc/ssl/certs/ca-certificates.crt
那么 ca-certificates.crt 這個文件是誰生成的?源代碼編譯并不包含這文件衷模,如果你看了我的系列文章鹊汛,那么就很容易理解了蒲赂,可以使用 ca-certificates 包安裝 CA 根證書,也可以手動下載 Mozilla 的 CA 根證書刁憋。
相關(guān)系列文章:
- 初識NSS滥嘴,一文了解全貌
- apt,curl至耻,openssl之間的那點(diǎn)事
- yum若皱,curl,nss之間的那點(diǎn)事
- 一文解剖ubuntu尘颓,curl走触,openssl更新根證書的細(xì)節(jié)
- 一文解剖centos,curl泥耀,nss更新根證書的細(xì)節(jié)
關(guān)注我的公眾號(yudadanwx饺汹,虞大膽的嘰嘰喳喳)蛔添,了解我最新的博文痰催。