身份認證之PKI搭建、X.509(RFC5280)——(一)

一.PKI的搭建

利用openssl搭建一個功能簡單的PKI
參考文檔
https://pki-tutorial.readthedocs.io/en/latest/simple/index.html

這一部分不是原創,其實就是照着英文文檔實現了一下,把英文文檔翻譯成了中文(如果想自己實現,最好按照這個英文文檔來)

  • 概述

在這裏插入圖片描述

  • 這是一個名爲Simple Inc的組織, 該組織運行一個小型PKI來保護其電子郵件和Internet流量。
  • 要構建PKI,我們首先創建根CA及其根CA證書。 然後,我們使用根CA來創建簡單簽名CA.當CA部署完成後,我們會向員工Fred頒發電子郵件保護證書,並向www.simple.org網站服務器頒發TLS服務器證書。最後,瞭解CA需要支持的輸出格式,並展示如何查看我們創建的文件的內容。
  • 開始之前要獲取Simple PKI示例文件並切換到新目錄。
git clone https://bitbucket.org/stefanholek/pki-example-1
cd pki-example-1

1.創建根CA

1.1創建目錄

  • 創建兩個目錄,CA目錄包含了CA的相關信息,CRL目錄裏包含了CRL的信息。
    對CA目錄修改權限。
mkdir -p ca/root-ca/private ca/root-ca/db crl certs
chmod 700 ca/root-ca/private

1.2創建數據庫

cp /dev/null ca/root-ca/db/root-ca.db
cp /dev/null ca/root-ca/db/root-ca.db.attr
echo 01 > ca/root-ca/db/root-ca.crt.srl
echo 01 > ca/root-ca/db/root-ca.crl.srl
  • 在使用openssl ca命令之前,數據庫文件必須存在。
    數據庫中包含以下文件:索引文件,屬性文件,證書序列號文件,CRL號碼文件。這些文件的內容在附錄B中描述。

1.3 生成Root CA請求

openssl req -new \
    -config etc/root-ca.conf \
    -out ca/root-ca.csr \
    -keyout ca/root-ca/private/root-ca.key
  • 使用openssl req -new命令,我們爲根CA生成私鑰和證書籤名請求(CSR)。 系統會要求輸入密碼來保護私鑰(可以隨便輸,類似於1111的簡單密碼)。openssl req命令從前文的配置文件的[req]部分獲取其配置。

1.4生成Root CA證書

penssl ca -selfsign \
    -config etc/root-ca.conf \
    -in ca/root-ca.csr \
    -out ca/root-ca.crt \
    -extensions root_ca_ext
  • 使用openssl ca命令,我們發佈基於1.3中CSR的證書。 該命令從前文的配置文件獲取其配置。

2.創建 Signing CA

2.1創建目錄

mkdir -p ca/signing-ca/private ca/signing-ca/db crl certs
chmod 700 ca/signing-ca/private
  • ca目錄包含CA資源,crl目錄包含CRL資源,certs目錄包含用戶證書。

2.2創建數據庫

cp /dev/null ca/signing-ca/db/signing-ca.db
cp /dev/null ca/signing-ca/db/signing-ca.db.attr
echo 01 > ca/signing-ca/db/signing-ca.crt.srl
echo 01 > ca/signing-ca/db/signing-ca.crl.srl
  • 這些文件的內容在附錄B中描述。

2.3創建Signing CA請求

openssl req -new \
    -config etc/signing-ca.conf \
    -out ca/signing-ca.csr \
    -keyout ca/signing-ca/private/signing-ca.key
  • 使用openssl req -new命令,我們爲簽名CA創建私鑰和證書生成請求CSR。 系統會要求輸入密碼來保護私鑰可以隨便輸,類似於1111的簡單密碼)。 openssl req命令從配置文件 [req]部分獲取其配置。

2.4創建Signing CA證書

openssl ca \
    -config etc/root-ca.conf \
    -in ca/signing-ca.csr \
    -out ca/signing-ca.crt \
    -extensions signing_ca_ext
  • 使用openssl ca命令,我們發佈基於CSR的證書。 該命令從配置文件的[ca]部分獲取其配置。 注意,頒發簽名CA證書的是根CA.

3.使用CA證書

3.1創建email請求

openssl req -new \
    -config etc/email.conf \
    -out certs/fred.csr \
    -keyout certs/fred.key
  • 使用openssl req -new命令,生成私鑰和證書籤名請求。
    request configuration file 是已經配置好的文件。
    出現提示時輸入以下DN組件:
    DC=org,DC=simple,O=Simple Inc, CN=Fred Flintstone,
    emailAddress = [email protected].其他字段留空。

3.2創建email證書

openssl ca \
    -config etc/signing-ca.conf \
    -in certs/fred.csr \
    -out certs/fred.crt \
    -extensions email_ext
  • 我們使用Signing CA頒發電子郵件的證書。 證書類型由我們附加的擴展名定義。 證書的副本以名稱ca / signing-ca / 01.pem保存在證書歸檔中(01是十六進制的證書序列號。)

3.3 TLS服務器請求

SAN=DNS:www.simple.org \
openssl req -new \
    -config etc/server.conf \
    -out certs/simple.org.csr \
    -keyout certs/simple.org.key
  • 使用已經配置好的文件request configuration file生成TSL服務器證書的私鑰和CSR。
    出現提示時輸入以下DN組件:
    DC=org, DC=simple, O=Simple Inc, CN=www.simple.org
    必須將subjectAltName指定爲環境變量。 另請注意,服務器密鑰通常沒有密碼。

3.4生成TLS服務器證書

openssl ca \
    -config etc/signing-ca.conf \
    -in certs/simple.org.csr \
    -out certs/simple.org.crt \
    -extensions server_ext
  • 我們使用簽名CA頒發服務器證書。 證書類型由我們附加的擴展名定義。 證書副本以名稱ca / signing-ca / 02.pem保存在證書歸檔中。

3.5證書的吊銷

openssl ca \
    -config etc/signing-ca.conf \
    -revoke ca/signing-ca/01.pem \
    -crl_reason superseded
  • 證書替換或私鑰丟失時,要求在證書有效期到期之前撤銷證書。 openssl ca -revoke命令將證書標記爲在CA數據庫中已撤銷。 從那時起它將被包含在CA頒發的CRL中。 上面的命令撤消序列號爲01(十六進制)的證書。

3.6證書撤銷列表

openssl ca -gencrl \
    -config etc/signing-ca.conf \
    -out crl/signing-ca.crl
  • openssl ca -gencrl命令創建證書吊銷列表(CRL)。CRL包含CA數據庫中所有已撤銷但尚未過期的證書。必須定期發佈新的CRL。

4.輸出格式

4.1生成DER格式的證書

openssl x509 \
    -in certs/fred.crt \
    -out certs/fred.cer \
    -outform der
  • 所有已發佈的證書必須採用DER格式[RFC 2585#section-3]。

4.2生成DER格式的證書撤銷列表

openssl crl \
    -in crl/signing-ca.crl \
    -out crl/signing-ca.crl \
    -outform der
  • 所有已發佈的CRL必須採用DER格式[RFC 2585#section-3]

4.3 生成PKCS#7 bundle

openssl crl2pkcs7 -nocrl \
    -certfile ca/signing-ca.crt \
    -certfile ca/root-ca.crt \
    -out ca/signing-ca-chain.p7c \
    -outform der
  • PKCS#7用於綁定兩個或多個證書。 格式也允許CRL,但它們在實踐中不使用。

4.4生成PKCS#12 bundle

openssl pkcs12 -export \
    -name "Fred Flintstone" \
    -inkey certs/fred.key \
    -in certs/fred.crt \
    -out certs/fred.p12
  • PKCS#12用於綁定證書和私鑰。 可以添加其他證書,通常是包含直到根CA的鏈的證書

4.5生成PEMbundl

cat ca/signing-ca.crt ca/root-ca.crt > \
    ca/signing-ca-chain.pem

cat certs/fred.key certs/fred.crt > \
    certs/fred.pem

  • PEM包是通過連接其他PEM格式的文件創建的。 最常見的形式是"cert chain",“key + cert"和"key + cert chain”。OpenSSL支持PEM包,大多數軟件基於它(例如Apache mod_ssl和stunnel。)

5.查看結果

5.1查看請求的結果

openssl req \
    -in certs/fred.csr \
    -noout \
    -text
  • openssl req命令可用於顯示CSR文件的內容。

5.2查看證書

openssl x509 \
    -in certs/fred.crt \
    -noout \
    -text
  • openssl x509命令可用於顯示證書文件的內容
  • 結果如下圖
    在這裏插入圖片描述

在這裏插入圖片描述

5.3查看CRL

openssl crl \
    -in crl/signing-ca.crl \
    -inform der \
    -noout \
    -text
  • openssl crl命令可用於查看CRL文件的內容。
  • 結果如下圖:
    在這裏插入圖片描述

5.4查看PKCS#7 bundle

openssl pkcs7 \
    -in ca/signing-ca-chain.p7c \
    -inform der \
    -noout \
    -text \
    -print_certs
  • openssl pkcs7命令可用於顯示PKCS#7的內容。

5.4查看PKCS#12 bundle

openssl pkcs12 \
    -in certs/fred.p12 \
    -nodes \
    -info
  • openssl pkcs12命令可用於顯示PKCS#12的內容。

二.PKI的基本概念

1.定義

  • PKI:公鑰基礎設施 Public Key Infrastructure
  • PKI的目的:解決網上身份認證、電子信息的完整性和不可抵賴性等安全問題,爲網絡應用提供可靠的安全服務。
  • PKI的任務:確立可信任的數字身份。

2.PKI的組成

  • 證書機構CA,註冊機構RA,證書發佈庫,密鑰備份與恢復,證書撤銷機構

  • 數字認證中心(CA)

    (1)負責發放和管理數字證書

    (2)提供網絡身份認證服務、負責證書籤發及簽發後證書生命週期中的所有方面的管理

    (3)維護證書檔案和證書相關的審計
    證書機構的功能:
    在這裏插入圖片描述

  • 註冊機構

    註冊機構(RA)是數字證書註冊審批機構,是認證中心的延伸。

    RA按照特定政策與管理規範對用戶的資格進行審查。
    註冊機構的功能
    在這裏插入圖片描述

  • 證書發佈庫

    用於集中存放CA頒發證書和證書撤銷列表。支持分佈式存放,以提高查詢效率。

    LDAP目錄服務支持分佈式存放,是大規模PKI系統成功實施的關鍵,也是創建高效的認證機構的關鍵技術。

  • 密鑰備份與恢復

    密鑰備份和恢復只能針對加/解密密鑰,而無法對簽名密鑰進行備份。數字簽名是用於支持不可否認服務的,有時間性要求,因此不能備份/恢復簽名密鑰。

    如果註冊聲明公/私鑰對是用於數據加密的,則CA即可對該用戶的私鑰進行備份。當用戶丟失密鑰後,可通過可信任的密鑰恢復中心或CA完成密鑰恢復。

  • 證書撤銷的兩種實現方法

    (1)證書撤銷列表
    (CRL, Certificate Revocation List)

    (2)在線證書狀態協議
    (OCSP,Online Certificate Status Protocol)

三.數字證書及認證路徑

1.數字證書

1998年,v1版本

1993年,v2版本,比v1版本增加了2個字段

1996,v3版本(v3格式通過添加其他擴展字段的規定來擴展v2格式)。

2.數字證書認證路徑

在這裏插入圖片描述

在這裏插入圖片描述

3.Certificate Revocation證書撤銷

  • 在證書有效期中間,該證書可能無效,如:私鑰丟失
    身份信息發生變化。應該阻止訂戶停止使用該證書,CA要撤銷該證書。
  • (1)Certificate Revocation List證書撤銷列表
    也要CA進行數字簽名,以實現數據完整性、數據源鑑別、非否認。
    下圖爲已被撤銷的證書信息
    在這裏插入圖片描述
  • (2)Online Certificate Status Protocol聯機證書撤銷狀態檢查
    在這裏插入圖片描述
    由於CRL的更新是有周期的,所以在證書已經被撤銷,但是CRL還沒有更新的情況下就無法查詢到最新狀態,此時應該使用ocsp來進行實時的查詢。
    請求-應答
    請求:“證書序列號等於****”的狀態如何?
    應答:未撤銷/撤銷/未知
    應答消息需要服務器的數字簽名

4.Operational Protocols

  • 需要協議來向使用證書的客戶端系統提供證書和CRL。
    公開證書的方式:
    HTTP/FTP/LDAP/Email等等

5.Management Protocols管理協議

管理協議來支持PKI用戶和管理實體之間的在線交互

  • (a)註冊:這是在CA爲該用戶頒發證書或證書之前,用戶首先使CA(直接或通過RA)知道自己的過程。
  • (b)初始化:在客戶端系統可以安全運行之前,必須安裝與存儲在基礎結構中其他位置的密鑰具有適當關係的密鑰材料。例如,客戶端需要使用公鑰和可信CA的其他保證信息進行安全初始化,以用於驗證證書路徑。此外,客戶端通常需要使用自己的密鑰對進行初始化。
  • (c)認證:這是CA爲用戶的公鑰頒發證書,並將該證書返回給用戶的客戶端系統和/或將該證書發佈到存儲庫中的過程。
  • (d)密鑰對恢復:作爲選項,用戶客戶端密鑰材料(例如,用於加密目的的用戶私鑰)可以由CA或密鑰備份系統備份。如果用戶需要恢復這些備份的密鑰材料(例如,由於忘記密碼或丟失的密鑰鏈文件),則可能需要在線協議交換來支持這種恢復。
  • (e)密鑰對更新:所有密鑰對需要定期更新,即用新密鑰對替換,並頒發新證書。
  • (f)撤銷請求:被授權人員向CA通知需要撤銷證書的異常情況。
  • (g)交叉認證:兩個CA交換用於建立交叉證書的信息。交叉證書是由一個CA頒發給另一個CA的證書,其中包含用於頒發證書的CA簽名密鑰。

四.證書

1.數字證書的具體內容

在這裏插入圖片描述

2.數字證書的整體結構

  • 證書的整體結構:證書內容、簽名算法、簽名結果。
    用ASN.1語法描述如下:
    在這裏插入圖片描述
  • 簽名算法爲CA對tbsCertificate進行簽名所使用的算法;類型爲AlgorithmIdentifier,其ASN.1語法描述如下
    在這裏插入圖片描述
  • 簽名結果是CA對tbsCertificate進行簽名的結果,類型爲BIT STRING。
  • version
    版本號
    版本(version)爲整數格式。證書格式的版本只有v1、v2、v3,分別用整數0、1、2表示。其類型Version的ASN.1描述如下:
    Version::=INTEGER {v1(0),v2(1),v3(2)}
  • issuer
    證書的簽發者(issuer):簽發證書的CA實體
  • subject
    證書主體(subject) :證書持有者實體
    證書的簽發者和證書主體用X.509 DN表示,DN是由RDN構成的序列。RDN用“屬性類型=屬性值”的形式表示。常用的屬性類型名稱以及簡寫如下:
  • Serial number
    RFC 3280標準要求證書序列號必須是正整數,且長度不應該大於20字節
  • Signature algorithmidentifier
    CA簽發證書時所使用的數字簽名算法,它的類型與signatureAlgorithm的類型相同,都爲AlgorithmIdentifier,它們的值必須一致,否則該證書無效
  • validity
    包含起、止兩個時間值。時間值可以使用UTCTime或者GeneralizedTime的形式表示。
  • Subject publickey information
    給出了證書所綁定的加密算法和公鑰
  • issuerUniqueID
    給出了證書籤發者的唯一標識符
  • subjectUniqueID
    給出了證書主體的唯一標識符

3.數字證書的簽名

在這裏插入圖片描述

4.數字證書的驗證

在這裏插入圖片描述

五.數字證書的擴展

1.Authority Key Identifier 認證中心密鑰標識

在這裏插入圖片描述

  • CA有多種功能:與RA通信,簽發訂戶證書,簽發CRL等。不同功能需要不同的證書
  • 認證中心密鑰的作用:標識用來指定CA簽發證書所用私鑰對應的公鑰,也就是指定了驗證證書時所用的CA證書,有助於證書驗證者更快地找到證書
  • 擴展值的ASN.1描述
    在這裏插入圖片描述

2.Subject Key Identifier 主體密鑰標識

  • 訂戶會進行不同安全要求的業務,需要多個密鑰/證書來對應不同的應用。

  • 主體密鑰標識的作用:區分訂戶的各個密鑰/證書對,也就是區分各個公鑰

  • ASN.1描述
    在這裏插入圖片描述

該字段需要包含在所有證書中

3.Key Usage 密鑰用法

  • 密鑰用法擴展的作用:實體擁有多個密鑰證書對,該擴展指定證書所對應密鑰的允許用途。
  • ASN.1描述
    在這裏插入圖片描述
  • 具體用法

4.Certificate Policies 證書策略

  • X.509證書是用於安全服務的,應該在證書中區分其安全等級的不同
    (1)安全等級主要是體現在:
    證書產生過程:信息審查是不是嚴格
    證書使用:所使用領域的安全要求不同
  • (1)證書策略就是用來區分不同證書的安全等級的
    簡稱CP,以OID的形式
    (2)證書策略擴展的作用:以OID的形式區分不同證書的安全級別
  • 建立CA時就確定CA所能簽發的證書的CP,如果想要在CA運行中間增加支持新的CP很困難。將CA證書中OID設爲2.5.29.32.0,即any-policy
  • CA位置不同,意義不同
    (1)CP出現在CA證書
    CA證書中有5個CP(ABCDE)
    表示該CA可以簽發具有這種CP的訂戶證書
    (2)CP出現在訂戶證書
    Bob證書中的CP是A級
    就說明了Bob證書具有此CP對應的安全等級
  • (1)1個CA可以具有幾種不同的CP。1個CA可以支持多種不同的證書籤發流程,簽發的證書可用於多種安全等級的範圍。
    (2)1個訂戶證書,可以具有幾種不同的CP。簽發流程自然只有1種,但可用於多種安全等級的範圍應用系統檢查的需要。

5.Certificate Mapping 證書映射

在這裏插入圖片描述

6.Subject Alternative Name&&issuer Alternative Name

  • 以上擴展用於表示CA/證書主體非X.500 DN形式的身份信息和名稱表示(如IP地址,電子郵件)
  • 一般情況下設置爲非關鍵性擴展
    subject和issuer字段爲空時,或者含有重要的需要用戶識別的名稱形式時需設爲關鍵字段

7.Subject Directory Attributes 主體目錄屬性

主體目錄屬性用於表示證書主體在X.500目錄中的屬性

8.Basic Constraint基本限制

  • 基本限制擴展用來區分該證書是CA證書還是末端實體證書
  • CA證書給出最大路徑深度,爲關鍵性擴展
  • 末端實體證書,關鍵或非關鍵擴展

*注:x.509 剩餘部分將由身份認證小組其他同學來補充

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