非对称加密与证书
SSL/TLS是一個密碼學協議,它的目標并不僅僅是網頁內容的加密傳輸。SSL/TLS的主要目標有四個:加密安全、互操作性、可擴展性和效率。對于安全性的保障,它還會從多個方面進行,包括機密性,真實性以及完整性。機密性是指,傳輸的內容不被除通信的雙方外的第三方獲取;真實性是指,通信的對端正是期待的對端,而不是其它第三方冒充的;完整性則是指,傳輸的數據是完整的,數據沒有被篡改或丟失。為了平衡多種需求,SSL/TLS被設計為一個安全框架,其中可以應用多種不同的安全方案,每種方案都由多個復雜的密碼學過程組成。不同的安全方案,在安全性和效率之間有著不同的取舍,并由不同的密碼學過程組成。
在密碼學上,非對稱加密具有更高的安全性,同時計算復雜度更高,性能更差;而對稱加密,則效率比較高,計算復雜度較低,但如果在通信過程中明文傳輸密鑰,或將密鑰以hard code的形式寫在代碼里,則安全隱患比較大。
從密碼學過程的特性出發,整體來看,SSL/TLS連接是在會話協商階段,通過 非對稱加密 算法,如RSA、ECDHE等,完成身份驗證,及后續用到的對稱加密密鑰的交換;在整個數據傳輸階段,通過對稱加密算法,如AES、3DES等,對傳輸的數據進行加密;通過數據散列算法,如SHA1、SHA256等,計算數據的散列值并隨應用數據一起發送,以保證數據的完整性。
本文主要描述非對稱加密的基本思想,及TLS的證書身份認證。
非對稱加密
非對稱加密 (asymmetric encryption) 又稱為公鑰加密 (public key cryptography),是使用兩個密鑰,而不像對稱加密那樣使用一個密鑰的加密方法;其中一個密鑰是私密的,另一個是公開的。顧名思義,一個密鑰用于非公開的私人的,另一個密鑰將會被所有人共享。
非對稱加密的兩個密鑰之間存在一些特殊的數學關系,使得密鑰具備一些有用的特性。如果利用某人的公鑰加密數據,那么只有他們對應的私鑰能夠解密。從另一方面講,如果某人用私鑰加密數據,任何人都可以利用對應的公鑰解開消息。 后面這種操作不提供機密性,但可以用作數字簽名。
非對稱加密保護數據安全
盜用阮一峰老師的幾幅圖來說明,通過非對稱加密保護數據安全的過程。
- 鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。
- 鮑勃把公鑰送給他的朋友們----帕蒂、道格、蘇珊----每人一把。
- 蘇珊要給鮑勃寫一封不希望別人看到的保密的信。她寫完后用鮑勃的公鑰加密,就可以達到保密的效果。
- 鮑勃收到信后,用私鑰解密,就可以看到信件內容。
對于非對稱加密,只要私鑰不泄露,傳輸的數據就是安全的。即使數據被別人獲取,也無法解密。
非對稱加密的這些特性直擊對稱加密中只用一個密鑰,而該密鑰不方便傳輸、保存的痛點。它大大方便了大規模團體的安全通信,方便了安全通信在互聯網中的應用。
非對稱加密生成數字簽名
數據的加密安全只是數據安全的一個方面,數據的真實性同樣非常重要。經常可以看到這樣的案例,騙子在同學參加四、六級考試的時候,給同學的家長打電話或發短信,聲稱自己是學校的輔導員,并表示同學病重急需用錢,要求家長匯錢,同學家長匯錢給騙子而遭受巨大損失的情況。這就是數據/信息真實性沒有得到足夠驗證而產生的問題。
再比如,一個仿冒的taobao網站,域名與真實的網站非常相似。我們一不小心輸錯了域名,或域名被劫持而訪問了這個仿冒的網站,然后像平常在taobao購物一樣,選擇寶貝,并付款,但最后卻怎么也收不到貨物。
現實世界中,常常會請消息的發送者在消息后面簽上自己的名字,或者印章來證明消息的真實可靠性,如信件中的簽名,合同中的印章等等。類似地,在虛擬的網絡世界中,也會通過數字簽名來確認數據的真實可靠性。數字簽名依賴的主要算法也是非對稱加密,生成數字簽名主要是使用私鑰加密 數據的散列摘要 來簽名。
通過幾幅圖來說明這個過程。
- 鮑勃給蘇珊回信,決定采用"數字簽名"來證明自己的身份,表示自己對信件的內容負責。他寫完后先用散列函數,生成信件的摘要(digest)。
- 然后,鮑勃使用自己的私鑰,對這個摘要加密,生成"數字簽名"(signature)。
- 鮑勃將這個簽名,附在信件下面,一起發給蘇珊。
- 蘇珊收到信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要。
- 蘇珊再對信件本身應用散列函數,將得到的結果,與上一步得到的摘要進行對比。如果兩者一致,則證明這封信確實是鮑勃發出的,信件完整且未被篡改過。
如果鮑勃向蘇珊借了錢,并用上面這樣的過程寫信給蘇珊確認自己收到了錢,那么鮑勃就再也不能抵賴了——信件的末尾可是清清楚楚地簽著鮑勃的大名呢。
如果我們的網絡世界能像上圖的過程那樣,每個人都可以方便地獲得可靠的公鑰,那就太美好了。互聯網上的網站成千上萬,每個人都走到自己要訪問的網站站長的辦公室把網站的公鑰拷走,或者網站站長挨個走到自己的目標用戶家門口,把自己網站的公鑰交給用戶,那可就太麻煩,代價太大了。
公鑰通常都是通過網絡傳輸的。不懷好意的人,會試圖干擾這個傳輸過程,將自己偽造的公鑰發送給用戶,進而破壞后續整個數據傳輸的安全性。如果用戶拿到的是偽造的公鑰,那簽名也就形同虛設。
如道格想欺騙蘇珊,他在鮑勃將公鑰交給蘇珊時攔住鮑勃,表示要替鮑勃轉交。正好鮑勃有老板交待的其它重要事情要完成,于是就把自己的公鑰交給道格請他幫忙轉交。但道格把鮑勃的公鑰丟進垃圾桶,而把自己的公鑰交給了蘇珊。此時,蘇珊實際擁有的是道格的公鑰,但還以為這是鮑勃的。因此,道格就可以冒充鮑勃,用自己的私鑰做成"數字簽名",寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進行解密。
證書
證書正是為了解決公鑰的信任問題而引入。證書體系通過引入可信的第三機構,稱為 證書簽發機構(certificate authority,簡稱CA),為公鑰做認證,來確保公鑰的真實可靠。證書是經過了 CA 私鑰簽名的 證書持有者的公鑰、身份信息及其它相關信息 的文件,用戶通過 CA 的公鑰解密獲取證書中包含的 證書持有者 的公鑰。只要 CA 的私鑰保持機密,通過證書驗證 證書持有者 的身份,及獲取公鑰的過程就可靠。
證書的工作過程
互聯網PKI證書體系的結構如下圖:
證書訂閱人 ,也就是需要提供安全服務的人,向 證書中心 (CA) 的代理—— 登記機構 提交自己的公鑰來申請證書。 登記機構 對 證書訂閱人 的身份進行核實,然后向 證書中心 (CA) 提交 證書訂閱人 的公鑰及身份信息。 證書中心 (CA) 用自己的私鑰,對 證書訂閱人 的公鑰、身份信息和其它一些相關信息進行加密,生成 "數字證書"(Digital Certificate) ,并發送給 登記機構。 登記機構 將證書發送給 證書訂閱人 。 證書訂閱人 將證書部署在Web服務器上。 信賴方,即安全服務的用戶,維護 CA 根證書庫,并在與Web服務器通信時,從服務器獲得證書。 信賴方 用CA根證書驗證接收到的證書的有效性,進而驗證服務器的真實性。
同樣通過幾幅圖來說明這個過程。
- 鮑勃去找證書簽發機構,為公鑰做認證。證書中心用自己的私鑰,對鮑勃的公鑰、身份信息和一些其它相關信息一起加密,生成"數字證書"(Digital Certificate)。
- 鮑勃拿到數字證書以后,就可以放心,以后再也沒人能冒充自己了。再需要發送自己的公鑰給朋友們時,只要把自己事先拿到的 數字證書 發送給朋友就可以了。需要寫信給蘇珊時,照常附上自己的數字簽名即可。
- 蘇珊收到信后,用CA的公鑰解開數字證書,就可以拿到鮑勃真實的公鑰,然后就能證明"數字簽名"是否真的是鮑勃簽的。
證書里有什么
PKI證書是 抽象語法表示一 (Abstract syntax notation one, ASN.1) 表示, 基本編碼規則 (base encoding rules, BER) 的一個子集 唯一編碼規則 (distinguished encoding rules, DER) 編碼的二進制文件。我們通常看到的證書則是DER使用Base64編碼后的ASCII編碼格式,即 PEM (Privacy-enhanced mail) 這種更容易發送、復制和粘貼的編碼格式的純文本文件。
證書里到底都有些什么呢?這里我們通過一個實際的證書來看一下。我們可以通過openssl解碼數字證書,獲得證書的可讀形式:
$ openssl x509 -in chained.pem -text -noout Certificate:Data:Version: 3 (0x2)Serial Number:03:5c:25:82:1d:c2:b2:2f:6f:73:39:48:9c:68:07:1b:48:2dSignature Algorithm: sha256WithRSAEncryptionIssuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3ValidityNot Before: Oct 25 01:12:00 2016 GMTNot After : Jan 23 01:12:00 2017 GMTSubject: CN=www.wolfcstech.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionPublic-Key: (4096 bit)Modulus:00:c3:92:70:78:ff:00:0a:22:c7:14:0b:3d:b3:26:34:cb:37:63:26:1d:d6:42:7b:5c:ab:51:cc:f7:12:57:26:b1:d1:4f:5f:a7:02:5b:3c:f3:e6:e1:ec:7c:66:61:ba:d8:5e:d6:61:60:48:d6:d3:4c:23:9a:50:75:4b:2d:1b:89:7d:7b:55:2f:12:63:b4:ac:c7:b5:d1:44:95:ed:a2:f4:9d:ee:77:3c:2b:06:48:d9:18:21:d1:ee:cf:5c:26:ad:c2:11:28:9c:27:65:11:94:c4:1d:0f:5e:4c:4f:00:71:cf:5d:1f:40:4b:9a:5e:3b:b0:42:45:c5:68:01:62:29:c2:92:b5:ad:8d:13:11:db:7e:02:65:14:6a:5d:4b:66:16:08:d4:ab:90:dc:06:28:27:cd:84:c0:b7:30:22:ff:54:71:c2:3b:8d:7d:8b:52:c3:a8:f1:ee:63:42:2a:dd:4d:a7:70:66:c5:c3:54:d5:8e:a1:e2:02:d0:8b:2f:f6:44:1d:f5:f2:85:fd:49:c7:e0:d7:d0:ae:21:b7:25:ae:7c:15:dc:56:51:45:f1:e7:19:d6:1c:95:2c:65:f7:34:2c:67:1c:93:00:81:a7:e2:23:da:1a:3c:d1:9f:84:5e:01:3f:71:e7:9c:cd:e0:4f:fc:db:a6:2f:33:3a:3d:ce:6d:52:72:47:0b:08:9c:04:1f:4a:cd:cd:71:db:c2:3f:0d:9c:b4:24:ca:25:06:49:2b:40:a7:96:b6:60:b7:8d:c7:b0:b4:84:96:06:63:3b:d9:0c:25:8d:af:ad:90:ce:b8:d5:c6:e6:28:28:bd:4b:72:92:28:1a:0a:b7:15:3c:28:26:15:ab:fc:88:22:74:50:77:cc:3d:a3:c8:be:83:14:3d:ca:0e:79:aa:71:66:56:b8:6f:fe:2a:2d:36:ff:0c:af:b9:61:5c:5b:5f:a4:cc:0a:5b:13:31:c9:16:3f:51:9c:19:56:dd:06:1d:c9:6f:f6:17:61:61:7b:4c:cb:aa:b9:92:52:25:9b:8f:02:2d:51:39:5f:f0:89:e2:e8:25:6f:04:2a:d3:6f:a3:3e:a7:44:a8:a1:db:01:55:ad:1d:3f:72:3a:9a:b7:0f:35:a3:de:d2:93:d7:7c:d6:12:66:b2:f9:da:c4:e3:e6:52:6f:55:07:5c:a2:57:0d:7a:ca:20:5a:59:1b:78:ba:cf:e2:1d:b3:33:0a:53:2e:26:9f:39:2f:ec:48:8b:9f:a0:b9:e8:e6:61:9b:89:34:59:02:07:bb:b4:c4:8d:1d:24:72:ea:1e:7c:5f:a9:a3:96:15:e9:4d:7e:4c:94:eb:cb:af:d2:70:83:78:be:36:ebExponent: 65537 (0x10001)X509v3 extensions:X509v3 Key Usage: criticalDigital Signature, Key EnciphermentX509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client AuthenticationX509v3 Basic Constraints: criticalCA:FALSEX509v3 Subject Key Identifier: B8:27:0E:D4:47:BB:27:66:51:3B:E7:F9:8B:9C:48:2E:3D:FD:C8:97X509v3 Authority Key Identifier: keyid:A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1Authority Information Access: OCSP - URI:http://ocsp.int-x3.letsencrypt.org/CA Issuers - URI:http://cert.int-x3.letsencrypt.org/X509v3 Subject Alternative Name: DNS:wolfcstech.cn, DNS:wolfcstech.com, DNS:www.wolfcstech.cn, DNS:www.wolfcstech.comX509v3 Certificate Policies: Policy: 2.23.140.1.2.1Policy: 1.3.6.1.4.1.44947.1.1.1CPS: http://cps.letsencrypt.orgUser Notice:Explicit Text: This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/Signature Algorithm: sha256WithRSAEncryption46:a1:fb:1c:fe:6e:ef:af:fc:84:e3:7e:20:1d:c8:0c:0b:e4:d2:4b:9e:f6:bc:e5:31:59:08:bb:7e:0d:74:3f:e6:de:39:58:e2:f4:fa:bf:5c:26:86:96:19:8f:00:13:17:2b:4f:95:c4:bd:02:ad:cd:a6:e5:80:21:f5:ee:e6:4d:01:86:07:82:37:5e:39:c9:55:40:ed:08:2e:8d:94:b8:86:2f:15:76:10:bd:97:46:06:b3:34:80:12:f4:dc:2a:2a:63:80:36:fe:ef:e1:9e:b6:dc:22:51:c7:54:46:1a:b2:c5:e8:62:98:90:46:ea:92:8c:fd:d4:dd:00:4f:fb:1e:25:24:93:c1:74:15:07:6f:67:d3:be:5b:47:7e:18:56:02:01:55:09:fc:bf:7f:ff:27:fc:db:d8:53:55:02:43:2e:a0:23:28:01:4d:4d:f9:bc:02:bc:fe:50:c2:67:d7:d4:48:23:c2:0b:25:d4:65:e1:8f:3c:75:12:b6:87:b1:17:86:c8:1a:26:72:0e:ba:07:92:c4:87:3e:e1:fc:e3:58:ef:a2:23:43:09:85:c4:82:00:04:07:49:06:10:bc:fd:20:67:0f:63:f8:ff:bf:7f:6f:da:72:77:51:1d:50:34:07:63:e8:68:e3:ef:70:5f:71:b4:11:9e:27可以看到主要包含證書格式的版本號;證書的唯一的序列號;簽名算法;頒發者的信息;證書的有效期;證書的使用者的信息、身份信息,在這里主要是幾個域名;證書使用者的公鑰等等。
Let's Encrypt證書申請
我們通過一個 Let's Encrypt 證書申請過程對證書做更多了解。 Let's Encrypt 是一個免費、自動化、開放的證書簽發機構,目前它已得到了Mozilla,Chrome等的支持,發展十分迅猛。
證書申請
Let’s Encrypt 使用ACME協議驗證申請人對域名的控制并簽發證書。要獲取Let’s Encrypt 證書,需使用ACME客戶端進行。Let’s Encrypt 官方推薦 使用Certbot這個功能強大,靈活方便的工具,不過也可以使用其它的ACME客戶端。
這里我們通過Certbot申請Let’s Encrypt證書。
Certbot安裝
對于在Ubuntu 14.04平臺上部署nginx提供Web服務的情況,應該使用 certbot-auto 來安裝:
$ wget https://dl.eff.org/certbot-auto $ chmod a+x certbot-autocertbot-auto 接收與 certbot 完全相同的標記;不帶參數執行這個命令時,會自動安裝依賴的所有東西,并更新工具本身。執行如下命令:
$ ./certbot-auto配置Web服務器
Let’s Encrypt 在簽發證書之前,需要先通過ACME驗證申請者對域名的控制權。驗證方法是,ACME客戶端產生一些臨時文件放在指定的位置,并將該文件的相關信息發送給 Let’s Encrypt 。 Let’s Encrypt通過http協議訪問域名下的對應文件,驗證申請者對域名的控制權。因而申請證書前需要先配置Web服務器。
對于nginx服務器而言,可以這樣配置:
server {listen 80;server_name www.wolfcstech.com wolfcstech.com;server_tokens off;access_log /dev/null;if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 444;}location ^~ /.well-known/ {alias /home/www-data/www/challenges/;try_files $uri =404;}location / {root /home/www-data/www/hanpfei-documents/public;index index.html;}}申請證書
Certbot 功能非常強大,它支持許多的插件,為許多平臺上的Web服務器自動地申請、安裝及部署證書。對于nginx,目前還不支持證書的自動安裝和部署,這里使用 certonly 命令單獨地獲取證書。
執行如下命令:
# ../certbot-auto certonly --rsa-key-size 4096 --webroot -w /home/www-data/www/chanllenges/ -d www.wolfcstech.com -d wolfcstech.com主要的參數說明:
- --rsa-key-size:指定RSA密鑰,即非對稱加密私鑰的強度,這里指定為4096位。這個參數用于生成RSA的私鑰。
- --webroot:webroot是一個插件,可以與網站的根目錄路徑一起工作。
- -w:用于指定網站根目錄路徑。ACME客戶端產生的臨時文件都將放在這個參數指定的目錄下。這個參數的值要與配置的Web服務器的網站根目錄路徑匹配。
- -d:用于指定要認證的域名。可以用一個證書為多個域名簽名。
Certbot 自動地完成證書的申請過程。
Request Certificate
證書申請成功之后可以看到如下的提示:
Request Certificate Successfully
更多關于使用 Certbot 申請 Let’s Encrypt 證書的信息,可以參考 Certbot 官網。
從上面的圖可以看到證書申請的大體過程:
Certificate Request Flow
申請得到的證書及相關文件被放在/etc/letsencrypt/目錄下:
# find /etc/letsencrypt/ /etc/letsencrypt/ /etc/letsencrypt/accounts /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/c784b1e1bc605f9cffba9f0888f3e248 /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/c784b1e1bc605f9cffba9f0888f3e248/regr.json /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/c784b1e1bc605f9cffba9f0888f3e248/meta.json /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/c784b1e1bc605f9cffba9f0888f3e248/private_key.json /etc/letsencrypt/archive /etc/letsencrypt/archive/www.wolfcstech.com /etc/letsencrypt/archive/www.wolfcstech.com/cert.pem /etc/letsencrypt/archive/www.wolfcstech.com/chain.pem /etc/letsencrypt/archive/www.wolfcstech.com/fullchain.pem /etc/letsencrypt/archive/www.wolfcstech.com/privkey.pem /etc/letsencrypt/csr /etc/letsencrypt/csr/0000_csr-certbot.pem /etc/letsencrypt/keys /etc/letsencrypt/keys/0001_key-certbot.pem /etc/letsencrypt/live /etc/letsencrypt/live/www.wolfcstech.com /etc/letsencrypt/live/www.wolfcstech.com/cert.pem /etc/letsencrypt/live/www.wolfcstech.com/chain.pem /etc/letsencrypt/live/www.wolfcstech.com/privkey.pem /etc/letsencrypt/live/www.wolfcstech.com/fullchain.pem /etc/letsencrypt/options-ssl-apache.conf /etc/letsencrypt/renewal /etc/letsencrypt/renewal/www.wolfcstech.com.conf- /etc/letsencrypt/archive/[域名]下保存與特定域名相關的文件,包括網站證書、中間證書鏈、完整證書鏈和私鑰。如果多次為相同的域名申請證書,這個目錄下將有多份證書相關文件,文件名后加數字以區分。
- /etc/letsencrypt/csr下是申請證書的證書簽名請求(CSR)文件。如果多次申請了證書,這個目錄下會保存所有申請的文件。
- /etc/letsencrypt/live/[域名]下是最近一次為特定域名申請證書的相關文件,同樣是網站證書、中間證書鏈、完整證書鏈和私鑰。
- /etc/letsencrypt/renewal/[域名].conf文件則保存證書申請的配置信息,以方便下次以相同配置為同樣的域名更新證書。
可以看一下證書申請的配置文件內容來對證書申請過程做更多的了解:
# cat /etc/letsencrypt/renewal/www.wolfcstech.com.conf # renew_before_expiry = 30 days version = 0.9.3 cert = /etc/letsencrypt/live/www.wolfcstech.com/cert.pem privkey = /etc/letsencrypt/live/www.wolfcstech.com/privkey.pem chain = /etc/letsencrypt/live/www.wolfcstech.com/chain.pem fullchain = /etc/letsencrypt/live/www.wolfcstech.com/fullchain.pem# Options used in the renewal process [renewalparams] authenticator = webroot installer = None account = c784b1e1bc605f9cffba9f0888f3e248 webroot_path = /home/www-data/www/chanllenges, rsa_key_size = 4096 [[webroot_map]] www.wolfcstech.com = /home/www-data/www/chanllenges wolfcstech.com = /home/www-data/www/chanllengesCSR文件的內容
證書主要是為網站的公鑰簽名的,但前面申請證書的過程卻并沒有看到網站公鑰的生成。這是因為公鑰是在產生CSR文件的過程中自動生成并保存在CSR文件中的。
使用openssl解析前面我們申請Let’s Encrypt 證書時產生的CSR文件:
# openssl req -in /etc/letsencrypt/csr/0000_csr-certbot.pem -noout -text Certificate Request:Data:Version: 2 (0x2)Subject: CN=www.wolfcstech.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionPublic-Key: (4096 bit)Modulus:00:b3:0d:f5:cb:a3:9b:94:fb:7e:83:15:72:65:db:3c:56:1d:25:26:b5:5e:88:28:98:0f:c5:d7:df:78:ee:8a:c3:aa:06:5c:0c:81:4d:4f:e6:d9:dd:ed:5d:f2:47:2a:a0:d4:94:a2:18:3c:10:3a:73:0a:aa:24:72:b3:5a:24:70:aa:ff:90:1c:5a:60:cd:f4:de:d6:16:c2:e2:9f:df:d0:b1:ff:28:2d:2d:04:5d:7f:df:aa:9a:11:99:d2:98:82:c1:16:9e:db:c6:d6:99:4f:b8:b6:74:f8:15:47:41:d3:06:cf:10:59:77:f0:f6:71:7d:73:c5:03:6f:d6:3a:fa:a8:bf:d3:c5:44:27:5f:99:91:7f:83:74:b4:94:ee:be:19:da:2d:86:94:1d:7e:7f:e9:5d:a2:15:1e:4d:09:13:4f:06:65:17:95:82:66:5b:39:cb:76:42:87:db:2a:e2:a4:89:88:16:64:d8:af:6a:80:f7:21:50:08:a4:2b:0f:78:36:b3:50:3c:ec:eb:b0:27:5f:d1:89:ee:08:39:d8:71:75:d0:0c:70:6c:c5:94:96:bf:45:cd:4d:8c:66:0d:07:48:78:d5:94:e4:a4:4d:73:1c:7e:60:31:ae:5c:72:4a:e4:11:9b:06:8b:2d:1c:69:54:f0:73:70:d8:17:1c:2c:f9:24:20:e1:33:e0:dd:ec:a6:3c:53:0e:1f:d7:83:24:cd:33:f9:94:e9:e6:3e:8e:76:e7:77:3c:57:78:08:d4:ab:70:35:f6:a0:13:b5:ba:02:bc:88:a9:9c:d5:47:62:99:f1:a4:08:a7:a3:22:79:73:c4:77:2a:49:58:f2:ec:d1:87:13:ed:76:62:23:09:1f:bf:22:e4:80:21:49:a1:43:7e:a6:76:67:30:32:c3:9e:40:8e:a1:8c:d6:09:31:be:d9:7b:b3:73:8a:a9:75:cf:66:2f:1e:a0:e3:01:5b:41:30:fd:68:ae:88:cd:75:fa:72:32:d7:92:fc:a8:5c:eb:2b:82:c8:06:e5:53:08:8d:14:92:ab:d9:81:96:45:16:43:5a:52:12:ba:3c:51:55:c8:90:24:41:95:f7:bd:a0:d1:7d:62:2a:56:30:a6:8e:5e:7c:8b:69:b3:ab:d3:24:c7:35:89:eb:df:4d:c6:a8:0c:74:1d:d9:2b:30:67:2b:ac:3f:a8:1a:c2:76:23:92:1d:00:96:1c:95:aa:da:a6:51:61:30:b2:d0:42:a2:81:51:04:4c:5f:78:e9:3c:6b:e6:1d:22:b2:80:3d:96:6c:2d:43:fd:ed:82:9f:5f:59:f0:f3:44:a8:82:3f:5b:63:e1:4d:cb:84:ce:ddExponent: 65537 (0x10001)Attributes:Requested Extensions:X509v3 Subject Alternative Name: DNS:www.wolfcstech.com, DNS:wolfcstech.comSignature Algorithm: sha256WithRSAEncryptiona5:e8:87:4a:fa:db:fe:b5:10:d5:39:c2:a5:88:79:9a:25:d9:f2:3b:e2:ea:46:0d:18:28:b2:0d:87:df:85:9d:0e:4a:82:bd:30:1c:74:6d:4c:43:46:33:82:b4:53:3b:a7:22:a5:29:04:92:05:50:f9:9b:c7:33:d6:41:0d:5b:9a:bd:d5:d7:98:cc:5c:45:13:46:8f:56:29:c7:ba:72:81:71:23:85:33:cb:68:d2:e7:b8:08:9f:40:7e:9f:51:62:a9:50:6a:ab:63:de:f5:d5:30:ee:c4:6b:40:4a:37:85:fb:51:15:a2:e4:de:58:cf:65:8c:c6:52:23:2c:1c:6e:b0:32:bb:20:b8:a5:50:6c:0f:69:32:b2:58:e8:cd:d9:11:47:eb:09:f2:d1:31:0c:0c:0a:6b:d9:64:ed:b7:8a:49:e0:28:18:dd:3d:94:88:85:4d:bc:be:0b:96:bb:f9:f2:b4:83:45:54:78:d2:12:a8:b9:28:f7:42:88:ab:31:74:0b:ea:7d:c9:8f:0c:a1:ad:5d:28:b9:6f:da:02:6f:c6:ba:d7:77:22:bb:e4:20:74:c6:75:85:63:1b:da:b8:59:50:1c:76:75:cc:c4:93:28:cb:e4:c4:4b:dc:40:e6:b7:f5:dc:fd:5c:32:cf:8e:f5:03:9a:0b:67:99:48:d2:88:ba:e4:97:fd:8e:17:ae:8f:fb:80:5b:32:4c:d4:63:65:37:32:c7:4f:7f:9f:86:67:3e:20:fe:94:d1:b3:82:7d:72:db:00:91:40:1a:9a:9b:82:38:9b:44:90:3e:36:4d:fa:40:53:fc:18:4d:e1:78:21:b7:31:0e:62:9a:52:55:be:24:96:07:2b:53:77:1f:5e:10:62:79:85:57:bc:4c:b7:f5:9b:47:d3:00:72:dd:19:22:81:04:d6:77:26:47:2c:56:63:1d:e8:51:ec:61:2e:ff:a4:c5:ea:1c:6d:c3:42:bc:bc:38:b8:6d:8d:c9:cc:a5:67:35:26:dc:09:a7:c9:e7:0f:ee:82:7b:ac:59:4a:b8:ee:75:2b:47:78:51:f4:b9:27:64:a0:af:18:3d:2a:d8:e7:34:b7:0d:5e:c1:49:77:25:33:50:80:f8:8d:45:59:fd:18:c2:f4:10:f0:7d:81:28:d0:16:c5:a5:3e:0b:53:78:99:19:10:50:95:e6:41:4b:49:d6:61:b3:82:48:03:e9:ba:a1:aa:cc:73:f0:08:83:44:88:cf:fc:64:03:5e:96:9d:2d:a3:fc:96:50:c9:73:3f:3f:5b:92:46:d3:ec:2d:df:d1:a8:9d:87:be:fc:17:22:e2:21:1b:2a:14:6a:e3:26:e5:7b可以看到CSR文件包含了加密算法的信息(RSA),公鑰,公鑰的大小(4096位),簽名算法 (sha256WithRSAEncryption),域名等信息。
上面的CSR文件實際通過類似下面的命令生成:
$ openssl req -new -sha256 -key /etc/letsencrypt/live/www.wolfcstech.com/privkey.pem -out /etc/letsencrypt/csr/0000_csr-certbot.pem也可以借助于openssl,通過私鑰單獨生成公鑰:
# openssl rsa -in /etc/letsencrypt/live/www.wolfcstech.com/privkey.pem -pubout -out rsa_public_key.pem證書的選擇
證書體系的安全性非常依賴CA的私鑰的強度,以及CA的私鑰的保密性。如果有財大氣粗者,建造了計算能力超強的計算機,計算出了CA的私鑰;或者CA的安全系統遭受了攻擊,結果私鑰被盜;又或者CA內部有圖謀不軌者盜走了CA的私鑰,則拿到私鑰的人就可以隨意為各網站的仿冒者簽發可以通過安全驗證的證書了。
不同CA在維護安全方面的實力的差異而造成了不同證書間安全性的差異。提供安全服務的人,可以根據自己對安全性的需求,選擇適當的證書。購買收費的證書似乎主要是投資給CA,以促使其加強自身安全體系的建設,防止私鑰出現安全性問題。
當前市場占有率排名前10的CA大概占有90%以上的市場份額。商業的CA主要有如下的這些:
Network solutions
Entrust SSL Certificates
Symantec SSL Certificates
Digicert – SSL Digital Certificate Authority
Thawte
Rapid SSL – SSL Certificate
Comodo – SSL Certificate Authority
StartCom
GlobalSign
GoDaddy SSL Certificates
此外,還有一些非營利性質的CA,主要有如下這些:
Let's Encrypt
CAcert
參考文檔:
HTTPS權威指南
What is a CSR (Certificate Signing Request)?
Certificate Decoder
The Most Common OpenSSL Commands
What is a Digital Signature?
Description of Symmetric and Asymmetric Encryption
Certificate signing request
Certificate authority
How to choose the right Certificate Authority for your Web site
10 World Popular Cheap SSL Certificate Providers
10 best SSL certificate providers
HTTPS 升級指南
Let's Encrypt,免費好用的 HTTPS 證書
數字簽名是什么?
openssl 生成rsa私鑰、公鑰和證書
數字簽名、數字證書、對稱加密算法、非對稱加密算法、單向加密(散列算法)
總結
- 上一篇: OkHttp3的连接池及连接建立过程分析
- 下一篇: HTTP/2 流量调试