SSL/TLS 介紹見文章 SSL/TLS原理詳解。
若是你想快速自建CA而後簽發數字證書,請移步 基於OpenSSL自建CA和頒發SSL證書 。html
首先簡單區分一下HTTPS、SSL、OpenSSL三者的關係:git
SSL是在客戶端和服務器之間創建一條SSL安全通道的安全協議,而OpenSSL是TLS/SSL協議的開源實現,提供開發庫和命令行程序。常說的HTTPS是HTTP的加密版,底層使用的加密協議是SSL。算法
PKI 就是 Public Key Infrastructure 的縮寫,翻譯過來就是公開密鑰基礎設施。它是利用公開密鑰技術所構建的,解決網絡安全問題的,廣泛適用的一種基礎設施;是一種遵循既定標準的密鑰管理平臺,它可以爲全部網絡應用提供加密和數字簽名等密碼服務及所必需的密鑰和證書管理體系。apache
PKI既不是一個協議,也不是一個軟件,它是一個標準,在這個標準之下發展出的爲了實現安全基礎服務目的的技術統稱爲PKI。能夠說CA(認證中心)是PKI的核心,而數字證書是PKI的最基本元素,還有如apache等服務器、瀏覽器等客戶端、銀行等應用,都是pki的組件。這篇文章能夠幫助理解:PKI/CA 技術的介紹 。segmentfault
爲保證用戶之間在網上傳遞信息的安全性、真實性、可靠性、完整性和不可抵賴性瀏覽器
CA 機構,又稱爲證書認證中心 (Certificate Authority) 中心,是一個負責發放和管理數字證書的第三方權威機構,它負責管理PKI結構下的全部用戶(包括各類應用程序)的證書,把用戶的公鑰和用戶的其餘信息捆綁在一塊兒,在網上驗證用戶的身份。CA機構的數字簽名使得攻擊者不能僞造和篡改證書。安全
認證中心主要有如下5個功能:服務器
"SSL證書"這個詞是一個相對較大的概念,整個PKI體系中有不少SSL證書格式標準。PKI的標準規定了PKI的設計、實施和運營,規定了PKI各類角色的"遊戲規則",提供數據語法和語義的共同約定。x.509是PKI中最重要的標準,它定義了公鑰證書的基本結構,能夠說PKI是在X.509標準基礎上發展起來的:網絡
參考 http://en.wikipedia.org/wiki/X.509 。函數
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-----
對稱密鑰加密(一個密鑰),也叫作共享密鑰加密或機密密鑰加密,使用發件人和收件人共同擁有的單個密鑰。這種密鑰既用於加密,也用於解密,叫作機密密鑰。對稱密鑰加密是加密大量數據的一種行之有效的方法。
對稱密鑰加密有許多種算法如DES,RC4,IDEA等,但全部這些算法都有一個共同的目的:以可還原的方式將明文 (未加密的數據轉換爲暗文。暗文使用加密密鑰編碼,對於沒有解密密鑰的任何人來講它都是沒有意義的。因爲對稱密鑰加密在加密和解密時使用相同的密鑰,因此這種加密過程的安全性取決因而否有未經受權的人得到了對稱密鑰。
衡量對稱算法優劣的主要尺度是其密鑰的長度。密鑰越長,在找到解密數據所需的正確密鑰以前必須測試的密鑰數量就越多。須要測試的密鑰越多,破解這種算法就越困難。
公鑰加密使用兩個密鑰:一個公鑰和一個私鑰,這兩個密鑰在數學上是相關的。爲了與對稱密鑰加密相對照,公鑰加密有時也叫作不對稱密鑰加密。在公鑰加密中,公鑰可在通訊雙方之間公開傳遞,或在公用儲備庫中發佈,但相關的私鑰是保密的。只有使用私鑰才能解密用公鑰加密的數據。使用私鑰加密的數據只能用公鑰解密。下圖中,發件人擁有收件人的公鑰,並用它加密了一封郵件,但只有收件人掌握解密該郵件的有關私鑰。
公鑰算法的主要侷限在於,這種加密形式的速度相對較低。實際上,一般僅在關鍵時刻才使用公鑰算法,如在實體之間交換對稱密鑰時,或者在簽署一封郵件的散列時(散列是經過應用一種單向數學函數得到的一個定長結果,對於數據而言,叫作散列算法)。將公鑰加密與其它加密形式(如對稱密鑰加密)結合使用,能夠優化性能,如數字簽名和密鑰交換。
經常使用公鑰算法:
散列,也稱爲散列值或消息摘要 ,是一種與基於密鑰(對稱密鑰或公鑰)的加密不一樣的數據轉換類型。散列就是經過把一個叫作散列算法的單向數學函數應用於數據,將任意長度的一塊數據轉換爲一個定長的、不可逆轉的數字,其長度一般在128~256位之間。所產生的散列值的長度應足夠長,所以使找到兩塊具備相同散列值的數據的機會不多。如發件人生成郵件的散列值並加密它,而後將它與郵件自己一塊兒發送。而收件人同時解密郵件和散列值,並由接收到的郵件產生另一個散列值,而後將兩個散列值進行比較。若是二者相同,郵件極有可能在傳輸期間沒有發生任何改變。
下面是幾個經常使用的散列函數:
數字簽名是郵件、文件或其它數字編碼信息的發件人將他們的身份與信息綁定在一塊兒(即爲信息提供簽名)的方法。對信息進行數字簽名的過程,須要將信息與由發件人掌握的祕密信息一塊兒轉換(使用私鑰)爲叫作簽名的標記。數字簽名用於公鑰環境(任何人均可以擁有)中,它經過驗證發件人確實是他或她所聲明的那我的,並確認收到的郵件與發送的郵件徹底相同。
散列算法處理數據的速度比公鑰算法快得多。散列數據還縮短了要簽名的數據的長度,於是加快了簽名過程。
對稱密鑰算法很是適合於快速並安全地加密數據。但其缺點是,發件人和收件人必須在交換數據以前先交換機密密鑰。結合使用加密數據的對稱密鑰算法與交換機密密鑰的公鑰算法可產生一種既快速又靈活的解決方案。
原文連接地址:http://seanlook.com/2015/01/15/openssl-certificate-encryption