openssl與數字證書的使用

Openssl與數字證書的使用詳解

數字證書這個概念大家應該並不陌生,比如我們在利用Nginx提供https服務的時候需要我們去CA申請一 個包含我們的公鑰信息、身份信息、數字簽名的證書,再比如我們在使用銀行的U盾的時候也是在客戶機器上安裝了用戶的數字證書,數字證書就好像我們的電子身份證一樣,是對我們身份的唯一標識, 並且數字證書和身份證一樣是有期限的,過期之後需要重新申請,上面所說的CA其實是一家第三方值得信賴的機構,我們的數字證書和數字簽名均由該機構頒發,例如 Verisign、Thawte、GeoTrust

數字簽名中幾個概念

文件後綴名

  • csr: 證書籤發請求(Certificate Signing Request)

  • CRT 擴展名CRT用於證書。證書可以是DER編碼格式,也可以是PEM編碼格式。擴展名CER和CRT基本上是一樣的。

  • CER 擴展名CER。可以把CRT文件轉換爲CER文件(CRT和CER必須是相同編碼的,DER或者PEM)。

  • .KEY 擴展名KEY用於PCSK#8的公鑰和私鑰。這些公鑰和私鑰可以是DER編碼或者PEM編碼。

證書編碼格式

參考自 http://blog.csdn.net/zhuo_zhibin/article/details/7319926

  • .DER 擴展名DER用於二進制DER編碼的證書。我們大多時候直接用.crt .cer作爲證書文件後綴名。一個證書更準確的叫法應該是“DER編碼的證 “,”PEM編碼的證書”

  • .PEM 擴展名PEM用於ASCII(Base64)編碼的各種X.509 v3 證書。文件開始由一行”—– BEGIN …“開始。

x509 是什麼

X.509是一種非常通用的證書格式。所有的證書都符合ITU-T X.509國際標準,因此(理論上)爲一種應用創建的證書可以用於任何其他符合X.509標準的應用。
在一份證書中,必須證明公鑰及其所有者的姓名是一致的。對X.509證書來說,認證者總是CA或由CA指定的人,一份X.509證書是一些標準字段的集合,這些字段包含有關用戶或設備及其相應公鑰的信息。X.509標準定義了證書中應該包含哪些信息,並描述了這些信息是如何編碼的(即數據格式)

所有的X.509證書包含以下數據:

  1. X.509版本號:指出該證書使用了哪種版本的X.509標準,版本號會影響證書中的一些特定信息。目前的版本是3。
  2. 證書持有人的公鑰:包括證書持有人的公鑰、算法(指明密鑰屬於哪種密碼系統)的標識符和其他相關的密鑰參數。
  3. 證書的序列號:由CA給予每一個證書分配的唯一的數字型編號,當證書被取消時,實際上是將此證書序列號放入由CA簽發的CRL(Certificate
    Revocation List證書作廢表,或證書黑名單表)中。這也是序列號唯一的原因。
  4. 主題信息:證書持有人唯一的標識符(或稱DN-distinguished name)這個名字在 Internet上應該是唯一的。DN由許多部分組成,看起來象這樣: CN=Bob Allen, OU=Total Network
    Security Division O=Network Associates, Inc. C=US
    這些信息指出該科目的通用名、組織單位、組織和國家或者證書持有人的姓名、服務處所等信息。
  5. 證書的有效期:證書起始日期和時間以及終止日期和時間;指明證書在這兩個時間內有效。
  6. 認證機構:證書發佈者,是簽發該證書的實體唯一的CA的X.509名字。使用該證書意味着信任簽發證書的實體。(注意:在某些情況下,比如根或頂級CA證書,發佈者自己簽發證書)

  7. 發佈者的數字簽名:這是使用發佈者私鑰生成的簽名,以確保這個證書在發放之後沒有被撰改過。

  8. 簽名算法標識符:用來指定CA簽署證書時所使用的簽名算法。算法標識符用來指定CA簽發證書時所使用的公開密鑰算法和HASH算法。

PKCS介紹

引用: 百度百科

The Public-Key Cryptography Standards (PKCS)是由美國RSA數據安全公司及其合作伙伴制定的一組公鑰密碼學標準,其中包括證書申請、證書更新、證書作廢表發佈、擴展證書內容以及數字簽名、數字信封的格式等方面的一系列相關協議。
到1999年底,PKCS已經公佈了以下標準:
PKCS#1:定義RSA公開密鑰算法加密和簽名機制,主要用於組織PKCS#7中所描述的數字簽名和數字信封[22]。
PKCS#3:定義Diffie-Hellman密鑰交換協議[23]。
PKCS#5:描述一種利用從口令派生出來的安全密鑰加密字符串的方法。使用MD2或MD5 從口令中派生密鑰,並採用DES-CBC模式加密。主要用於加密從一個計算機傳送到另一個計算機的私人密鑰,不能用於加密消息[24]。
PKCS#6:描述了公鑰證書的標準語法,主要描述X.509證書的擴展格式[25]。
PKCS#7:定義一種通用的消息語法,包括數字簽名和加密等用於增強的加密機制,PKCS#7與PEM兼容,所以不需其他密碼操作,就可以將加密的消息轉換成PEM消息[26]。
PKCS#8:描述私有密鑰信息格式,該信息包括公開密鑰算法的私有密鑰以及可選的屬性集等[27]。
PKCS#9:定義一些用於PKCS#6證書擴展、PKCS#7數字簽名和PKCS#8私鑰加密信息的屬性類型[28]。
PKCS#10:描述證書請求語法[29]。
PKCS#11:稱爲Cyptoki,定義了一套獨立於技術的程序設計接口,用於智能卡和PCMCIA卡之類的加密設備[30]。
PKCS#12:描述個人信息交換語法標準。描述了將用戶公鑰、私鑰、證書和其他相關信息打包的語法[31]。
PKCS#13:橢圓曲線密碼體制標準[32]。
PKCS#14:僞隨機數生成標準。
PKCS#15:密碼令牌信息格式標準[33]。

openssl

openssl創建自簽名證書

創建根證書私鑰長度爲2048

openssl genrsa -out ca.key 2048
利用私鑰創建根證書按照提示一路輸入:

openssl req -new -x509 -days 36500 -key ca.key -out ca.crt

創建長度爲2048的SSL證書私匙
openssl genrsa -out server.key 2048位

利用剛纔的私匙建立SSL證書請求一路向下:

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

當前文件夾下運行如下命令創建所需目錄:
mkdir dir demoCA &&cd demoCA&&mkdir newcerts&&echo 'xx' > serial &&touch index.txt&&cd ..
用CA根證書籤署SSL自建證書:
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
接下來目錄下會生成SSL證書及相關文件,分別是server.crt和server.key,接下來就可以利用它們配置https服務了。。

要注意的一點是我們生成的自簽名證書是不受客戶端瀏覽器信任的,會在我們打開自簽名證書配置的https網站的時候,我使用自己寫的ActivedRouter 配置的https服務,證書用的是自簽名證書,於是瀏覽器出現一個如下圖的提示
這裏寫圖片描述

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