openSSL命令、PKI、CA、SSL证书原理
相關學習資料
http://baike.baidu.com/view/7615.htm?fr=aladdin http://www.ibm.com/developerworks/cn/security/se-pkiusing/index.html?ca=drs http://www.ibm.com/developerworks/cn/security/s-pki/ http://en.wikipedia.org/wiki/X.509 http://zh.wikipedia.org/wiki/PKCS http://blog.csdn.net/rztyfx/article/details/6919220 http://weekend.blog.163.com/blog/static/7468958201131591422649/ http://linux.chinaunix.net/techdoc/beginner/2009/06/29/1120721.shtml http://www.360doc.com/content/12/0414/19/3725126_203594495.shtml http://blog.sina.com.cn/s/blog_436fe8b10100r5p3.html http://blog.csdn.net/allwtg/article/details/4982507 http://rhythm-zju.blog.163.com/blog/static/310042008015115718637/ http://www.mike.org.cn/articles/ubuntu-config-apache-https/?
目錄
1. PKI、CA簡介 2. SSL證書 3. SSL證書生成、openSSL學習 4. CA中心搭建、SSL證書生成過程?
1. PKI、CA簡介
PKI(Public Key Infrastructure)即"公鑰基礎設施",是一種遵循既定標準的密鑰管理平臺,它能夠為所有網絡應用提供加密和數字簽名等密碼服務及所必需的密鑰和證書管理體系,簡單來說,PKI就是利用公鑰理論和技術建立的提供安全服務的基礎設施。PKI技術是信息安全技術的核心,也是電子商務的關鍵和基礎技術。
PKI是Public Key Infrastructure的縮寫,是指用公鑰概念和技術來實施和提供安全服務的具有普適性的安全基礎設施。這個定義涵蓋的內容比較寬,原則上說,任何以公鑰技術為基礎的安全基礎設施都是PKI。當然,沒有好的非對稱算法和好的密鑰管理就不可能提供完善的安全服務,也就不能叫做PKI。也就是說,該定義中已經隱含了必須具有的密鑰管理功能。
PKI既不是一個協議,也不是一個軟件,它是一個標準,在這個標準之下發展出的為了實現安全基礎服務目的的技術統稱為PKIPKI主要由以下組件組成
1. 認證中心CA(證書簽發) CA是PKI的"核心",即數字證書的申請及簽發機關,CA必須具備權威性的特征,它負責管理PKI結構下的所有用戶(包括各種應用程序)的證書,把用戶的公鑰和用戶的其他信息捆綁在一起,在網上驗證用戶的身份,CA還要負責用戶證書的黑名單登記和黑名單發布 2. X.500目錄服務器(證書保存) X.500目錄服務器用于"發布"用戶的證書和黑名單信息,用戶可通過標準的LDAP協議查詢自己或其他人的證書和下載黑名單信息。3. 具有高強度密碼算法(SSL)的安全WWW服務器(即配置了HTTPS的apache) Secure socket layer(SSL)協議最初由Netscape 企業發展,現已成為網絡用來鑒別網站和網頁瀏覽者身份,以及在瀏覽器使用者及網頁服務器之間進行加密通訊的全球化標準。4. Web(安全通信平臺) Web有Web Client端和Web Server端兩部分,分別安裝在客戶端和服務器端,通過具有高強度密碼算法的SSL 協議保證客戶端和服務器端數據的機密性、完整性、身份驗證。5. 自開發安全應用系統 自開發安全應用系統是指各行業自開發的各種具體應用系統,例如銀行、證券的應用系統等。完整的PKI包括:1) 認證政策的制定,包括1.1) 遵循的技術標準1.2) 各CA 之間的上下級或同級關系1.3) 安全策略1.4) 安全程度1.5) 服務對象1.6) 管理原則和框架等2) 認證規則3) 運作制度的制定4) 所涉及的各方法律關系內容5) 技術的實現等
認證中心CA作為PKI的核心部分,CA實現了PKI 中一些很重要的功能
1. 接收驗證最終用戶數字證書的申請 2. 確定是否接受最終用戶數字證書的申請-證書的審批 3. 向申請者頒發、拒絕頒發數字證書-證書的發放 4. 接收、處理最終用戶的數字證書更新請求-證書的更新 5. 接收最終用戶數字證書的查詢、撤銷 6. 產生和發布證書廢止列表(CRL) 7. 數字證書的歸檔 8. 密鑰歸檔 9. 歷史數據歸檔在這么多功能中,CA的核心功能就是"發放"和"管理"數字證書,同時這也是PKI的核心
典型CA框架模型?
1. 安全服務器: 安全服務器面向普通用戶,用于提供:1) 證書申請2) 瀏覽3) 證書撤消列表4) 證書下載等安全服務 安全服務器與用戶的的通信采取安全信道方式(如SSL的方式,不需要對用戶進行身份認證)。用戶首先得到安全服務器的證書(該證書由CA頒發),然后用戶與服務器之間的所有通信,包括用戶填寫的申請信息以及瀏覽器生成的公鑰均以安全服務器的密鑰進行加密傳輸,只有安全服務器利用自己的私鑰解密才能得到明文,這樣可以防止其他人通過竊聽得到明文。從而保證了證書申請和傳輸
過程中的信息安全性。2. CA服務器 CA服務器是整個證書機構的核心,負責:1) 證書的簽發1.1) 產生自身的私鑰和公鑰(密鑰長度至少為1024位)1.2) 然后生成根數字證書,并且將數字證書傳輸給安全服務器2) CA還負責為操作員、安全服務器以及注冊機構服務器生成數字證書。安全服務器的數字證書和私鑰也需要傳輸給安全服務器 CA服務器是整個結構中最為重要的部分,存有CA的私鑰以及發行證書的腳本文件,出于安全的考慮,應將CA服務器與其他服務器隔離,任何通信采用人工干預的方式,確保認證中心的安全。3. 注冊機構RA 登記中心服務器面向登記中心操作員,在CA體系結構中起承上啟下的作用1) 一方面向CA轉發安全服務器傳輸過來的證書申請請求2) 另一方面向LDAP服務器和安全服務器轉發CA頒發的數字證書和證書撤消列表。4. LDAP服務器 LDAP服務器提供目錄瀏覽服務,負責將注冊機構服務器傳輸過來的用戶信息以及數字證書加入到服務器上。這樣其他用戶通過訪問LDAP服務器就能夠得到其他用戶的數字證書。5. 數據庫服務器:數據庫服務器是認證機構中的核心部分,用于:1) 認證機構中數據(如密鑰和用戶信息等)2) 日志合統計信息的存儲和管理 實際的的數據庫系統應采用多種措施,如磁盤陣列、雙機備份和多處理器等方式,以維護數據庫系統的安全性、穩定性、可伸縮性和高性能。
我們知道,PKI的目的是使用公鑰機制加密技術來保護通信的安全,而公鑰算法涉及到很多的加密參數,同時PKI機制中還有對用戶身份的識別的功能,為了滿足這些需求,"證書"的出現就很自然了,證書從本質上來說就是一個ASCII文本文件,它只是將整個公鑰機制中需要的各種數據都捆綁打包到了一起,統一管理、分發
?
2. SSL證書?
"SSL證書"這個詞是一個相對較大的概念,有很多種格式的SSL證書,整個PKI體系中有很多格式標準。PKI的標準規定了PKI的設計、實施和運營,規定了PKI各種角色的"游戲規則"。如果兩個PKI應用程序之間要想進行交互,只有相互理解對方的數據含義,交互才能正常進行,標準的作用就是提供了數據語法和語義的共同約定
1. X.509標準 PKI中最重要的標準,它定義了公鑰證書的基本結構。 X.509是國際電信聯盟-電信(ITU-T)部分標準和國際標準化組織(ISO)的證書格式標準。作為ITU-ISO目錄服務系列標準的一部分,X.509是定義了公鑰證書結構的基本標準。1988年首次發布,1993年和1996年兩次修訂。當前使用的版本是X.509 V3,它加入了擴展字段支持,這極大地增進了證書的靈活性。X.509 V3證書包括一組按預定義順序排列的強制字段,還有可選擴展字段
,即使在強制字段中,X.509證書也允許很大的靈活性,因為它為大多數字段提供了多種編碼方案。X.509 V4版已經推出。 X.509標準在PKI中起到了舉足輕重的作用,PKI由小變大,由原來網絡封閉環境到分布式開放環境,X.509起了很大作用,可以說X.509標準是PKI的雛形。PKI是在X.509標準基礎上發展起來的1) SSL公鑰證書2) 證書廢除列表CRL(Certificate revocation lists 證書黑名單)2. PKCS標準(公鑰加密標準 Public Key Cryptography Standards, PKCS) 它定義了"數據通信協議"的主要標準。這些標準定義了如何恰當地格式化私鑰或者公鑰,之所以需要定義PKCS標準,是因為證書的產生并不是在本地用的,往往需要在網絡中進行傳輸,因此需要
有一個良好的規范來定義和保證證書在網絡中的正常傳輸 http://zh.wikipedia.org/wiki/PKCS1) PKCS#7 PKCS#7是由RSA安全體系在公鑰加密系統中交換數字證書產生的一種加密標準,PKCS#7為"密碼信封封裝標準",描述了密碼操作(例如數字簽名和數字信封)的數據的通用語法。該語法允許
遞歸,例如一個數字信封可以嵌套在另一個數字信封里面,或者一個實體可以在一個已經封裝的數據上簽名。該語法同時允許添加任意屬性,比如簽名時間等。該標準和保密增強郵件(PEM)是兼容的,如果以PEM兼容形式構建,那么被簽名后的數據和簽名后又封裝的數據內容可以很容易地被轉化成PEM格式。這是一種將數據加密和簽名(enveloping)的技術標準,它描述1.1) 數字證書的語法1.2) 其他加密消息1.3) 數據加密1.4) 數字簽名的方法1.5) 也包含了算法 常見的文件后綴有:1.1) .P7B 1.2) .p7c1.3) .SPC文件中包含:1) 證書2) CRL列表信息3) 沒有私鑰(注意)2) PKCS#12 它定義了一個用于保存私鑰和對應公鑰證書的文件格式,并由對稱密鑰加密保護。PKCS#12通常采用PFX,P12作為文件擴展名。PKCS#12文件可以存放多個證書,并由密碼保護,通常用于
WINDOWS IIS,也能夠被當作Java Keysotre文件使用,用于Tomcat,Resign,Weblogic,Jboss等,不能被用于Apache.常見的文件后綴有:2.1) .PFX 2.2) .p12文件中包含: 1) 證書(公鑰)2) 私鑰(受密碼保護(可選))3) 完整的證書鏈信息3. X.500和目錄服務標準 規定了證書撤銷列表存儲
0x1:?SSL公鑰證書
1. 證書版本號(Version) 版本號指明X.509證書的格式版本,現在的值可以為:1) 0: v12) 1: v23) 2: v3 也為將來的版本進行了預定義2. 證書序列號(Serial Number) 序列號指定由CA分配給證書的唯一的"數字型標識符"。當證書被取消時,實際上是將此證書的序列號放入由CA簽發的CRL中,這也是序列號唯一的原因。3. 簽名算法標識符(Signature Algorithm) 簽名算法標識用來指定由CA簽發證書時所使用的"簽名算法"。算法標識符用來指定CA簽發證書時所使用的:1) 公開密鑰算法2) hash算法 example: sha1WithRSAEncryption 須向國際知名標準組織(如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 PublicKey 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: sha1WithRSAEncryption12. 簽名值(Issuer's Signature) 證書簽發機構對證書上述內容的簽名值
example:
Certificate: Data: Version: 3 (0x2) Serial Number:b7:90:fc:87:f2:27:ec:1e Signature Algorithm: sha1WithRSAEncryption Issuer: C=ZH, ST=JS, L=WX, O=JN, OU=IOT, CN=LittleHann/emailAddress=306211321@qq.com ValidityNot Before: May 7 05:25:14 2014 GMTNot After : May 4 05:25:14 2024 GMT Subject: C=ZH, ST=JS, L=WX, O=JN, OU=IOT, CN=LittleHann/emailAddress=306211321@qq.com Subject Public Key Info:Public Key Algorithm: rsaEncryptionRSA Public Key: (1024 bit)Modulus (1024 bit):00:c3:f2:9b:b8:20:3f:9e:c0:be:1d:18:a8:64:c0:47:79:71:bb:32:2e:63:43:af:da:01:bc:f3:f5:74:f8:29:4d:a8:ad:68:30:a4:bf:0a:42:71:8d:5f:58:c0:b1:97:a2:ae:e7:be:1e:6a:a7:d8:4a:14:f1:8f:67:f4:b3:64:45:88:a6:fa:ed:8f:9a:49:20:33:ca:dc:15:22:39:d9:40:02:1c:5f:4f:5b:1d:2c:ca:3d:30:8b:bc:07:0b:0f:58:03:6f:52:c7:0b:c4:54:59:cc:12:2a:4b:23:c6:98:fe:d3:80:a9:3f:d9:c0:1f:36:47:25:5a:72:fe:88:94:81Exponent: 65537 (0x10001) X509v3 extensions:X509v3 Subject Key Identifier: 88:11:74:9F:7C:12:9C:92:FD:81:33:18:D0:2C:04:64:0F:00:1D:64X509v3 Authority Key Identifier: keyid:88:11:74:9F:7C:12:9C:92:FD:81:33:18:D0:2C:04:64:0F:00:1D:64DirName:/C=ZH/ST=JS/L=WX/O=JN/OU=IOT/CN=LittleHann/emailAddress=306211321@qq.comserial:B7:90:FC:87:F2:27:EC:1EX509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha1WithRSAEncryption a1:6b:be:44:ba:2c:6f:88:c4:15:2d:27:0d:d7:60:0a:6a:c4: 6d:6f:1c:83:b4:0f:af:af:be:f9:f1:3e:9c:1b:d7:0a:e2:7b: 2b:70:96:d5:7e:90:51:1a:01:a3:36:7f:c3:2a:06:7a:f5:b1: dd:c9:c5:fc:f1:98:f6:45:f6:40:ce:8a:93:4a:4e:1d:8f:9e: 2c:9f:8a:5c:d5:72:5a:0a:3e:f5:96:4b:2f:3d:ae:bf:55:50: 99:14:4a:63:34:43:41:5a:41:6e:b1:ec:7f:9d:4b:f6:d8:18: ee:7a:10:5a:bc:d6:4b:5b:c4:0d:15:e3:23:cb:b2:63:03:62: 48:af0x2:?證書廢除列表CRL
證書廢除列表CRL(Certificate revocation lists)為應用程序和其它系統提供了一種檢驗證書有效性的方式。任何一個證書廢除以后,證書機構CA會通過發布CRL的方式來通知各個相關方
1. CRL的版本號1) 0: 表示X.509 V1 標準2) 1: 表示X.509 V2 標準3) 2: 表示X.509 V3標準 目前常用的是V3標準2. 簽名算法:包含:1) 算法標識2) 算法參數 用于指定證書簽發機構用來對CRL內容進行簽名的算法。3. 證書簽發機構名:簽發機構的DN名,由1) 國家(C)2) 省市(ST)3) 地區(L)4) 組織機構(O)5) 單位部門(OU)6) 通用名(CN)7) 郵箱地址4. 此次簽發時間:此次CRL簽發時間,遵循ITU-T X.509 V2標準的CA在2049年之前把這個域編碼為UTCTime類型,在2050或2050年之后年之前把這個域編碼為GeneralizedTime類型。5. 下次簽發時間:下次CRL簽發時間,遵循ITU-T X.509 V2標準的CA在2049年之前把這個域編碼為UTCTime類型,在2050或2050年之后年之前把這個域編碼為GeneralizedTime類型。6. 用戶公鑰信息,其中包括:1) 廢除的證書序列號: 要廢除的由同一個CA簽發的證書的一個唯一標識號,同一機構簽發的證書不會有相同的序列號2) 證書廢除時間 7. 簽名算法:對CRL內容進行簽名的簽名算法。8. 簽名值:證書簽發機構對CRL內容的簽名值。example:
Certificate Request:Data:Version: 0 (0x0)Subject: C=zh, ST=wx, L=js, O=jn, OU=iot, CN=littleHANN/emailAddress=306211321@qq.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionRSA Public Key: (2048 bit)Modulus (2048 bit):00:be:2c:a4:fc:9f:f7:b3:2a:6b:c8:2f:ec:8d:59:ba:12:ed:8e:c1:82:e0:6b:5d:12:99:ff:a1:54:3f:64:d5:31:7f:26:b6:70:95:a7:1e:7f:89:77:3b:c9:cd:00:7c:9a:cc:32:c9:2f:56:f5:36:8d:2b:65:d9:73:0c:a8:6f:03:46:1e:97:76:66:5c:93:a4:2c:00:99:0e:b0:38:e5:43:22:ae:6e:c6:0c:f7:b5:ef:59:9b:c8:d3:af:5a:35:9b:78:1d:e3:bd:c5:7e:08:9e:fc:de:73:fd:2a:fc:f6:11:97:ca:60:30:f4:37:0f:e7:d6:b7:36:d4:84:3e:e2:81:02:27:24:96:16:6d:da:97:7c:d9:bf:5b:79:51:f1:ba:4e:e9:17:44:1e:7c:fe:2d:b3:ec:62:34:2b:4d:ce:84:49:9f:0a:ec:1e:fe:ee:69:60:e5:14:73:cd:8f:3d:75:d7:d9:c5:b3:dc:c6:d7:d2:df:e6:ba:3a:a3:da:97:dd:24:cf:6b:e4:00:df:64:13:22:da:25:e2:4b:47:d3:12:39:60:0e:ab:a3:bc:54:c9:c3:36:80:9d:e5:f0:be:83:d4:b5:d4:73:70:15:42:6e:74:04:06:ab:12:3e:02:45:1f:02:20:79:fd:b5:00:48:b1:78:f0:a7:76:a5:94:2fExponent: 65537 (0x10001)Attributes:a0:00Signature Algorithm: sha1WithRSAEncryption82:1a:93:02:7d:42:02:91:7f:59:31:75:84:49:8a:d4:4a:90:ec:ad:c9:f7:3b:75:68:23:f4:d0:9b:de:ab:0e:4e:60:7c:46:be:26:35:38:68:6b:1e:d0:61:19:86:b2:b6:a6:94:5e:8a:c1:90:01:63:df:a7:c2:b0:79:75:bd:01:72:30:9a:08:21:83:82:51:e7:79:07:7b:c8:27:9d:fa:5d:38:89:3a:97:87:87:21:65:a7:00:3d:4b:c6:2f:ac:0c:45:57:8c:1a:bd:89:78:2b:7a:00:4d:48:09:c5:55:22:9e:92:6b:f9:c8:dd:8f:de:5c:61:c7:3d:20:6a:a3:6b:e5:32:00:2f:dd:68:d8:a5:66:be:19:fb:95:e1:e2:cc:18:1e:96:2e:e5:2f:58:d9:4c:f8:d5:92:1d:34:ed:79:52:a2:3d:02:2e:58:2f:86:d3:29:b7:5c:66:27:25:61:d3:0e:5e:86:77:12:0f:4f:12:3c:bf:95:85:5c:b7:77:05:11:9e:bb:06:ac:f8:cc:c3:42:84:f7:a7:84:b3:6c:fe:fe:66:92:31:32:dc:47:8d:a2:04:e0:2e:43:74:de:9f:03:c6:7e:f0:90:1d:0f:8a:f3:bc:5c:2c:5c:0b:db:d9:7d:69:05:31:a9:13:f4:18:1f:7d:69:f4:26?
3. SSL證書生成、openSSL學習?
OpenSSL是一個強大的安全套接字層密碼庫,整個軟件包大概可以分成三個主要的功能部分
1. 密碼算法庫 2. 常用的密鑰和證書封裝管理功能 3. SSL通信API接口 4. 豐富的應用程序供測試或其它目的使用使用openSSL開發套件,我們可以完成以下功能
1. 建立 RSA、DH、DSA key 參數 2. 建立 X.509 證書、證書簽名請求(CSR)和CRLs(證書回收列表) 3. 計算消息摘要 4. 使用各種 Cipher加密/解密 5. SSL/TLS 客戶端以及服務器的測試 6. 處理S/MIME 或者加密郵件openssl提供了很多不同的命令,每個子命令有很多的選項和參數,我們來逐一學習一下
1. openssl list-standard-commands(標準命令)1) asn1parse: asn1parse用于解釋用ANS.1語法書寫的語句(ASN一般用于定義語法的構成) 2) ca: ca用于CA的管理 openssl ca [options]:2.1) -selfsign使用對證書請求進行簽名的密鑰對來簽發證書。即"自簽名",這種情況發生在生成證書的客戶端、簽發證書的CA都是同一臺機器(也是我們大多數實驗中的情況),我們可以使用同一個密鑰對來進行"自簽名"2.2) -in file需要進行處理的PEM格式的證書2.3) -out file處理結束后輸出的證書文件2.4) -cert file用于簽發的根CA證書2.5) -days arg 指定簽發的證書的有效時間2.6) -keyfile arg CA的私鑰證書文件2.7) -keyform argCA的根私鑰證書文件格式:2.7.1) PEM2.7.2) ENGINE 2.8) -key arg CA的根私鑰證書文件的解密密碼(如果加密了的話)2.9) -config file 配置文件example1: 利用CA證書簽署請求證書openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key 3) req: X.509證書簽發請求(CSR)管理openssl req [options] <infile >outfile3.1) -inform arg輸入文件格式3.1.1) DER3.1.2) PEM3.2) -outform arg 輸出文件格式3.2.1) DER3.2.2) PEM3.3) -in arg待處理文件3.4) -out arg待輸出文件3.5) -passin 用于簽名待生成的請求證書的私鑰文件的解密密碼3.6) -key file用于簽名待生成的請求證書的私鑰文件3.7) -keyform arg 3.7.1) DER3.7.2) NET3.7.3) PEM3.8) -new新的請求3.9) -x509 輸出一個X509格式的證書 3.10) -daysX509證書的有效時間 3.11) -newkey rsa:bits 生成一個bits長度的RSA私鑰文件,用于簽發 3.12) -[digest]HASH算法3.12.1) md53.12.2) sha13.12.3) md23.12.4) mdc23.12.5) md43.13) -config file 指定openssl配置文件3.14) -text: text顯示格式example1: 利用CA的RSA密鑰創建一個自簽署的CA證書(X.509結構) openssl req -new -x509 -days 3650 -key server.key -out ca.crt example2: 用server.key生成證書簽署請求CSR(這個CSR用于之外發送待CA中心等待簽發)openssl req -new -key server.key -out server.csrexample3: 查看CSR的細節openssl req -noout -text -in server.csr4) genrsa: 生成RSA參數openssl genrsa [args] [numbits][args]4.1) 對生成的私鑰文件是否要使用加密算法進行對稱加密:4.1.1) -des: CBC模式的DES加密4.1.2) -des3: CBC模式的3DES加密4.1.3) -aes128: CBC模式的AES128加密4.1.4) -aes192: CBC模式的AES192加密4.1.5) -aes256: CBC模式的AES256加密4.2) -passout arg: arg為對稱加密(des、3des、aes)的密碼(使用這個參數就省去了console交互提示輸入密碼的環節)4.3) -out file: 輸出證書私鑰文件[numbits]: 密鑰長度example: 生成一個1024位的RSA私鑰,并用3DES加密(密碼為1111),保存為server.key文件openssl genrsa -out server.key -passout pass:1111 -des3 1024 5) rsa: RSA數據管理openssl rsa [options] <infile >outfile5.1) -inform arg輸入密鑰文件格式:5.1.1) DER(ASN1)5.1.2) NET5.1.3) PEM(base64編碼格式)5.2) -outform arg輸出密鑰文件格式5.2.1) DER5.2.2) NET5.2.3) PEM5.3) -in arg待處理密鑰文件 5.4) -passin arg輸入這個加密密鑰文件的解密密鑰(如果在生成這個密鑰文件的時候,選擇了加密算法了的話)5.5) -out arg待輸出密鑰文件5.6) -passout arg 如果希望輸出的密鑰文件繼續使用加密算法的話則指定密碼 5.7) -des: CBC模式的DES加密5.8) -des3: CBC模式的3DES加密5.9) -aes128: CBC模式的AES128加密5.10) -aes192: CBC模式的AES192加密5.11) -aes256: CBC模式的AES256加密5.12) -text: 以text形式打印密鑰key數據 5.13) -noout: 不打印密鑰key數據 5.14) -pubin: 檢查待處理文件是否為公鑰文件5.15) -pubout: 輸出公鑰文件example1: 對私鑰文件進行解密openssl rsa -in server.key -passin pass:111 -out server_nopass.keyexample:2: 利用私鑰文件生成對應的公鑰文件openssl rsa -in server.key -passin pass:111 -pubout -out server_public.key6) x509:本指令是一個功能很豐富的證書處理工具。可以用來顯示證書的內容,轉換其格式,給CSR簽名等X.509證書的管理工作openssl x509 [args] 6.1) -inform arg待處理X509證書文件格式6.1.1) DER6.1.2) NET6.1.3) PEM6.2) -outform arg 待輸出X509證書文件格式6.2.1) DER6.2.2) NET6.2.3) PEM6.3) -in arg 待處理X509證書文件6.4) -out arg 待輸出X509證書文件6.5) -req 表明輸入文件是一個"請求簽發證書文件(CSR)",等待進行簽發 6.6) -days arg 表明將要簽發的證書的有效時間 6.7) -CA arg 指定用于簽發請求證書的根CA證書 6.8) -CAform arg 根CA證書格式(默認是PEM) 6.9) -CAkey arg 指定用于簽發請求證書的CA私鑰證書文件,如果這個option沒有參數輸入,那么缺省認為私有密鑰在CA證書文件里有6.10) -CAkeyform arg 指定根CA私鑰證書文件格式(默認為PEM格式)6.11) -CAserial arg 指定序列號文件(serial number file)6.12) -CAcreateserial 如果序列號文件(serial number file)沒有指定,則自動創建它 example1: 轉換DER證書為PEM格式openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pemexample2: 使用根CA證書對"請求簽發證書"進行簽發,生成x509格式證書openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crtexample3: 打印出證書的內容openssl x509 -in server.crt -noout -text 7) crl: crl是用于管理CRL列表 openssl crl [args]7.1) -inform arg輸入文件的格式7.1.1) DER(DER編碼的CRL對象)7.1.2) PEM(默認的格式)(base64編碼的CRL對象)7.2) -outform arg指定文件的輸出格式 7.2.1) DER(DER編碼的CRL對象)7.2.2) PEM(默認的格式)(base64編碼的CRL對象)7.3) -text: 以文本格式來打印CRL信息值。7.4) -in filename指定的輸入文件名。默認為標準輸入。7.5) -out filename指定的輸出文件名。默認為標準輸出。7.6) -hash輸出頒發者信息值的哈希值。這一項可用于在文件中根據頒發者信息值的哈希值來查詢CRL對象。7.7) -fingerprint打印CRL對象的標識。7.8) -issuer輸出頒發者的信息值。7.9) -lastupdate輸出上一次更新的時間。7.10) -nextupdate打印出下一次更新的時間。 7.11) -CAfile file指定CA文件,用來驗證該CRL對象是否合法。 7.12) -verify是否驗證證書。 example1: 輸出CRL文件,包括(頒發者信息HASH值、上一次更新的時間、下一次更新的時間)openssl crl -in crl.crl -text -issuer -hash -lastupdate –nextupdate example2: 將PEM格式的CRL文件轉換為DER格式openssl crl -in crl.pem -outform DER -out crl.der 8) crl2pkcs7: 用于CRL和PKCS#7之間的轉換 openssl crl2pkcs7 [options] <infile >outfile轉換pem到spcopenssl crl2pkcs7 -nocrl -certfile venus.pem -outform DER -out venus.spchttps://www.openssl.org/docs/apps/crl2pkcs7.html9) pkcs12: PKCS#12數據的管理pkcs12文件工具,能生成和分析pkcs12文件。PKCS#12文件可以被用于多個項目,例如包含Netscape、 MSIE 和 MS Outlookopenssl pkcs12 [options] http://blog.csdn.net/as3luyuan123/article/details/16105475https://www.openssl.org/docs/apps/pkcs12.html10) pkcs7: PCKS#7數據的管理 用于處理DER或者PEM格式的pkcs#7文件openssl pkcs7 [options] <infile >outfilehttp://blog.csdn.net/as3luyuan123/article/details/16105407https://www.openssl.org/docs/apps/pkcs7.html2. openssl list-message-digest-commands(消息摘要命令)1) dgst: dgst用于計算消息摘要 openssl dgst [args]1.1) -hex 以16進制形式輸出摘要1.2) -binary 以二進制形式輸出摘要1.3) -sign file 以私鑰文件對生成的摘要進行簽名1.4) -verify file 使用公鑰文件對私鑰簽名過的摘要文件進行驗證 1.5) -prverify file 以私鑰文件對公鑰簽名過的摘要文件進行驗證verify a signature using private key in file1.6) 加密處理1.6.1) -md5: MD5 1.6.2) -md4: MD4 1.6.3) -sha1: SHA1 1.6.4) -ripemd160example1: 用SHA1算法計算文件file.txt的哈西值,輸出到stdoutopenssl dgst -sha1 file.txtexample2: 用dss1算法驗證file.txt的數字簽名dsasign.bin,驗證的private key為DSA算法產生的文件dsakey.pemopenssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt2) sha1: 用于進行RSA處理openssl sha1 [args] 2.1) -sign file用于RSA算法的私鑰文件 2.2) -out file輸出文件愛你2.3) -hex 以16進制形式輸出2.4) -binary以二進制形式輸出 example1: 用SHA1算法計算文件file.txt的HASH值,輸出到文件digest.txtopenssl sha1 -out digest.txt file.txtexample2: 用sha1算法為文件file.txt簽名,輸出到文件rsasign.bin,簽名的private key為RSA算法產生的文件rsaprivate.pemopenssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt3. openssl list-cipher-commands (Cipher命令的列表)1) aes-128-cbc2) aes-128-ecb3) aes-192-cbc4) aes-192-ecb5) aes-256-cbc6) aes-256-ecb7) base648) bf9) bf-cbc10) bf-cfb11) bf-ecb12) bf-ofb13) cast14) cast-cbc15) cast5-cbc16) cast5-cfb17) cast5-ecb18) cast5-ofb19) des20) des-cbc21) des-cfb22) des-ecb23) des-ede24) des-ede-cbc25) des-ede-cfb26) des-ede-ofb27) des-ede328) des-ede3-cbc29) des-ede3-cfb30) des-ede3-ofb31) des-ofb32) des333) desx34) rc235) rc2-40-cbc36) rc2-64-cbc37) rc2-cbc38) rc2-cfb39) rc2-ecb40) rc2-ofb41) rc442) rc4-40
?
?
4. CA中心搭建、SSL證書生成過程
我們知道,用openSSL這個套件可以完成CA的搭建、SSL證書從生成到簽發的全部過程,在使用openssl的指令的時候,我們需要記住幾點:
1. 在生成過程中有很多文件擴展名(.crt、.csr、.pem、.key等等),從本質上講,擴展名并不具有任何強制約束作用,重要的是這個文件是由哪個命令生成的,它的內容是什么格式的。使用這些特定的文件擴展名只是為了遵循某些約定俗稱的規范,讓人能一目了然。2. openssl的指令之間具有一些功能上的重疊,所以我們會發現完成同樣一個目的(例如SSL證書生成),往往可以使用看似不同的指令組達到目的3. 理解CA、SSL證書最重要的不是記住這些openssl指令,而是要理解CA的運行機制,同時理解openssl指令的功能,從原理上去理解整個流程,就不會覺得模糊了
下面我們來一起學習一下怎么用openssl來完成一個CA的功能,并且簽發一個apache可以使用的SSL證書
0x1: CA認證中心準備
我們首先要明白,要進行一個證書的簽發工作,第一步要做的就是進行CA認證中心的準備工作,CA負責對請求證書(CSR)進行簽名,有兩種選擇
1. 選擇市場上公認的權威性的CA中心
1. WebTrust http://www.webtrust.net/2. GlobalSign http://cn.globalsign.com/ http://globalsign.tbs-certificats.com/3. GTE http://certificate.fyicenter.com/335_Root_CA_GTE_CyberTrust_Global_Root_GTE_CyberTrust_Solutions.html4. Nortel http://www.nortel.com/5. Verisign http://www.verisign.com/選擇權威的CA進行證書簽發的好處就是目前大多數的瀏覽器都會預裝內置了這些權威CA的公鑰證書,這樣,在使用這些權威CA簽發過的證書的時候,瀏覽器一般不會報風險提示
相反,如果我們的證書的簽發機構不是一個權威機構,瀏覽器在訪問的時候就會報風險提示
2. 本機搭建CA認證中心
我們同樣可以使用openssl在本機搭建CA認證中心
/* 1. 建立CA目錄結構 按照OpenSSL的默認配置建立CA,需要在文件系統中建立相應的目錄結構。相關的配置內容一般位于/usr/ssl/openssl.cnf內 -- demoCA/|-- index.txt|-- newcerts/|-- private/|-- serial 2. 生成CA證書的RSA密鑰對 我們知道,要利用公鑰機制,必要需要先建立密鑰文件 3. 生成CA證書請求 4. 對CA證書請求進行自簽名 (3、4兩步可以合并執行) */ mkdir -p ./demoCA/{private,newcerts} touch ./demoCA/index.txt echo 01 > ./demoCA/serial cp /usr/lib/ssl/openssl.cnf ./ openssl genrsa -out ./demoCA/private/cakey.pem 2048 openssl req -new -days 365 -key ./demoCA/private/cakey.pem -out careq.pem ..按照提示填寫申請者身份信息.. //openssl中有些指令可以為一條指令(3、4步驟可以合并到以下一步完成) openssl req -new -x509 -days 365 -key ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem0x2: 服務端證書準備
要配置apache的SSL通信,需要為apache配置服務端的"服務器根證書"
/* 1. 生成服務端證書的RSA密鑰對 和根CA一樣,生成服務端證書同樣也是使用RSA機制,自然也需要為服務端生成一個RSA私鑰文件(但不能和CA的一樣) 2. 生成服務端證書請求 4. 查看剛才生成的請求簽發證書 3. 使用CA根書對"服務端請求簽發證書文件"進行簽名 */ openssl genrsa -out serverkey.pem openssl req -new -days 3650 -key serverkey.pem -out serverreq.pem ..填寫證書申請者的身份信息..(common name不能為空,申請證書的countryName必須和CA的countryName相同) openssl req -noout -text -in serverreq.pem openssl ca -in serverreq.pem -out servercert.pem -config openssl.cnf (如果在簽發的時候遇到異常,記得到openssl.cnf配置文件中查看是否是配置項出了問題)0x3: 配置apache的SSL證書
http://www.metsky.com/archives/561.html /* 1. 加載SSL模塊 2. 配置apache的ports.conf文件 3. 設置site-enabled 4. 修改配置文件 5. 重啟APACHE */ sudo a2enmod ssl 這條命令相當于 sudo ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled 如果沒有a2enmod指令,也可直接在apache2.conf中設置SSL模塊加載: LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.sovim /etc/apache2/ports.conf 加入443端口 Listen 443ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/001-sslvim /etc/apache2/sites-enabled/001-ssl 把端口改為443,在<Virtualhost>下加入SSL認證配置,其它的根據需要自己定制 與普通配置無異 NameVirtualHost *:443 <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/apache2/ssl/servercert.pemSSLCertificateKeyFile /etc/apache2/ssl/server.key ServerAdmin webmaster@localhost DocumentRoot /var/www ServerName myServerName <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/> Options FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place #RedirectMatch ^/$ /apache2-default/ </Directory>
</VirtualHost>
cd /etc/apache2/ssl/
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out servercert.pem
/etc/init.d/apache2 restart
0x4: 配置客戶端的SSL證書
客戶端證書并不一定需要,只有在服務端配置了一個"驗證客戶端選項"的時候,才需要配置客戶端證書,在大多數情況下都不需要客戶端證書整個CA架構如下圖所示
?
Copyright (c) 2014 LittleHann All rights reserved
?
轉載于:https://www.cnblogs.com/LittleHann/p/3738141.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的openSSL命令、PKI、CA、SSL证书原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么叫「人的格局」?是否有必要培养大的格
- 下一篇: PageRank算法简介及Map-Red