x509證書,SSL詳解

引言

使用HTTP(超文本傳輸)協議訪問互聯網上的數據是沒有經過加密的。也就是說,任何人都可以通過適當的工具攔截或者監聽到在網絡上傳輸的數據流。但是有時候,我們需要在網絡上傳輸一些安全性或者私祕性的數據,譬如:包含信用卡及商品信息的電子訂單。這個時候,如果仍然使用HTTP協議,勢必會面臨非常大的風險!相信沒有人能接受自己的信用卡號在互聯網上裸奔。

HTTPS(超文本傳輸安全)協議無疑可以有效的解決這一問題。所謂HTTPS,其實就是HTTP和SSL/TLS的組合,用以提供加密通訊及對網絡服務器的身份鑑定。HTTPS的主要思想是在不安全的網絡上創建一安全信道,防止黑客的竊聽和攻擊。

SSL(安全套接層)可以用來對Web服務器和客戶端之間的數據流進行加密。

SSL利用非對稱密碼技術進行數據加密。加密過程中使用到兩個祕鑰:一個公鑰和一個與之對應的私鑰。使用公鑰加密的數據,只能用與之對應的私鑰解密;而使用私鑰加密的數據,也只能用與之對應的公鑰解密。因此,如果在網絡上傳輸的消息或數據流是被服務器的私鑰加密的,則只能使用與其對應的公鑰解密,從而可以保證客戶端與與服務器之間的數據安全。

數字證書(Certificate)

在HTTPS的傳輸過程中,有一個非常關鍵的角色——數字證書,那什麼是數字證書?又有什麼作用呢?

所謂數字證書,是一種用於電腦的身份識別機制。由數字證書頒發機構(CA)對使用私鑰創建的簽名請求文件做的簽名(蓋章),表示CA結構對證書持有者的認可。數字證書擁有以下幾個優點:

使用數字證書能夠提高用戶的可信度
數字證書中的公鑰,能夠與服務端的私鑰配對使用,實現數據傳輸過程中的加密和解密
在證認使用者身份期間,使用者的敏感個人數據並不會被傳輸至證書持有者的網絡系統上
X.509證書包含三個文件:key,csr,crt。

key是服務器上的私鑰文件,用於對發送給客戶端數據的加密,以及對從客戶端接收到數據的解密
csr是證書籤名請求文件,用於提交給證書頒發機構(CA)對證書籤名
crt是由證書頒發機構(CA)簽名後的證書,或者是開發者自簽名的證書,包含證書持有人的信息,持有人的公鑰,以及簽署者的簽名等信息
備註:在密碼學中,X.509是一個標準,規範了公開祕鑰認證、證書吊銷列表、授權憑證、憑證路徑驗證算法等。

X.509標準

X.509標準是密碼學裏公鑰證書的格式標準。X.509 證書己應用在包括TLS/SSL(WWW萬維網安全瀏覽的基石)在內的衆多 Internet協議裏,同時它也有很多非在線的應用場景,比如電子簽名服務。X.509證書含有公鑰和標識(主機名、組織或個人),並由證書頒發機構(CA)簽名(或自簽名)。對於一份經由可信的證書籤發機構簽名(或者可以通過其它方式驗證)的證書,證書的擁有者就可以用證書及相應的私鑰來創建安全的通信,以及對文檔進行數字簽名。

在X.509系統中,證書申請者通過發起“證書籤名請求(CSR)”來得到一份被簽名的證書。爲此,它需要生成一個密鑰對,然後用其中的私鑰對CSR簽名(私鑰本身要妥善保存,對外保密),CSR包含申請人的身份信息、用於驗真CSR的申請人的公鑰,以及所請求證書的專有名稱(DN),CSR還可能帶有CA要求的其它有關身份證明的信息,然後CA對這個專有名稱發佈一份證書,並綁定一個公鑰。

創建自簽名證書的步驟

注意:以下步驟僅用於配置內部使用或測試需要的SSL證書。

第1步:生成私鑰

使用openssl工具生成一個RSA私鑰

 $ openssl genrsa -des3 -out server.key 2048

說明:生成rsa私鑰,des3算法,2048位強度,server.key是祕鑰文件名。

server.key內容

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,D1B4E57FFE2AB218

N20g4Ck9hHO2fkWCFv1VSyv5MLOpUfPLvjXeYTkACYXleklFPD6rRrn6hu1yRISt
uGj/Rrh51yTyobcqBznyxshm6SmIETE9KWc4uoWjXGkxNGskHnK3VgY3av30JvJF
/XELPqqLmtwAva//b9mj5NduSpcJlQCKuZKYpDyR2oOsHqesEgK2HOLiaD0ifWjk
OiiH2nIgaPHrvNM03Fp4Xtb9IBGze1iqVfg+afg42KxMy64hzokViVLl6E3V+D3r
uNzHSmNMJWgvv3aB+kyTrrv/wUq8TZo58pVC4jI+5WcKoWn26ENww/e7xB9iGU0K
VOcBHobTUmdXLZfx4TCM/Vx+SE3+xwAVUuomiE0D3Fu1PD3ltjiDPbTaDB5UYv50
nsEttEdlb9R1L+tJgHErgNZSzm7Jdyy0L+5S7hUlV2PXXp6pM7mPHjav/yBzZnvi
CTjXYp4RX8YHOVYoPhi78c84zdM2OT458aApnBUbfkKBqkAp+MAOBFecr24ganl2
oRFLIIB6PGWN6GNHhdDBfp/z8uT7fcRvtEkYrAbOGypI5xVHcIiA6yV7JKqRFJJt
E7kWYKcsdVSZIRSvR81Ell54avDpnTBHL44GrtRjOycgkPIOxFKBf+0irZ6PfasO
vZA7BxmvDR3RE3hAI6wK6pml3qkYSJEP/l+Lx2ozqV0uObCjNg35+DRFXu2zbsAk
48V6gBTJi1AGUaWprLINa3l4JsKJwLIuiv/adViiTDPBCQCdHOjxrkR1gbhhPWRW
QMvpwP1N8WFtiIuJM5U9K4XOjDO+3dXoAoTfeS+TPZU+K/NJEEQ4+orPl85yDqF3
fUVR94vClfieTJ1O4F9YFfilUjrphudD6xKBICsgM7u9FmXmZfcBCHRFUytOYgA3
8/a/7Cd0uCzpAHh1eciZf+T9XVvNDqSiFc/Eny9Od7yksbCJWbJeYO6xnwjModyd
K06BJNryUAi9tfuc04Z3Tc8rRQ79DDTAnoZ1i0opxLv5Z0VELBE/paUyg91pN8UH
U1OFIxDqa7oujpTq15RqFngQI+VW+YuCgwUA3Ycx5mAvFVc2qFwxWQK0/428rOEA
t0zEyTiditkbyL/V/dqlbaPzEblLXEoWGvPPJbIhWqRlVv/8r4t8sLzj5JT0YnT1
1ReUgwdQtl/3xfby+mcYxyYfVYcEFDnOeJkQkstkQ9wrvZjEJgj4zE/PI5FK8CnY
/SmSaDxk+mI7zqGxriBHfWWp5hPvBS5S9h4xM+5WLmdHO98TpBWtZH+zP3/uexk/
crdL1s1VGv3ZiJNOV6QGlCPLRnY2xIjNiobGQtTiotBtmmzibjYXphWvR7r0hbVm
VKB/P1cJnI0smBR/rxCPzmhCjUvXNtpk4CSyo/nKBaU3BQjTu2nrJON+9kz63sLM
FH0nEwN/52x42Zpsax022FggsEOyK8GleTeWiR5CPEvh7XeWKQOmxPOBShPA1mMe
et8vxG3iPkmtXTw/tyQolMZTl4hq69Cv95kxEpqtWJF+p2IsjlR6IQP7LA9ADiYm
ISJIQpYQFLBV8sowk0PmDMIG134YMBzFlZPAlzj+9RkVHW77SbuH/g==
-----END RSA PRIVATE KEY-----

注意:生成私鑰,需要提供一個至少4位的密碼,這個密碼一定要記住,後續的CSR過程需要用到

第2步:生成CSR(證書籤名請求)

生成私鑰之後,便可以創建csr文件了。

此時可以有兩種選擇。理想情況下,可以將證書發送給證書頒發機構(CA),CA驗證過請求者的身份之後,會出具簽名證書(很貴)。另外,如果只是內部或者測試需求,也可以使用OpenSSL實現自簽名,具體操作如下:

$ openssl req -new -key server.key -out server.csr

說明需要依次輸入:

國家 Country Name (2 letter code) [AU]:CN    ← 國家代號,中國輸入CN
地區 State or Province Name (full name) [Some-State]:SiChuan  ← 省的全名,拼音
城市 Locality Name (eg, city) []:ChengDu    ← 市的全名,拼音
組織/公司 Organization Name (eg, company) [Internet Widgits Pty Ltd]:FengLun Corp. ← 公司英文名
組織單位 Organizational Unit Name (eg, section) []:Blockchain    ← 可以不輸入
目標名稱 Common Name (eg, YOUR name) []:www.glowd.cn       ←服務器主機名,若填寫不正確,瀏覽器會報告證書無效,但並不影響使用
郵箱 Email Address []:[email protected]     ← 電子郵箱,可隨意填

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ← 可以不輸入
An optional company name []: ← 可以不輸入

Common Name是最重要的,它代表你的證書要代表的目標,如果你爲網站申請的證書,就要添你的域名,如果要支持https,Common Name應該與域名保持一致,否則會引起瀏覽器警告。

第3步:刪除私鑰中的密碼

在第1步創建私鑰的過程中,由於必須要指定一個密碼。而這個密碼會帶來一個副作用,那就是在每次Apache啓動Web服務器時,都會要求輸入密碼,這顯然非常不方便。要刪除私鑰中的密碼,操作如下:

$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key

第4步:生成自簽名證書

如果你不想花錢讓CA簽名,或者只是測試SSL的具體實現。那麼,現在便可以着手生成一個自簽名的證書了。

需要注意的是,在使用自簽名的臨時證書時,瀏覽器會提示證書的頒發機構是未知的。

$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

說明:生產當前日期起有效期爲期一年的服務器證書server.crt,crt上有證書持有人的信息,持有人的公鑰,以及簽署者的簽名等信息。當用戶安裝了證書之後,便意味着信任了這份證書,同時擁有了其中的公鑰。證書上會說明用途,例如服務器認證,客戶端認證,或者簽署其他證書。當系統收到一份新的證書的時候,證書會說明,是由誰簽署的。如果這個簽署者確實可以簽署其他證書,並且收到證書上的簽名和簽署者的公鑰可以對上的時候,系統就自動信任新的證書。

第5步:安裝私鑰和證書

將私鑰和證書文件複製到Apache的配置目錄下即可。

第6步. 創建客戶端證書密鑰文件client.key

openssl genrsa -des3 -out client.key 2048

說明:生成rsa私鑰,des3算法,2048位強度,client.key是祕鑰文件名

Enter pass phrase for client.key: ← 輸入一個新密碼
Verifying – Enter pass phrase for client.key: ← 重新輸入一遍密碼

第7步. 創建客戶端證書的申請文件client.csr:

openssl req -new -key client.key -out client.csr

輸出內容爲:

[lenin@archer ~]$ openssl req -new -key client.key -out client.csr
Enter pass phrase for client.key: ← 輸入上一步中創建的密碼

Country Name (2 letter code) [AU]:CN ← 國家名稱,中國輸入CN
State or Province Name (full name) [Some-State]:Sichuan ← 省名稱,拼音
Locality Name (eg, city) []:ChengDu ← 市名稱,拼音
Organization Name (eg, company) [Internet Widgits Pty Ltd]:FengLun Corp. ← 公司英文名
Organizational Unit Name (eg, section) []: ← 可以不填
Common Name (eg, YOUR name) []:Glowd ← 自己的英文名,可以隨便填
Email Address []:[email protected] ← 電子郵箱,可以隨便填

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ← 可以不填
An optional company name []: ← 可以不填
  1. 使用server的證書創建一個自當前日期起有效期爲一年的客戶端證書client.crt:
$ openssl x509 -req -days 365 -sha1 -extensions v3_req -CA server.crt -CAkey server.key -CAserial server.srl -CAcreateserial -in client.csr -out client.crt

Signature ok
subject=/C=CN/ST=SiChuan/L=ChengDu/O=FengLun Corp./CN=Glowd/[email protected]
Getting CA Private Key
  1. 將客戶端證書文件client.crt和客戶端證書密鑰文件client.key合併成客戶端證書安裝包client.pfx:
$ openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx
Enter pass phrase for client.key: ← 輸入上面創建的密碼
Enter Export Password: ← 輸入一個新的密碼,用作客戶端證書的保護密碼,在客戶端安裝證書時需要輸入此密碼
Verifying – Enter Export Password: ← 確認密碼
  1. 保存生成的文件備用,其中server.crt和server.key是配置單向SSL(refer)時需要使用的證書文件,client.crt是配置雙向SSL時需要使用的證書文件,client.pfx是配置雙向SSL時需要客戶端安裝的證書文件

.crt文件和.key可以合到一個文件裏面,把2個文件合成了一個.pem文件(直接拷貝過去就行了)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章