一、前言
什么是openssl?講openssl之前我們先了解一下什么是ssl?ssl是secure socket layer的簡稱,其使用對稱加密,非對稱加密(公鑰加密解密),單向加密解密結合證書實現數據傳輸安全,openssl默認是在系統安裝時就已經安裝上去的。隨著互聯網的迅速發展,網絡通信已經成為傳遞信息的主要途徑。而通信時的數據傳輸大部分都是明文傳輸的,在網絡不安全的環境下,如果沒有一套數據加密機制,就會導致敏感信息和重要數據泄漏,從而引起不可估計的損失。而Openssl正好彌補了這一缺陷,那什么是OpenSSL呢?OpenSSL是一套強大的具有加密功能的組件,它包含libcrypto(公共加密庫)、libssl(SSL協議的實現)和Openssl(多功能命令工具),因其開源思想,現已廣泛應用與數據通信加密領域。Openssl還可以在局域網內構建私有CA,實現局域網內的證書認證和授權,保證數據傳輸的安全性。具體怎么實現,請看之后的演示。
在電子商務沒有出現之前,我們基本上通過面對面的錢權交易,不存在加密解密問題;隨著電子商務的興起,我們現在很多的交易都是在互聯網上完成的,銀行轉賬,網上購物等等。早期的各種傳輸軟件都沒有考慮到安全的問題,都是以明文進行傳輸,信息被別人竊取,篡改等等;因此有很多群體靠網絡發家??!犯罪??!但是網絡交易確實給我們的生活帶來了極大的方便,怎么解決這個問題呢;美國NIST,為了保證計算機的安全,提出了幾個要求:
1、數據要有保密性:數據保密性和隱私性;確保信息不被別人獲取,個人存儲的信息不能被別人收集到;
2、完整性:包括數據完整性和系統完整性;數據完整性確保數據和程序只能以特定權限的進行授權和改變,只能授權之后才能改變或者被改變;確保系統以一種正常的方式執行預定的功能,不會因別人的介入改變方向;
3、可用性,工作迅速,可正常使用的情況并獲取到信息;
二、基本概念
加密:我們將文字轉換成不能直接閱讀的形式(即密文)的過程稱為加密。數據加密的基本過程就是對原來為明文的文件或數據按某種算法進行處理,使其成為不可讀的一段代碼,通常稱為"密文",使其只能在輸入相應的密鑰之后才能顯示出本來內容,通過這樣的途徑來達到保護數據不被非法人竊取、閱讀的目的。
解密:我們將密文轉換成能夠直接閱讀的文字(即明文)的過程稱為解密。
大多數計算機加密系統都屬于以下兩種類型之一:"對稱式"和"非對稱式"。
對稱加密:采用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。需要對加密和解密使用相同密鑰的加密算法。由于其速度快,對稱性加密通常在消息發送方需要加密大量數據時使用。對稱性加密也稱為密鑰加密。
常用的對稱加密:DES、3DES、AES、DH
因為對稱式的加密方法如果是在網絡上傳輸加密文件就很難把密鑰告訴對方,不管用什么方法都有可能被別竊聽到。且通信方如果比較多,秘鑰過多,不便于管理,密鑰傳輸和交換難以實現;因此產生了公鑰加密(也叫非對稱加密):
非對稱式加密就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為"公鑰"和"私鑰",它們兩個必需配對使用,否則不能打開加密文件。這里的"公鑰"是指可以對外公布的,"私鑰"則不能,只能由持有人一個人知道。"公鑰"是可以公開的,也就不怕別人知道,收件人解密時只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問題。
常用加密算法:RSA, DSA, EIGamal ;RSA:身份認證和加密;DSA:身份認證
單向加密 又稱數據完整性校驗加密方式,可以利用算法計算數據指紋信息,此種方式得出的數據指紋信息具有定長和雪崩效應(數據中的微小變化將會導致數據指紋信息的巨大變化)的特性,常用來實現數據完整性的驗證。
公鑰私鑰的原則:
1. 一個公鑰對應一個私鑰。
2. 密鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。
3. 如果用其中一個密鑰加密數據,則只有對應的那個密鑰才可以解密。
4. 如果用其中一個密鑰可以進行解密數據,則該數據必然是對應的那個密鑰進行的加密。
三、加密傳輸原理
加密的各種算法只是對文件進行了加密,可是如何讓其能在網絡上進行安全的傳輸,而不被竊聽,篡改呢?
用電子郵件的方式說明一下原理。
使用公鑰與私鑰的目的就是實現安全的電子郵件,必須實現如下目的:
1. 我發送給你的內容必須加密,在郵件的傳輸過程中不能被別人看到。
2. 必須保證是我發送的郵件,不是別人冒充我的。
要達到這樣的目標必須發送郵件的兩人都有公鑰和私鑰。
公鑰,就是給大家用的,你可以通過電子郵件發布,可以通過網站讓別人下載,公鑰其實是用來加密/驗章用的。私鑰,就是自己的,必須非常小心保存,最好加上 密碼,私鑰是用來解密/簽章,首先就Key的所有權來說,私鑰只有個人擁有。公鑰與私鑰的作用是:用公鑰加密的內容只能用私鑰解密,用私鑰加密的內容只能 用公鑰解密。
隨著計算機網絡技術的迅速發展和信息化建設的大力推廣,越來越多的傳統辦公和業務處理模式開始走向電子化和網絡化,從而極大地提高了效率、節約了成本。與傳統的面對面的手工處理方式相比,基于網絡的電子化業務處理系統必須解決以下問題:
1如何在網絡上識別用戶的真實身份;
2如何保證網絡上傳送的業務數據不被篡改;
3如何保證網絡上傳送的業務數據的機密性;
4如何使網絡上的用戶行為不可否認;———-如我們網上購物,東西到了,我們不承認,商家將遭受損失;
例如: 假設用戶甲要寄信給用戶乙,他們互相知道對方的公鑰。甲就用乙的公鑰加密郵件寄出,乙收到后就可以用自己的私鑰解密出甲的原文。由于別人不知道乙的私鑰,所以即使是甲本人也無法解密那封信,這就解決了信件保密的問題。另一方面,由于每個人都知道乙的公鑰,他們都可以給乙發信,那么乙怎么確信是不是甲的來信呢?那就要用到基于加密技術的數字簽名了。
基于公開密鑰算法的數字簽名技術和加密技術,為解決上述問題提供了理論依據和技術可行性;同時,《中華人民共和國電子簽名法》的頒布和實施為數字簽名的使用提供了法律依據,使得數字簽名與傳統的手工簽字和蓋章具有了同等的法律效力。
PKI(Public Key Infrastructure)是使用公開密鑰密碼技術來提供和實施安全服務的基礎設施,其中CA(Certificate Authority)系統是PKI體系的核心,主要實現數字證書的發放和密鑰管理等功能。數字證書由權威公正的CA中心簽發,是網絡用戶的身份證明。使用數字證書,結合數字簽名、數字信封等密碼技術,可以實現對網上用戶的身份認證,保障網上信息傳送的真實性、完整性、保密性和不可否認性。
數字證書目前已廣泛應用于安全電子郵件、網上商城、網上辦公、網上簽約、網上銀行、網上證券、網上稅務等行業和業務領域。
數字證書是一種數字標識,如同我們的身份證一樣,是網絡上的身份證明,它是由證書授權機構(CA)簽名頒發的數字文件,該簽名使得第三者不能偽造和篡改證書。
數字證書: 數字證書為實現雙方安全通信提供了電子認證。在因特網、公司內部網或外部網中,使用數字證書實現身份識別和電子信息加密。數字證書中含有密鑰對(公鑰和私鑰)所有者的識別信息,通過驗證識別信息的真偽實現對證書持有者身份的認證。
ITU-T的X..509國際標準定義了數字證書的格式,目前X .509v3數字證書的主要內容如圖:
注冊授權服務器(RA) :負責定期從數據庫中提取已審核通過的證書申請/更新/作廢信息,按既定格式打包提交到CA服務器,并接收和記錄返回的結果。
證書簽發服務器(CA):負責密鑰對(公私鑰對)的產生,可采用軟件方式或硬件方式(加密機);接收RA服務器的請求,簽發/更新/作廢用戶證書;定期簽發CRL(證書撤銷列表)。
CA是證書的簽發機構,它是PKI的核心。CA是負責簽發證書、認證證書、管理已頒發證書的機關。它要制定政策和具體步驟來驗證、識別用戶身份,并對用戶證書進行簽名,以確保證書持有者的身份和公鑰的擁有權。
CA 也擁有一個證書(內含公鑰)和私鑰。網上的公眾用戶通過驗證 CA 的簽字從而信任 CA ,任何人都可以得到 CA 的證書(含公鑰),用以驗證它所簽發的證書。
如果用戶想得到一份屬于自己的證書,他應先向 CA 提出申請。在 CA 判明申請者的身份后,便為他分配一個公鑰,并且 CA 將該公鑰與申請者的身份信息綁在一起,并為之簽字后,便形成證書發給申請者。
如果一個用戶想鑒別另一個證書的真偽,他就用 CA 的公鑰對那個證書上的簽字進行驗證,一旦驗證通過,該證書就被認為是有效的。
使用數字證書能做什么?
數字證書在用戶公鑰后附加了用戶信息及CA的簽名。公鑰是密鑰對的一部分,另一部分是私鑰。公鑰公之于眾,誰都可以使用。私鑰只有自己知道。由公鑰加密的信息只能由與之相對應的私鑰解密。為確保只有某個人才能閱讀自己的信件,發送者要用收件人的公鑰加密信件;收件人便可用自己的私鑰解密信件。同樣,為證實發件人的身份,發送者要用自己的私鑰對信件進行簽名;收件人可使用發送者的公鑰對簽名進行驗證,以確認發送者的身份。如此我們便可以安全的在網上進行各種交易,接下來我們實踐操作一下此過程的實現。
四、Openssl 基本使用方法
1、OpenSSL 是一個強大的安全套接字層密碼庫, 在應用層和傳輸層之間加了一個半層,基于套接字傳輸時專用的;所以不是對所有的數據進行加密;Appache使用它加密HTTPS,http(80/tcp)->ssl—>https(443/tcp):兩個完全不同的協議;OpenSSH使用它加密SSH,它不止是一個庫,而且還是一個多用途、跨平臺的密碼加密工具。整個軟件包有三部份構成:
密碼算法庫(7種分組加密算法、RC4的流加密算法)
SSL 協議庫(SSLv2,v3、TLSv2,v3)
應用程序(密碼生成、證書管理、格式轉換、數據加密簽名)
2、openssl基本用法
#查看是否安裝; [root@zabbix ~]# rpm -ql openssl /etc/pki/CA #所有CA服務器相關內容的默認存儲位置(此路徑在主配置文件中定義) /etc/pki/CA/certs #證書存放位置 /etc/pki/CA/crl #已吊銷證書存放路徑 /etc/pki/CA/newcerts #新證書存放路徑 /etc/pki/CA/private #根證書私鑰存放路徑 /etc/pki/tls /etc/pki/tls/certs /etc/pki/tls/certs/Makefile /etc/pki/tls/certs/make-dummy-cert /etc/pki/tls/certs/renew-dummy-cert /etc/pki/tls/misc /etc/pki/tls/misc/CA /etc/pki/tls/misc/c_hash /etc/pki/tls/misc/c_info /etc/pki/tls/misc/c_issuer /etc/pki/tls/misc/c_name /etc/pki/tls/openssl.cnf #主配置文件 /etc/pki/tls/private /usr/bin/openssl #二進制運行程序 /usr/lib64/.libcrypto.so.1.0.1e.hmac #公共加密庫 /usr/lib64/.libcrypto.so.10.hmac #公共加密庫 /usr/lib64/.libssl.so.1.0.1e.hmac #ssl協議實現共享庫 /usr/lib64/.libssl.so.10.hmac #ssl協議實現共享庫 /usr/lib64/libcrypto.so.1.0.1e #公共加密庫 /usr/lib64/libcrypto.so.10 #公共加密庫 /usr/lib64/libssl.so.1.0.1e #ssl協議實現共享庫 /usr/lib64/libssl.so.10 #ssl協議實現共享庫 /usr/lib64/openssl /usr/lib64/openssl/engines [root@zabbix ~]# openssl ? #可以顯示幫助信息 openssl:Error: '?' is an invalid command. Standard commands asn1parse ca #CA證書相關子命令 ciphers cms crl#吊銷證書相關操作 crl2pkcs7 dgst#提取特征碼命令 dh dhparam dsa dsaparam ec ecparam enc engine errstr gendh gendsa genpkey genrsa#生成私鑰 nseq ocsp passwd#用戶密碼加密 pkcs12 pkcs7 pkcs8 pkey pkeyparam pkeyutl prime rand#字符串隨機生成 req#證書申請相關操作 rsa#提取公鑰 rsautl s_client s_server s_time sess_id smime speed#測試算法的加密性能 spkac ts verify version#查看openssl版本 x509#指定證書類型 Message Digest commands (see the `dgst' command for more details) md2 md4 md5 rmd160 sha sha1 ##通過openssl dgst來調用上面的算法,完成單向加密,提取數據指紋信息 Cipher commands (see the `enc' command for more details) aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx idea idea-cbc idea-cfb idea-ecb idea-ofb rc2 rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 seed seed-cbc seed-cfb seed-ecb seed-ofb zlib ##通過openssl enc字母令指定上面的加密算法來執行加密解密操作 #查看openssl的版本 [root@zabbix ~]# openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 #對稱加密 openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id] -e:指定為加密,可以不寫默認為加密 -des3:指定加密算法 -salt:默認設置,生成一段字符串放在密碼最前面進行加密,提高加密難度。 (加點鹽) -a:基于base64處理數據。加密結果進行base64編碼處理 -in:讀取那個文件進行加密 -out:輸出到那里 -d:指定為解密 例如: [root@zabbix tmp]# openssl enc -e -des3 -a -salt -in /etc/fstab -out /u01/tmp/fstab.her enter des-ede3-cbc encryption password: #輸入密碼 Verifying - enter des-ede3-cbc encryption password: #再次輸入 [root@zabbix tmp]# ll -rw-r--r-- 1 root root 1118 Dec 30 11:32 fstab.her [root@zabbix tmp]# cat fstab.her U2FsdGVkX18OoBR7PjBbWlafsIKQ1Qe4+pivi/eblW7Ql9r4F4uHlT13Pe+Hse1V Qw2KmgXj6DZorcBu4D4RyHaq13l1wamMZCoIJABEcqm+uFZgqcVDS3vm6L2rpLR3 FH8yX4fdTQA52ZwmmOU8zHxzfGpPvhSuqM9yL1wVbGgOq59Hp7i+Vfb6VbITPU3A R7LF46VUOs90RHpl2g5rIJnh0CXkFw40Um5wbc+oF26JTxDhMSJEeDJpdOwhH/8F IBiD2o8VCyxMfQt23JhEw1wuveEGELtQsfXZXtmXVmAMbigrOwdFd5llLdMwZX0W hmlYDISkzh565UHv8JzAZbw17tStakOp0UEUwYX+SuaPbDyeI8c0B/aF6NuNtcd4 6C3fLqJ41M9FyqbSiBXqBeBt284FXz2IKMx1wI1CI5StABv0bRH0QjfJI5Hyf196 F0NGZAjyrm7L9yKJ354ltLHrZKPkb3Xbn0OvoqPApeMsGnu+utW1oUM/7RbpkEGm w6fIvSUf09OxnIJQ62SQMKNwnHBojA4MPk2gCrb2YYg6WIXO1XmYF90H52uR1gBQ /OU4Epk1R6hhWPGnOrOMWXOQIB17PDM9jRQ9BjtCWNfUTNoaj9D4+6XovlPp/e1Y ECiuJLYmQvEi+X8ejHJjlqT5NH+KqL+kmc1zphHQxqV7UEBVU8014hp0F6KIo5O6 LLgMhQJxlNXi0zNRhIMe7Swag2Bhj1uBswDTYV+HYIy+bXMQ4ctvAh3NyHqRrd4n emgF5gcLOFBdetn3BCZR0lPu1vmVCWWtZSwowBBq9FF4bgVP2Nb8fXdCpcLL4wJF a3C7PpMzgSkC3XYAb2ZDjta0bQDvtiHOB7WWkiLdZvpJI5qOsDQj0pc6A+JGchWQ Zk1/BKHhMWHuID2ozoU8mvjRdCFUb5lTMmx23qdqvWUdTh/Cny/ksZmngYdzLlWF 1LV8SSXN5yiSblezD/wJ67OJ/yhcdSGluOP6P9xFMqAxtGph/sZTJAATrPrCdGOP +3r24oiMxzxa0MKSmpd5KPhoXDvnM1djkmpwCeLSScXIOTYHUEbyyNY5hnRtLQnK WdreRAluGmc= ##對fstab.her進行解密 [root@zabbix tmp]# openssl enc -d -des3 -a -salt -in fstab.her -out fstab enter des-ede3-cbc decryption password: #輸入加密時的密碼 [root@zabbix tmp]# ls fstab fstab.her ###已經解密出來 ##單項加密:openssl dgst 用于實現在網絡通信中保證所傳輸的數據的完整性 openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [-d] [-hex] [-binary] [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-hmac key] [file...] -md5:用md5的方式進行加密 -sha1:用sha1方式加密 -out:加密后密碼保存到哪里 例如:md5sum fstab 或者 openssl dgst -md5 fstab 提取的特征碼相同 [root@zabbix tmp]# md5sum fstab e784c8bb3dde9df0e8248941def7ac7f fstab [root@zabbix tmp]# openssl dgst -md5 fstab MD5(fstab)= e784c8bb3dde9df0e8248941def7ac7f 生成用戶密碼:openssl passwd -1 [-salt string] password -1:md5加密 -salt:加點鹽 生成隨機數:openssl rand -base64 4 或 openssl rand -hex4 生成8位隨機數 [root@zabbix tmp]# openssl passwd -1 -salt 12345678 Password: $1$12345678$0ME5N6oDyoEAwUp7b5UDM/ [root@zabbix tmp]# openssl passwd -1 -salt 12345678 123 $1$12345678$tRy4cXc3kmcfRZVj4iFXr/ #指定salt是12345678對123加密 [root@zabbix tmp]# openssl passwd -1 -salt 12345678 1234 $1$12345678$g4kuC1.5wVcZ0Y5XnhARm1 #指定salt是12345678對1234加密 [root@zabbix tmp]# openssl passwd -1 -salt `openssl rand -hex 4` Password: $1$c3e4a371$h2oSsBHRWUrNEimT06ZIA0 [root@zabbix tmp]# openssl rand -hex 4 #生成8位隨機salt 9ce23611
#自簽證書
[root@zabbix tmp]# cp cakey.pem /etc/pki/CA/private/ [root@zabbix private]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN #國家(大寫縮寫) State or Province Name (full name) []:Beijing #省份或洲 Locality Name (eg, city) [Default City]:Beijing #城市 Organization Name (eg, company) [Default Company Ltd]:hzcf #公司 Organizational Unit Name (eg, section) []:linux #部門 Common Name (eg, your name or your server's hostname) []:ca.hzcf.com #主機(必須與證書所有者能解析到的名字保持一致,否則將無法通過驗證) Email Address []: #郵箱(可以不填) ###以上操作默認選項可通過修改配置文件(/etc/pki/tls/openssl.cnf)修改 [root@zabbix private]# cd .. [root@zabbix CA]# ll -rw-r--r-- 1 root root 1318 Dec 30 15:57 cacert.pem drwxr-xr-x. 2 root root 4096 Nov 22 2013 certs drwxr-xr-x. 2 root root 4096 Nov 22 2013 crl drwxr-xr-x. 2 root root 4096 Nov 22 2013 newcerts drwx------. 2 root root 4096 Dec 28 14:39 private 命令詳解: req: 生成證書簽署請求 -news: 新請求 -key /path/to/keyfile: 指定私鑰文件 -out /path/to/somefile: 指定生成證書位置 -x509: 生成自簽署證書 -days n: 有效天數
初始化工作環境
[root@zabbix CA]# touch index.txt serial [root@zabbix CA]# ls cacert.pem certs crl index.txt newcerts private serial [root@zabbix CA]# echo 01 >serial [root@zabbix CA]# cat serial 01 #命令詳解: index.txt:證書縮影數據庫 serial:簽署證書編號文件 echo 01 > serial #設定編號初始值
客戶端申請證書
#生成密鑰 #我們給web服務生成請求用于https,在其配置文件目錄創建用于保存私鑰和證書的目錄 [root@www ~]# mkdir /etc/httpd/ssl [root@www ~]# cd /etc/httpd/ssl [root@www ssl]# ls [root@www ssl]# (umask 077;openssl genrsa -out httpd.key 2048) Generating RSA private key, 2048 bit long modulus ..........................................................................+++ ....+++ e is 65537 (0x10001) [root@www ssl]# ll -rw------- 1 root root 1679 Dec 30 16:36 httpd.key #生成證書簽署請求 [root@lab01 ssl]# openssl req -new -key httpd.key -out httpd.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:hzcf Organizational Unit Name (eg, section) []:linux Common Name (eg, your name or your server's hostname) []:www.hzcf.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: #證書請求需要加密存放,如果添加密碼,需要將密碼一同給CA An optional company name []: ###將簽署請求文件發送給CA服務器 ##CA服務器工作目錄下,手動創建了一個存放證書請求的目錄(存放目錄請隨意) [root@lab01 ssl]# scp httpd.csr 192.168.9.9:/u01/tmp The authenticity of host '192.168.9.9 (192.168.9.9)' can't be established. RSA key fingerprint is 36:17:6b:58:68:f2:cc:9e:af:0d:e8:84:a5:83:4c:9c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.9.9' (RSA) to the list of known hosts. root@192.168.9.9's password: httpd.csr 100% 1005 1.0KB/s 00:00 CA簽署證書 [root@zabbix ~]# cd tmp [root@zabbix tmp]# ls httpd.csr [root@zabbix tmp]# openssl ca -in httpd.csr -out httpd.crt -days 3650 Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Dec 30 08:49:17 2015 GMT Not After : Dec 27 08:49:17 2025 GMT Subject: countryName = CN stateOrProvinceName = Beijing organizationName = hzcf organizationalUnitName = linux commonName = www.hzcf.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: D4:83:D5:B4:54:00:C2:FD:BC:70:52:FD:CF:74:0A:69:56:7E:54:02 X509v3 Authority Key Identifier: keyid:1B:DB:DC:36:5A:82:A5:AF:1A:A9:9C:7B:71:51:54:44:10:31:C3:4B Certificate is to be certified until Dec 27 08:49:17 2025 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated #將簽署的證書發回請求者 [root@zabbix tmp]# scp httpd.crt 192.168.9.208:/etc/httpd/ssl The authenticity of host '192.168.9.208 (192.168.9.208)' can't be established. RSA key fingerprint is 57:ea:c0:ae:84:98:d8:63:01:b0:65:85:ef:4b:46:88. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.9.208' (RSA) to the list of known hosts. root@192.168.9.208's password: httpd.crt 100% 4446 4.3KB/s 00:0 #這樣客戶端就可以配置使用CA簽署的證書,進行加密通信了。 但是如果客戶端的私鑰不慎丟失,或者證書過期了該怎么辦呢?接下來我們看一下證書怎么吊銷吧。
吊銷證書
客戶端獲取證書serial
[root@lab01 ssl]# openssl x509 -in httpd.crt -noout -serial -subject serial=01 subject= /C=CN/ST=Beijing/O=hzcf/OU=linux/CN=www.hzcf.com #CA驗證信息 根據節點提交的serial和subject信息來驗證與index.txt文件中的信息是否一致 [root@zabbix CA]# cat index.txt V 251227084917Z 01 unknown /C=CN/ST=Beijing/O=hzcf/OU=linux/CN=www.hzcf.com #CA吊銷證書 [root@zabbix CA]# ls newcerts/ 01.pem [root@zabbix CA]# openssl ca -revoke newcerts/01.pem Using configuration from /etc/pki/tls/openssl.cnf Revoking Certificate 01. Data Base Updated [root@zabbix CA]# cat index.txt R 251227084917Z 151230090339Z 01 unknown /C=CN/ST=Beijing/O=hzcf/OU=linux/CN=www.hzcf.com CA生成吊銷證書編號(第一次吊銷) [root@zabbix CA]# echo 01 > crlnumber CA更新證書吊銷列表 [root@zabbix CA]# cd crl [root@zabbix crl]# openssl ca -gencrl -out ca.crl Using configuration from /etc/pki/tls/openssl.cnf #如果有需要,可查看crl文件的內容 #openssl crl -in /path/to/crlfile.crl -noout -text
好了,證書成功吊銷,可以重新申請了。
原創文章,作者:oranix,如若轉載,請注明出處:http://www.www58058.com/10705
[…] 3. openssl 總結及私有 CA 的搭建 […]