數(shù)字證書(shū)
數(shù)字證書(shū)(digital certificate),又叫做公鑰證書(shū)(public key certificate)或者身份證書(shū)(identity certificate),是一種證明公鑰擁有者的電子文檔,數(shù)字證書(shū)內(nèi)容包括公鑰、公鑰擁有者的身份識(shí)別信息(一般稱(chēng)作 subject)和驗(yàn)證本證書(shū)內(nèi)容的發(fā)行實(shí)體(一般稱(chēng)作發(fā)行者 issuer)的數(shù)字簽名。
證書(shū)格式
數(shù)字證書(shū)的格式普遍采用的是 X.509 V3 國(guó)際標(biāo)準(zhǔn),一個(gè)標(biāo)準(zhǔn)的 X.509 數(shù)字證書(shū)包含以下一些內(nèi)容:
- 證書(shū)的版本信息
- 證書(shū)的序列號(hào),每個(gè)證書(shū)都有一個(gè)唯一的證書(shū)序列號(hào)
- 證書(shū)所使用的簽名算法
- 證書(shū)的發(fā)行機(jī)構(gòu)名稱(chēng),命名規(guī)則一般采用X.500格式
- 證書(shū)的有效期,通用的證書(shū)一般采用UTC時(shí)間格式,它的計(jì)時(shí)范圍為1950-2049
- 證書(shū)所有人的名稱(chēng) (Subject),命名規(guī)則一般采用X.500格式
- 證書(shū)所有人的公鑰
- 證書(shū)發(fā)行者 (Issuer) 對(duì)證書(shū)的簽名
X.509 定義了數(shù)字證書(shū)格式的標(biāo)準(zhǔn),詳情請(qǐng)參見(jiàn)維基百科詞條 ,通過(guò) Openssl 命令行 openssl x509 -in certificate.crt -text -noout 工具可以查看證書(shū)格式。
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
52:04:3b:ed:ec:16:86:25:ba:0e:10:01:83:70:42:fd
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, O=TrustAsia Technologies, Inc., OU=Symantec Trust Network, OU=Domain Validated SSL, CN=TrustAsia DV SSL CA - G5
Validity
Not Before: Sep 28 00:00:00 2017 GMT
Not After : Sep 28 23:59:59 2018 GMT
Subject: CN=home.freemanke.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:bf:a8:30:1b:ea:95:b4:6a:b8:ed:b8:2b:f2:b5:
85:9d:a2:0d:1f:14:d4:71:26:d0:f5:66:37:3e:1a:
b1:a8:20:a1:2b:ea:99:79:d9:8e:ba:0e:1b:6b:b5:
d8:c9:46:4b:5e:63:7e:78:dd:d4:75:4c:9c:2f:03:
6f:62:1e:bd:4f:86:8f:c4:6a:aa:f1:20:28:70:c5:
bf:b9:b6:37:15:d7:a5:f3:1c:d5:63:06:d6:aa:64:
b1:ca:0e:ca:2f:f1:79:2a:da:3d:a8:7e:9b:82:a9:
73:9c:b3:3e:cc:df:ac:9d:a4:e6:cb:47:c1:dc:3e:
f6:74:e7:e4:43:30:e4:12:4d:7d:56:05:a5:45:80:
6c:b5:69:ba:4b:0b:37:ac:5c:85:73:17:a8:ba:a1:
1b:32:21:84:59:88:31:53:1a:25:90:a5:77:b2:07:
b4:0e:57:c6:46:38:36:25:7f:16:61:e6:0e:78:11:
7c:6f:c5:39:bd:13:02:5e:9e:e6:7a:ec:c5:b3:80:
b0:43:cf:7f:05:70:33:3b:1b:4d:4d:5d:78:8a:73:
e2:a1:f1:f9:78:97:08:ba:2a:69:8d:ae:19:f8:ab:
fc:11:9d:fa:26:93:f1:e4:6d:7c:70:f8:58:e7:e2:
d4:0f:36:5d:6c:19:e0:07:c7:bd:a5:74:28:c2:1a:
7a:75
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:home.freemanke.com
X509v3 Basic Constraints:
CA:FALSE
X509v3 Certificate Policies:
Policy: 2.23.140.1.2.1
CPS: https://d.symcb.com/cps
User Notice:
Explicit Text: https://d.symcb.com/rpa
X509v3 Authority Key Identifier:
keyid:6D:58:C7:7F:1A:E7:E1:3F:2E:A6:8C:97:35:42:BB:F4:D3:38:AC:3F
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
Authority Information Access:
OCSP - URI:http://trustasia2-ocsp.digitalcertvalidation.com
CA Issuers - URI:http://trustasia2-aia.digitalcertvalidation.com/trustasiag5.crt
1.3.6.1.4.1.11129.2.4.2:
...~...\. ....)6.K...c........SWw...=...x&.u.......X......gp
.....^..]......F0D. s.....r.]..]x[...H.
MUD...G...... ).h}......c..}d*..[d..`....?.7).
Signature Algorithm: sha256WithRSAEncryption
b4:b8:9a:25:b5:a2:0f:fc:1e:84:73:b7:8d:da:5c:53:18:57:
c0:54:f8:82:67:d9:23:c9:ae:f9:8b:cb:1c:af:76:e7:08:9c:
19:a2:50:98:31:41:cf:c0:e3:57:f8:92:05:db:d9:e3:d3:23:
83:e3:20:b9:69:73:1c:14:11:2f:b6:ab:97:7a:a7:48:e6:30:
0a:cc:a0:d5:99:c4:2c:79:f7:4a:97:0e:6d:18:c4:e0:39:1a:
fe:a4:c6:0e:ce:bb:49:75:fd:3f:6c:8e:7a:c3:bc:47:1a:2d:
da:a6:d4:1c:2f:fc:25:91:cc:c4:06:e9:ab:19:3b:3b:1f:27:
0a:4b:33:73:64:1e:86:9f:b8:d9:a2:b1:b1:d2:08:93:55:41:
df:2d:1e:e5:7d:3b:83:3f:ac:c5:05:6a:5e:f9:35:d9:aa:7d:
31:2a:df:95:85:65:44:c3:a9:7e:49:b3:da:06:0c:50:5a:52:
80:36:9d:85:dc:43:e9:94:d4:cc:e7:56:d9:7b:c9:14:b5:94:
cd:00:87:09:97:ef:6c:35:fb:34:84:e4:d9:66:bd:3a:29:10:
3b:d6:b4:97:95:b9:64:21:fb:87:d2:1e:72:b4:4c:0e:92:aa:
48:36:98:5f:00:92:60:78:ef:cd:49:8d:70:5e:49:12:d1:dd:
86:e1:9c:be
證書(shū)存儲(chǔ)格式
-
DER 二進(jìn)制存儲(chǔ)格式
DER格式證書(shū) -
PEM 二進(jìn)制存儲(chǔ)格式的 Base64 編碼格式
PEM格式證書(shū)
證書(shū)文件擴(kuò)展名
證書(shū)擴(kuò)展名現(xiàn)在基本上都在混用,所以擴(kuò)展名并不能唯一確認(rèn)證書(shū)的存儲(chǔ)格式,只有根據(jù)文件內(nèi)容來(lái)確定它是二進(jìn)制存儲(chǔ)還是 Base64 編碼格式存儲(chǔ)。
.key 一般用于存儲(chǔ) Base64 格式編碼的私鑰
.pem .cer .crt (Privacy-enhance Electronic Mail) DER 二進(jìn)制格式的 Base64 編碼,并在編碼頭尾加上起始行 -----BEGIN CERTIFICATE----- 和結(jié)束行 -----END CERTIFICATE-----
.der .cer .crt DER 二進(jìn)制格式證書(shū)編碼,不可讀,不方便證書(shū)的傳遞和交換
.p12 一般包含了證書(shū)和對(duì)稱(chēng)加密后的私鑰
.pfx 是p12的前身
如何從 .pfx 文件中導(dǎo)出公鑰和私鑰
openssl pkcs12 -in certificate.pfx -nocerts -out private.pem
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out public.pem
如何使用公鑰加密私鑰解密
echo Hello > file.txt
openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.encrypted.txt
openssl rsautl -decrypt -inkey private.pem -in file.encrypted.txt -out file.decrypted.txt
如何使用私鑰簽名公鑰驗(yàn)簽
考慮一個(gè)問(wèn)題,為什么沒(méi)有用私鑰加密公鑰解密的場(chǎng)景?因?yàn)楣€是公開(kāi)發(fā)布的,如果要用一個(gè)公開(kāi)發(fā)布的秘鑰來(lái)解密,這個(gè)場(chǎng)景就不是加解密,而是數(shù)字簽名。
數(shù)字簽名過(guò)程
- A 首先對(duì)消息使用 HASH 算法得到消息摘要
- A 使用私鑰對(duì)消息摘要進(jìn)行加密(為什么不直接對(duì)消息或文件進(jìn)行加密而是對(duì)其摘要進(jìn)行加密?因?yàn)榉菍?duì)稱(chēng)加密效率不高,非常耗時(shí))。
- A 將消息和加密后的摘要(簽名)發(fā)給接收方 B
- 接收方用 B 使用 A 的公鑰對(duì)簽名進(jìn)行解密得到一個(gè) 摘要,然后用同樣的 HASH 算法得到消息的摘要,對(duì)這兩個(gè)摘要比對(duì),如果完全相同,則說(shuō)明消息是 A 發(fā)送的,沒(méi)有被篡改。

