網上關于數字證書的資料已經非常多了,本篇只做記錄。方便以后復習
CA又稱為證書頒發機構,主要用于頒發數字證書,用一個無法篡改的數字證書來表明身份,防止數據在通訊過程中被篡改和窺探,數字證書通常分為以下幾種:
- 個人身份證書。
- 企業或機構身份證書。
- 支付網關證書。
- 服務器證書。
- 企業或機構代碼簽名證書。
- 安全電子郵件證書。
- 個人代碼簽名證書。
數字證書的生成
@startuml
actor 申請者
actor CA
申請者 -> CA : 發送自己的各種身份信息,營業執照,域名,到期時間
CA -> CA : 生成一對公鑰私鑰給申請者。
note right:審核申請者信息
CA -> CA : 生成證書
note right
證書包含CA的簽發人、地址、簽發時間、過期失效時間等信息,
以及申請者的基本信息DNS、域名、公鑰等基本信息整合到一起
end note
CA -> CA : 生成摘要
CA -> CA : 簽名證書
note right
把信息摘要附加到生成的證書之中。
end note
CA -> 申請者 : 證書頒發
@enduml
數字證書的驗證
@startuml
actor 客戶端
actor 服務器
客戶端 -> 服務器 : 發起請求
服務器 -> 客戶端 : 數字證書
客戶端 -> 客戶端 : 解析證書
note left
獲取到元數據和被私鑰加密過的摘要密文
end note
客戶端 -> 客戶端 : 用CA公鑰解密,獲取摘要
note left
CA的公鑰是公開的,任何人都可以獲取(會內置在操作系統里面,
或者在CA的官方網站中可以獲取),解密后拿到摘要的原文。
end note
客戶端 -> 客戶端 : 對比摘要,查看信息是否被篡改。
note left
對元數據再次執行摘要算法,拿到摘要信息,然后和第三步的結果進行對比,
只有當結果一致的時候,才認為證書是有效的。
end note
@enduml
問題來了,那誰來保證CA 證書的有效性?
證書鏈
通常在一個證書鏈中包含以下三種結構:
- end-user。終端用戶,也就是https中真正用來加密通信的證書。
- intermediates。給end-user簽發證書的CA的證書,主要用來校驗end-user的證書是否合法的證書。
- root。root也是CA證書,區別在于,root證書是給intermediates簽發證書的,用來校驗intermediates的合法性。
在safari 打開github的官網,點擊小?? 。可以看到上面提到的三種類型的證書。
Screenshot_12_7_2017__10_25_PM.png
證書鏈的簽發
- 首先,root自己先生成一對公鑰和私鑰,然后用自己的私鑰給自己自簽名,因為root的絕對信任。
- 二級CA向root申請證書,root按照上面提到的數字證書的生成方式,先給CA生成一對公鑰和私鑰,然后
- 把CA的各種信息算出摘要,再用自己的私鑰加密,加上給二級CA生成的公鑰,就組成了一張CA的證書。
*然后有用戶向二級CA申請證書時,按照這個步驟一步步簽發,就形成了證書鏈。
證書一級一級簽發,中間無法偽造,因為root證書的絕對安全,保證了整個證書鏈的安全。 - 證書鏈是有長度限制的,root頒發證書的時候會添加此字段,所以證書申請者無法再為別人簽發證書。
一般來說,root CAs不會直接頒布end-user certificates的,而是授權給多個二級CA,而二級CA又可以授權給多個三級CA,這些中間的CA就是intermediates CAs,它們才會頒布end-user certificates。如果某個intermediates的私鑰被竊取了,那么用root的私鑰再簽發一個intermediates證書即可,不會威脅到整個root證書下所有人的安全。
那么最終的root 證書的安全性就是最重要的!一般來說,root證書都會被隔離,被保護起來的。如果這也泄漏了,那就沒辦法了。
root 證書的獲取
- 首先,成為一個CA的一個前提是你要向微軟等操作系統廠商申請加入他們的白名單,就是把自己的root證書內置在操作系統里面,隨著系統的安裝和升級的過程就已經被安裝到操作系統里面。
- 瀏覽器等終端在驗證的時候,就直接調用操作系統的接口,獲取證書,用來驗證,例如chrome和ie。
*有些瀏覽器類似firefox有一套自己的證書系統,是隨著安裝firefox的時候,安裝到本地,這樣,即使操作系統的證書被篡改了,firefox依然有能力驗證證書的有效性。
root證書并不會很多,目前主流的基本就只有:Symantec(VeriSign/GeoTrust)、Comodo、GoDaddy。
現在才知道,整個互聯網都建立在對CA信任的基礎上,如果CA機構不再可信。那么。。。。
Screen Shot 2017-07-12 at 10.40.08 PM.png
使用openssl 查看證書
? ~ openssl s_client -connect www.baidu.com:443
CONNECTED(00000003)
depth=2 /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
verify error:num=20:unable to get local issuer certificate
verify return:0
/*
其中0、1、2是證書鏈中每一級證書的序號。0是要被驗證的網站所用的證書。其CN應該對應網站域名。
每一個序號后面,s開頭的一行是指證書,i開頭的一行是指此證書由誰簽發。
*/
---
Certificate chain
0 s:/C=CN/ST=beijing/L=beijing/O=BeiJing Baidu Netcom Science Technology Co., Ltd/OU=service operation department./CN=baidu.com
i:/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 Secure Server CA - G4
1 s:/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 Secure Server CA - G4
i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
2 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHOjCCBiKgAwIBAgIPAaAMWZKgoUJvdRQzvVy/MA0GCSqGSIb3DQEBCwUAMH4x
CzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0G
A1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMg
Q2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQwHhcNMTYwODE1MDAwMDAwWhcN
MTcwODE2MjM1OTU5WjCBqDELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB2JlaWppbmcx
EDAOBgNVBAcMB2JlaWppbmcxOTA3BgNVBAoMMEJlaUppbmcgQmFpZHUgTmV0Y29t
IFNjaWVuY2UgVGVjaG5vbG9neSBDby4sIEx0ZDEmMCQGA1UECwwdc2VydmljZSBv
cGVyYXRpb24gZGVwYXJ0bWVudC4xEjAQBgNVBAMMCWJhaWR1LmNvbTCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMsV6Ty0lfOjGN04Pmd8m0OuU0aWrFnm
KqsvkcxEtFfT9lgyhrZe3Tbyq7xjMsNluuJFeRlvxgszGgS/LNxfpkaY6sg67R/t
vaxB8LmuIJn9e7RI3dZUoyZDTBFWTovVsdoOlnF00YRRKN9tbKo1rK4rzux+gqRt
f4Hsk+mjTBhPkY0J/4qocUGeGYxPjHlPIJABBN5UttUv3Be10fhUzP1OHHyj+iYq
K/PsMIo+PoZclb0ox1K4Vvg3czjy8BAF76sw+mqr/w/v16WemjFADyIqoUXuBQyh
p3h4FmgmiXSRJeJ8ik9tzzjdIb0KhrRbdjQJyA4pDujYKk2g+4Ht2R0CAwEAAaOC
A4gwggOEMIIBMwYDVR0RBIIBKjCCASaCCyouYmFpZHUuY29tgg4qLmJhaWZ1YmFv
LmNvbYIOKi5iZHN0YXRpYy5jb22CDCouaGFvMTIzLmNvbYILKi5udW9taS5jb22C
DyouYmNlLmJhaWR1LmNvbYIQKi5leXVuLmJhaWR1LmNvbYIPKi5tYXAuYmFpZHUu
Y29tggliYWlkdS5jb22CDGJhaWZ1YmFvLmNvbYIMd3d3LmJhaWR1LmNughB3d3cu
YmFpZHUuY29tLmNughJjbGljay5obS5iYWlkdS5jb22CEGxvZy5obS5iYWlkdS5j
b22CEGNtLnBvcy5iYWlkdS5jb22CEHduLnBvcy5iYWlkdS5jb22CFHVwZGF0ZS5w
YW4uYmFpZHUuY29tgg9tY3QueS5udW9taS5jb20wCQYDVR0TBAIwADAOBgNVHQ8B
Af8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMGEGA1UdIARa
MFgwVgYGZ4EMAQICMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20v
Y3BzMCUGCCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMB8GA1Ud
IwQYMBaAFF9gz2GQVd+EQxSKYCqy9Xr0QxjvMCsGA1UdHwQkMCIwIKAeoByGGmh0
dHA6Ly9zcy5zeW1jYi5jb20vc3MuY3JsMFcGCCsGAQUFBwEBBEswSTAfBggrBgEF
BQcwAYYTaHR0cDovL3NzLnN5bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL3Nz
LnN5bWNiLmNvbS9zcy5jcnQwggEFBgorBgEEAdZ5AgQCBIH2BIHzAPEAdwDd6x0r
eg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAVaQfkc6AAAEAwBIMEYCIQCT
LTzo3DYr1v3qgw30B/37GzgST+iXqZtWj1FjVrawzQIhAMxUeruo6bLLmlqsE4hW
YcDOu8hivJK4TefT1NDhb07DAHYApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fN
DsgN3BAAAAFWkH5HWgAABAMARzBFAiAfRCG9WGKLQhLcPg5Dv+8MqUslHec5awM8
ahTB4Y0ddwIhAIzuy0JBUsTmk+Eg5ArobPqgXYFc1llXRceY4uTZiASZMA0GCSqG
SIb3DQEBCwUAA4IBAQBBLDatqFCdrwIrDoenQ7eCPpp1H0G9BvHI+5JAXQiI6Und
iSkaq7A9WvgAsVGNw1wGZIjysBQaf2VhJpbSFZwz9D9t3pmTAApVSY0uUvqiFg7X
NqDoqu3iyBBNw5hGzP/AzU2RoT1Sd7bf57xBEW5W1nxogMSE1ACNf/8WZwixZk5t
5RcW6zvGQiJ8+3OA+NA8tyUcGj1mhDBb7Z4yjbn8cily5DA34nXpiYXnHGic5TLn
QkaFIbZ9z7GqroE8oLrTUhOy+ZFNsrwanNO+gqf6c59V+1hQzRvkKN24JzdWjwHx
jsl/tY61DHvNFsmc683ggLjI+ZWMya1UcDmxADhN
-----END CERTIFICATE-----
subject=/C=CN/ST=beijing/L=beijing/O=BeiJing Baidu Netcom Science Technology Co., Ltd/OU=service operation department./CN=baidu.com
issuer=/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 Secure Server CA - G4
---
No client certificate CA names sent
---
SSL handshake has read 4605 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES128-SHA
Session-ID: 3FD71082386636BAE52F881DC52AD33949DC262AB285FCCDA1B31054F52C19A2
Session-ID-ctx:
Master-Key: 4C08A4E6C3A1B2238014B82F855219D46B320075D3E7B2B64F2FD7B9220D646F7141FFB3621DB9CA0D930E0C2464197B
Key-Arg : None
Start Time: 1499916305
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
closed
把從-----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 的內容復制保存到本地:cert.crt 。然后用
openssl x509 -noout -text -in cert.crt
可以查看證書的內容。
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
01:a0:0c:59:92:a0:a1:42:6f:75:14:33:bd:5c:bf
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 Secure Server CA - G4
Validity
Not Before: Aug 15 00:00:00 2016 GMT
Not After : Aug 16 23:59:59 2017 GMT
Subject: C=CN, ST=beijing, L=beijing, O=BeiJing Baidu Netcom Science Technology Co., Ltd, OU=service operation department., CN=baidu.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:cb:15:e9:3c:b4:95:f3:a3:18:dd:38:3e:67:7c:
9b:43:ae:53:46:96:ac:59:e6:2a:ab:2f:91:cc:44:
b4:57:d3:f6:58:32:86:b6:5e:dd:36:f2:ab:bc:63:
32:c3:65:ba:e2:45:79:19:6f:c6:0b:33:1a:04:bf:
2c:dc:5f:a6:46:98:ea:c8:3a:ed:1f:ed:bd:ac:41:
f0:b9:ae:20:99:fd:7b:b4:48:dd:d6:54:a3:26:43:
4c:11:56:4e:8b:d5:b1:da:0e:96:71:74:d1:84:51:
28:df:6d:6c:aa:35:ac:ae:2b:ce:ec:7e:82:a4:6d:
7f:81:ec:93:e9:a3:4c:18:4f:91:8d:09:ff:8a:a8:
71:41:9e:19:8c:4f:8c:79:4f:20:90:01:04:de:54:
b6:d5:2f:dc:17:b5:d1:f8:54:cc:fd:4e:1c:7c:a3:
fa:26:2a:2b:f3:ec:30:8a:3e:3e:86:5c:95:bd:28:
c7:52:b8:56:f8:37:73:38:f2:f0:10:05:ef:ab:30:
fa:6a:ab:ff:0f:ef:d7:a5:9e:9a:31:40:0f:22:2a:
a1:45:ee:05:0c:a1:a7:78:78:16:68:26:89:74:91:
25:e2:7c:8a:4f:6d:cf:38:dd:21:bd:0a:86:b4:5b:
76:34:09:c8:0e:29:0e:e8:d8:2a:4d:a0:fb:81:ed:
d9:1d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:*.baidu.com, DNS:*.baifubao.com, DNS:*.bdstatic.com, DNS:*.hao123.com, DNS:*.nuomi.com, DNS:*.bce.baidu.com, DNS:*.eyun.baidu.com, DNS:*.map.baidu.com, DNS:baidu.com, DNS:baifubao.com, DNS:www.baidu.cn, DNS:www.baidu.com.cn, DNS:click.hm.baidu.com, DNS:log.hm.baidu.com, DNS:cm.pos.baidu.com, DNS:wn.pos.baidu.com, DNS:update.pan.baidu.com, DNS:mct.y.nuomi.com
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Certificate Policies:
Policy: 2.23.140.1.2.2
CPS: https://d.symcb.com/cps
User Notice:
Explicit Text: https://d.symcb.com/rpa
X509v3 Authority Key Identifier:
keyid:5F:60:CF:61:90:55:DF:84:43:14:8A:60:2A:B2:F5:7A:F4:43:18:EF
X509v3 CRL Distribution Points:
URI:http://ss.symcb.com/ss.crl
Authority Information Access:
OCSP - URI:http://ss.symcd.com
CA Issuers - URI:http://ss.symcb.com/ss.crt
1.3.6.1.4.1.11129.2.4.2:
.....8.O....V.QcV....!..Tz......Z...Va....b...M.....oN..v.......X......gp
.....V.~GZ.....G0E. .D!.Xb.B..>.C....K%..9k.<j.....w.!....BAR.... .
.l..].\.YWE........
Signature Algorithm: sha256WithRSAEncryption
41:2c:36:ad:a8:50:9d:af:02:2b:0e:87:a7:43:b7:82:3e:9a:
75:1f:41:bd:06:f1:c8:fb:92:40:5d:08:88:e9:49:dd:89:29:
1a:ab:b0:3d:5a:f8:00:b1:51:8d:c3:5c:06:64:88:f2:b0:14:
1a:7f:65:61:26:96:d2:15:9c:33:f4:3f:6d:de:99:93:00:0a:
55:49:8d:2e:52:fa:a2:16:0e:d7:36:a0:e8:aa:ed:e2:c8:10:
4d:c3:98:46:cc:ff:c0:cd:4d:91:a1:3d:52:77:b6:df:e7:bc:
41:11:6e:56:d6:7c:68:80:c4:84:d4:00:8d:7f:ff:16:67:08:
b1:66:4e:6d:e5:17:16:eb:3b:c6:42:22:7c:fb:73:80:f8:d0:
3c:b7:25:1c:1a:3d:66:84:30:5b:ed:9e:32:8d:b9:fc:72:29:
72:e4:30:37:e2:75:e9:89:85:e7:1c:68:9c:e5:32:e7:42:46:
85:21:b6:7d:cf:b1:aa:ae:81:3c:a0:ba:d3:52:13:b2:f9:91:
4d:b2:bc:1a:9c:d3:be:82:a7:fa:73:9f:55:fb:58:50:cd:1b:
e4:28:dd:b8:27:37:56:8f:01:f1:8e:c9:7f:b5:8e:b5:0c:7b:
cd:16:c9:9c:eb:cd:e0:80:b8:c8:f9:95:8c:c9:ad:54:70:39:
b1:00:38:4d
FYI:
PlantUML 真好用!