自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文解剖Ubuntu,Curl,Openssl更新根證書的細(xì)節(jié)

系統(tǒng) Linux
證書在哪兒?有些同學(xué)說(shuō),這不廢話嗎?肯定由 OpenSSL 或 NSS 提供。實(shí)際上不同平臺(tái)、不同密碼學(xué)庫(kù)、不同的應(yīng)用軟件,使用的 CA 根證書是有一定區(qū)別的。

但有一個(gè)關(guān)鍵主題一直沒(méi)說(shuō),那就是 Curl 請(qǐng)求 HTTPS 網(wǎng)站的時(shí)候,需要使用本地的 CA 根 證書來(lái)校驗(yàn)網(wǎng)站的身份,那根證書由誰(shuí)提供?證書在哪兒?有些同學(xué)說(shuō),這不廢話嗎?肯定由 OpenSSL 或 NSS 提供。實(shí)際上不同平臺(tái)、不同密碼學(xué)庫(kù)、不同的應(yīng)用軟件,使用的 CA 根證書是有一定區(qū)別的。

順藤摸瓜找到 ca-certificates

在 Ubuntu 下,安裝 Curl 包的時(shí)候會(huì)額外安裝一個(gè)包 ca-certificates,這個(gè)包和證書有關(guān),實(shí)際上這個(gè)包由 OpenSSL 安裝的,如下:

  1. $ apt-cache depends openssl  
  2.  
  3. openssl 
  4.   依賴: libc6 
  5.   依賴: libssl1.0.0 
  6.   建議: ca-certificates 
  7.   沖突: openssl:i386 

因?yàn)?Curl 是通過(guò) OpenSSL 實(shí)現(xiàn)客戶端 HTTPS 協(xié)議的,也就是說(shuō)在 Curl/OpenSSL 平臺(tái)下,Curl 使用的根證書庫(kù)都是由 ca-certificates 包處理。

在介紹 ca-certificates 包之前,讓我們了解在 Ubuntu/Curl(包括 openssl s_client 工具)在發(fā)送 HTTPS 請(qǐng)求的時(shí)候,其引用的根證書地址,見(jiàn)下圖:

根證書庫(kù) CAfile: /etc/ssl/certs/ca-certificates.crt,讓我們記住這一個(gè)文件,該文件是由 ca-certificates 包更新的。

深究 ca-certificates

運(yùn)行如下命令了解 ca-certificates 包的詳細(xì)信息:

  1. $ apt-cache show ca-certificates 

This package includes PEM files of CA certificates to allow SSL-based applications to check for the authenticity of SSL connections.

It includes, among others, certificate authorities used by the Debian infrastructure and those shipped with Mozilla’s browsers.

也就是說(shuō)這個(gè)包含了 PEM 格式的 CA 根證書,這些證書可以供基于 SSL 協(xié)議的引用程序使用,所有的 CA 根證書實(shí)際上是由 Mozilla 維護(hù)的。

接下去運(yùn)行下列命令,了解下 ca-certificates 包含的文件:

  1. $ dpkg  -L ca-certificates 

主要包含二種類型的文件:

1:/usr/share/ca-certificates/mozilla/

包含很多具體的 CA 根證書文件,每個(gè) CA 機(jī)構(gòu)的根證書對(duì)應(yīng)一個(gè)文件。

2:/usr/sbin/update-ca-certificates

這是一個(gè)命令行工具,作用是什么?運(yùn)行如下命令了解官方說(shuō)明:

  1. $ man update-ca-certificates 

update-ca-certificates - update /etc/ssl/certs and certificates.crt

直白的說(shuō),運(yùn)行這個(gè)工具,它最終會(huì)更新 /etc/ssl/certs/ca-certificates.crt 文件。這下你應(yīng)該明白了,有了這個(gè)文件,不管是 Curl 還是 openssl 在發(fā)送 HTTPS 請(qǐng)求的時(shí)候,都可以校驗(yàn) HTTPS 網(wǎng)站的真實(shí)身份了。

具體執(zhí)行步驟如下:

  • 讀取 /etc/ca-certificates.conf 文件,包含的內(nèi)容就是所有 /usr/share/ca-certificates/mozilla/ 目錄下的證書文件名。
  • 將 /etc/ca-certificates.conf 文件對(duì)應(yīng)的所有證書合并到 /etc/ssl/certs/ca-certificates.crt 文件中。

如何及時(shí)更新 CA 根證書

ca-certificates 包使用的 CA 根證書來(lái)自于 Mozilla,但對(duì)于一個(gè)發(fā)行版來(lái)說(shuō),升級(jí)和更新包的頻率并不高。

思考一個(gè)情況,Mozilla 新引入了一個(gè) CA,或者不信任一個(gè) CA,也就是說(shuō)對(duì)于 Mozilla 來(lái)說(shuō),其 CA 根證書列表發(fā)生了更新。其他使用 Mozilla CA 根證書的應(yīng)用程序(包括 ca-certificates)可能無(wú)法做到及時(shí)更新,有沒(méi)有辦法及時(shí)更新本地的 CA 根證書呢?

可以使用 mk-ca-bundle.pl 工具,它是 Curl 工程發(fā)布的,Mozilla 將自己所信任的 CA 根證書全部存入 https://hg.mozilla.org/projects/nss/raw-file/default/lib/ckfw/builtins/certdata.txt 文件中(很少有應(yīng)用程序直接使用 NSS cert9.db 文件)。

而 mk-ca-bundle.pl 要做的就是將 certdata.txt 轉(zhuǎn)換為 PEM 格式,然后供 Curl(或者其他應(yīng)用程序)使用。

  1. $ wget https://raw.githubusercontent.com/curl/curl/master/lib/mk-ca-bundle.pl   
  2. $ chmod 0777 mk-ca-bundle.pl 
  3. $ ./mk-ca-bundle.pl 
  4. $cp ca-bundle.crt /etc/ssl/certs/ca-certificates.crt -fr 

運(yùn)行結(jié)束后,/etc/ssl/certs/ca-certificates.crt 就更新了,Curl 就能使用***的根 CA 證書了。

細(xì)心的同學(xué)可能會(huì)發(fā)現(xiàn),mk-ca-bundle.pl 工具沒(méi)有自動(dòng)在 /usr/share/ca-certificates/mozilla/ 目錄下更新證書,自然 update-ca-certificates 工具也不能更新了。

后續(xù)我打算寫一個(gè)工具解決該問(wèn)題:

  • 基于 mk-ca-bundle.pl,將證書同步到 /usr/share/ca-certificates/mozilla/ 目錄。
  • 然后使用 update-ca-certificates 更新***的證書。
責(zé)任編輯:武曉燕 來(lái)源: 虞大膽的嘰嘰喳喳
相關(guān)推薦

2025-01-20 09:15:00

iOS 18.3蘋果iOS 18

2019-09-23 10:51:14

JavaJava虛擬機(jī)Linux

2024-04-10 13:50:41

CentOSUbuntu操作系統(tǒng)

2020-01-17 09:00:00

HashMapJava編程語(yǔ)言

2021-06-08 11:36:07

服務(wù)微服務(wù)框架

2013-10-22 09:59:26

Ubuntu 13.1Unity 8

2020-06-03 08:19:00

Kubernetes

2021-09-09 11:00:15

微軟Windows 10Windows

2019-05-08 15:02:11

Android 10安卓谷歌

2011-09-08 12:05:21

2020-03-31 14:40:24

HashMap源碼Java

2024-04-12 12:19:08

語(yǔ)言模型AI

2020-08-27 07:34:50

Zookeeper數(shù)據(jù)結(jié)構(gòu)

2024-02-01 11:57:31

this指針代碼C++

2021-08-13 05:50:01

ContainerdDockerKubernetes

2023-12-22 19:59:15

2020-10-26 09:18:50

RedisCluste

2022-03-24 08:51:48

Redis互聯(lián)網(wǎng)NoSQL

2021-08-04 16:06:45

DataOps智領(lǐng)云

2021-09-04 19:04:14

配置LogbackJava
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)