OpenSSL 與 SSL 數字證書概念貼

SSL/TLS 介紹見文章 SSL/TLS原理詳解
若是你想快速自建CA而後簽發數字證書,請移步 基於OpenSSL自建CA和頒發SSL證書 html

首先簡單區分一下HTTPS、SSL、OpenSSL三者的關係:git

SSL是在客戶端和服務器之間創建一條SSL安全通道的安全協議,而OpenSSL是TLS/SSL協議的開源實現,提供開發庫和命令行程序。常說的HTTPS是HTTP的加密版,底層使用的加密協議是SSL。算法

1. PKI、CA與證書

PKI 就是 Public Key Infrastructure 的縮寫,翻譯過來就是公開密鑰基礎設施。它是利用公開密鑰技術所構建的,解決網絡安全問題的,廣泛適用的一種基礎設施;是一種遵循既定標準的密鑰管理平臺,它可以爲全部網絡應用提供加密和數字簽名等密碼服務及所必需的密鑰和證書管理體系。apache

PKI既不是一個協議,也不是一個軟件,它是一個標準,在這個標準之下發展出的爲了實現安全基礎服務目的的技術統稱爲PKI。能夠說CA(認證中心)是PKI的核心,而數字證書是PKI的最基本元素,還有如apache等服務器、瀏覽器等客戶端、銀行等應用,都是pki的組件。這篇文章能夠幫助理解:PKI/CA 技術的介紹segmentfault

1.1 CA

爲保證用戶之間在網上傳遞信息的安全性、真實性、可靠性、完整性和不可抵賴性瀏覽器

CA 機構,又稱爲證書認證中心 (Certificate Authority) 中心,是一個負責發放和管理數字證書的第三方權威機構,它負責管理PKI結構下的全部用戶(包括各類應用程序)的證書,把用戶的公鑰和用戶的其餘信息捆綁在一塊兒,在網上驗證用戶的身份。CA機構的數字簽名使得攻擊者不能僞造和篡改證書。安全

認證中心主要有如下5個功能:服務器

  1. 證書的頒發:接收、驗證用戶(包括下級認證中心和最終用戶)的數字證書的申請。能夠受理或拒絕
  2. 證書的更新:認證中心能夠按期更新全部用戶的證書,或者根據用戶的請求來更新用戶的證書
  3. 證書的查詢:查詢當前用戶證書申請處理過程;查詢用戶證書的頒發信息,這類查詢由目錄服務器ldap來完成
  4. 證書的做廢:因爲用戶私鑰泄密等緣由,須要向認證中心提出證書做廢的請求;證書已通過了有效期,認證中心自動將該證書做廢。認證中心經過維護證書做廢列表 (Certificate Revocation List,CRL) 來完成上述功能。
  5. 證書的歸檔:證書具備必定的有效期,證書過了有效期以後就將做廢,可是咱們不能將做廢的證書簡單地丟棄,由於有時咱們可能須要驗證之前的某個交易過程當中產生的數字簽名,這時咱們就須要查詢做廢的證書。

1.2 Certificate

1.2.1 X.509標準

"SSL證書"這個詞是一個相對較大的概念,整個PKI體系中有不少SSL證書格式標準。PKI的標準規定了PKI的設計、實施和運營,規定了PKI各類角色的"遊戲規則",提供數據語法和語義的共同約定。x.509是PKI中最重要的標準,它定義了公鑰證書的基本結構,能夠說PKI是在X.509標準基礎上發展起來的:網絡

  • SSL公鑰證書
  • 證書廢除列表CRL(Certificate revocation lists 證書黑名單)

參考 http://en.wikipedia.org/wiki/X.509函數

1.2.2 ssl公鑰證書格式

1. 證書版本號(Version)
版本號指明X.509證書的格式版本,如今的值能夠爲:
    1) 0: v1
    2) 1: v2
    3) 2: v3
也爲未來的版本進行了預約義

2. 證書序列號(Serial Number)
序列號指定由CA分配給證書的惟一的"數字型標識符"。當證書被取消時,其實是將此證書的序列號放入由CA簽發的CRL中,
這也是序列號惟一的緣由。

3. 簽名算法標識符(Signature Algorithm)
簽名算法標識用來指定由CA簽發證書時所使用的"簽名算法"。算法標識符用來指定CA簽發證書時所使用的:
    1) 公開密鑰算法
    2) hash算法
example: sha256WithRSAEncryption
須向國際知名標準組織(如ISO)註冊

4. 簽發機構名(Issuer)
此域用來標識簽發證書的CA的X.500 DN(DN-Distinguished Name)名字。包括:
    1) 國家(C)
    2) 省市(ST)
    3) 地區(L)
    4) 組織機構(O)
    5) 單位部門(OU)
    6) 通用名(CN)
    7) 郵箱地址

5. 有效期(Validity)
指定證書的有效期,包括:
    1) 證書開始生效的日期時間
    2) 證書失效的日期和時間
每次使用證書時,須要檢查證書是否在有效期內。

6. 證書用戶名(Subject)
指定證書持有者的X.500惟一名字。包括:
    1) 國家(C)
    2) 省市(ST)
    3) 地區(L)
    4) 組織機構(O)
    5) 單位部門(OU)
    6) 通用名(CN)
    7) 郵箱地址

7. 證書持有者公開密鑰信息(Subject Public Key Info)
證書持有者公開密鑰信息域包含兩個重要信息:
    1) 證書持有者的公開密鑰的值
    2) 公開密鑰使用的算法標識符。此標識符包含公開密鑰算法和hash算法。
8. 擴展項(extension)
X.509 V3證書是在v2的基礎上一標準形式或普通形式增長了擴展項,以使證書可以附帶額外信息。標準擴展是指
由X.509 V3版本定義的對V2版本增長的具備普遍應用前景的擴展項,任何人均可以向一些權威機構,如ISO,來
註冊一些其餘擴展,若是這些擴展項應用普遍,也許之後會成爲標準擴展項。

9. 簽發者惟一標識符(Issuer Unique Identifier)
簽發者惟一標識符在第2版加入證書定義中。此域用在當同一個X.500名字用於多個認證機構時,用一比特字符串
來惟一標識簽發者的X.500名字。可選。

10. 證書持有者惟一標識符(Subject Unique Identifier)
持有證書者惟一標識符在第2版的標準中加入X.509證書定義。此域用在當同一個X.500名字用於多個證書持有者時,
用一比特字符串來惟一標識證書持有者的X.500名字。可選。

11. 簽名算法(Signature Algorithm)
證書籤發機構對證書上述內容的簽名算法
example: sha256WithRSAEncryption

12. 簽名值(Issuer's Signature)
證書籤發機構對證書上述內容的簽名值

example:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9 (0x9)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=GuangDong, L=ShenZhen, O=COMPANY Technologies Co., Ltd, OU=IT_SECTION, CN=registry.example.com.net/emailAddress=zhouxiao@example.com.net
        Validity
            Not Before: Feb 11 06:04:56 2015 GMT
            Not After : Feb  8 06:04:56 2025 GMT
        Subject: C=CN, ST=GuangDong, L=ShenZhen, O=TP-Link Co.,Ltd., OU=Network Management, CN=172.31.1.210
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a4:b0:dd:eb:c1:cf:5d:47:61:a6:ea:ef:8b:aa:
                    4b:f0:b4:2c:d8:96:c7:7c:ac:fa:c7:35:88:53:d0:
                    ...
                    8a:76:dc:8f:8c:44:c8:0b:3c:36:88:5f:01:f0:44:
                    4e:81:e6:7a:2b:ff:ba:da:33:a5:27:11:c6:f0:08:
                    6e:f3
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                07:C6:87:B7:C1:1E:28:E8:96:3F:EB:40:1E:82:41:45:CA:81:B6:3D
            X509v3 Authority Key Identifier: 
                keyid:A4:C2:14:6A:39:D1:95:1E:BD:DF:3B:92:4A:5C:12:42:1B:BC:53:B8

    Signature Algorithm: sha256WithRSAEncryption
         0c:c6:81:70:cd:0a:2d:94:4f:cb:a4:1d:ef:9e:8e:e4:73:ae:
         50:62:a8:9c:64:ef:56:0f:41:fe:6b:b4:d3:07:37:39:2c:ed:
         ...
         6f:62:61:b8:03:d7:97:31:ab:05:44:20:07:65:8b:ad:e2:cc:
         ad:65:73:f6:82:0f:9e:65:d0:ae:b7:1e:fd:9f:c1:d7:41:6c:
         0f:06:95:ee
-----BEGIN CERTIFICATE-----
MIIEMDCCAxigAwIBAgIBCTANBgkqhkiG9w0BAQsFADCBtTELMAkGA1UEBhMCQ04x
EjAQBgNVBAgMCUd1YW5nRG9uZzERMA8GA1UEBwwIU2hlblpoZW4xJjAkBgNVBAoM
...
ujwwRar6pPzusO95WuS93HsNmL2ZFZ63DS4LcW9iYbgD15cxqwVEIAdli63izK1l
c/aCD55l0K63Hv2fwddBbA8Gle4=
-----END CERTIFICATE-----

2. 附:數據加密的基礎知識

對稱密鑰加密

對稱密鑰加密(一個密鑰),也叫作共享密鑰加密或機密密鑰加密,使用發件人和收件人共同擁有的單個密鑰。這種密鑰既用於加密,也用於解密,叫作機密密鑰。對稱密鑰加密是加密大量數據的一種行之有效的方法。

對稱密鑰加密有許多種算法如DES,RC4,IDEA等,但全部這些算法都有一個共同的目的:以可還原的方式將明文 (未加密的數據轉換爲暗文。暗文使用加密密鑰編碼,對於沒有解密密鑰的任何人來講它都是沒有意義的。因爲對稱密鑰加密在加密和解密時使用相同的密鑰,因此這種加密過程的安全性取決因而否有未經受權的人得到了對稱密鑰。

衡量對稱算法優劣的主要尺度是其密鑰的長度。密鑰越長,在找到解密數據所需的正確密鑰以前必須測試的密鑰數量就越多。須要測試的密鑰越多,破解這種算法就越困難。

公鑰加密

公鑰加密使用兩個密鑰:一個公鑰和一個私鑰,這兩個密鑰在數學上是相關的。爲了與對稱密鑰加密相對照,公鑰加密有時也叫作不對稱密鑰加密。在公鑰加密中,公鑰可在通訊雙方之間公開傳遞,或在公用儲備庫中發佈,但相關的私鑰是保密的。只有使用私鑰才能解密用公鑰加密的數據。使用私鑰加密的數據只能用公鑰解密。下圖中,發件人擁有收件人的公鑰,並用它加密了一封郵件,但只有收件人掌握解密該郵件的有關私鑰。
openssl-encrpt01

公鑰算法的主要侷限在於,這種加密形式的速度相對較低。實際上,一般僅在關鍵時刻才使用公鑰算法,如在實體之間交換對稱密鑰時,或者在簽署一封郵件的散列時(散列是經過應用一種單向數學函數得到的一個定長結果,對於數據而言,叫作散列算法)。將公鑰加密與其它加密形式(如對稱密鑰加密)結合使用,能夠優化性能,如數字簽名和密鑰交換。

經常使用公鑰算法:

  • RSA:適用於數字簽名和密鑰交換。 是目前應用最普遍的公鑰加密算法,特別適用於經過 Internet 傳送的數據,RSA算法以它的三位發明者的名字命名。
  • DSA:僅適用於數字簽名。 數字簽名算法 (Digital Signature Algorithm, DSA) 由美國國家安全署 (United States National Security Agency, NSA) 發明,已做爲數字簽名的標準。DSA 算法的安全性取決於自計算離散算法的困難。這種算法,不適用於數據加密。
  • Diffie-Hellman:僅適用於密鑰交換。 Diffie-Hellman 是發明的第一個公鑰算法,以其發明者 Whitfield Diffie 和 Martin Hellman 的名字命名。Diffie-Hellman 算法的安全性取決於在一個有限字段中計算離散算法的困難。

單向散列算法

散列,也稱爲散列值或消息摘要 ,是一種與基於密鑰(對稱密鑰或公鑰)的加密不一樣的數據轉換類型。散列就是經過把一個叫作散列算法的單向數學函數應用於數據,將任意長度的一塊數據轉換爲一個定長的、不可逆轉的數字,其長度一般在128~256位之間。所產生的散列值的長度應足夠長,所以使找到兩塊具備相同散列值的數據的機會不多。如發件人生成郵件的散列值並加密它,而後將它與郵件自己一塊兒發送。而收件人同時解密郵件和散列值,並由接收到的郵件產生另一個散列值,而後將兩個散列值進行比較。若是二者相同,郵件極有可能在傳輸期間沒有發生任何改變。

下面是幾個經常使用的散列函數:

  • MD5:是RSA數據安全公司開發的一種單向散列算法,MD5被普遍使用,能夠用來把不一樣長度的數據塊進行暗碼運算成一個128位的數值。
  • SHA-1:與 DSA 公鑰算法類似,安全散列算法1(SHA-1)也是由 NSA 設計的,並由 NIST 將其收錄到 FIPS 中,做爲散列數據的標準。它可產生一個 160 位的散列值。SHA-1 是流行的用於建立數字簽名的單向散列算法。
  • MAC(Message Authentication Code):消息認證代碼,是一種使用密鑰的單向函數,能夠用它們在系統上或用戶之間認證文件或消息,常見的是HMAC(用於消息認證的密鑰散列算法)。
  • CRC(Cyclic Redundancy Check):循環冗餘校驗碼,CRC校驗因爲實現簡單,檢錯能力強,被普遍使用在各類數據校驗應用中。佔用系統資源少,用軟硬件均能實現,是進行數據傳輸差錯檢測地一種很好的手段(CRC 並非嚴格意義上的散列算法,但它的做用與散列算法大體相同,因此歸於此類)。

數字簽名:結合使用公鑰與散列算法

數字簽名是郵件、文件或其它數字編碼信息的發件人將他們的身份與信息綁定在一塊兒(即爲信息提供簽名)的方法。對信息進行數字簽名的過程,須要將信息與由發件人掌握的祕密信息一塊兒轉換(使用私鑰)爲叫作簽名的標記。數字簽名用於公鑰環境(任何人均可以擁有)中,它經過驗證發件人確實是他或她所聲明的那我的,並確認收到的郵件與發送的郵件徹底相同。

散列算法處理數據的速度比公鑰算法快得多。散列數據還縮短了要簽名的數據的長度,於是加快了簽名過程。

密鑰交換:結合使用對稱密鑰與公鑰

對稱密鑰算法很是適合於快速並安全地加密數據。但其缺點是,發件人和收件人必須在交換數據以前先交換機密密鑰。結合使用加密數據的對稱密鑰算法與交換機密密鑰的公鑰算法可產生一種既快速又靈活的解決方案。

參考


原文連接地址:http://seanlook.com/2015/01/15/openssl-certificate-encryption

相關文章
相關標籤/搜索