按照個人理解來解釋下,爲了讓網絡通訊更安全,須要認證和加密,認證是說明你是要找的人,加密是爲了讓截獲中間報文第三者沒法獲得消息內容。
爲此有人設計了SSL,即套接字上的安全層,簡單來講就是在TCP之上作一個安全通訊層,HTTP on SSL 便是HTTPs,如今幾乎全部的銀行網站訪問都是基於HTTPS協議的。
認證是經過證書+非對稱加密算法來解決的,具體我也不搬遷了你們去看看
https交互過程css
SSL交互過程仍是很複雜的,牽扯到非對稱加密和對稱加密,以及複雜的交互過程,爲此有人寫了openssl庫,這個庫的使用很是普遍,本文就是闡明如何安裝和基本使用這個庫的。
有了這openssl庫,就能夠直接寫和HTTPS的交互的代碼了。web
openssl能夠實現:祕鑰證書管理、對稱加密和非對稱加密 。算法
openssl: 多用途的命令行工具,包openssl,能夠執行交互或批量命令。 libcrypto: 加密算法庫,包openssl-libs。 libssl:加密模塊應用庫,實現了ssl及tls,包nss。
工具: openssl enc, gpg 算法: 3des, aes, blowfish, twofish、3des等。 經常使用選項有: -in filename:指定要加密的文件存放路徑 -out filename:指定加密後的文件存放路徑 -salt:自動插入一個隨機數做爲文件內容加密,默認選項 加點鹽:) -e:加密; -d:解密,解密時也能夠指定算法,若不指定則使用默認算法,但必定要與加密時的算法一致 -a/-base64:當進行加解密時,他只對數據進行運算,有時須要進行base64轉換,設置 此選項後加密結果進行base64編碼,解密前先進行base64編碼。 加密解密算法能夠經過本身制定,有什麼算法能夠經過openssl help enc去查看加密內容。 enc命令: 幫助: man enc 加密: openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher 解密: openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile openssl ?
對稱加密算法
OpenSSL一共提供了8種對稱加密算法,其中7種是分組加密算法,僅有的一種流加密算法是RC4。這7種分組加密算法分別是AES、DES、Blowfish、CAST、IDEA、RC二、RC5,都支持電子密碼本模式(ECB)、加密分組連接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種經常使用的分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128位,其它算法使用的則是64位。事實上,DES算法裏面不只僅是經常使用的DES算法,還支持三個密鑰和兩個密鑰3DES算法。數據庫
非對稱加密算法
OpenSSL一共實現了4種非對稱加密算法,包括DH算法、RSA算法、DSA算法和橢圓曲線算法(EC)。DH算法通常用戶密鑰交換。RSA算法既能夠用於密鑰交換,也能夠用於數字簽名,固然,若是你可以忍受其緩慢的速度,那麼也能夠用於數據加密。DSA算法則通常只用於數字簽名。安全
OpenSSL實現了5種信息摘要算法,分別是MD二、MD五、MDC二、SHA(SHA1)和RIPEMD。SHA算法事實上包括了SHA和SHA1兩種信息摘要算法,此外,OpenSSL還實現了DSS標準中規定的兩種信息摘要算法DSS和DSS1。ruby
摘要通常有兩個做用:1)作信息完整性校驗;2)保存密碼,有些密碼是直接在數據庫中採用MD5(真實密碼值)保存的,有的還進行加鹽處理,使其難以破解,這樣密碼只能重置,沒法告訴你原始過程,由於摘要是不可逆的。服務器
openssl dgst
經常使用選項有:
[-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一種摘要算法 -out filename:將摘要的內容保存到指定文件中 dgst命令: 幫助: man dgst openssl dgst -md5 [-hex默認16進制] /PATH/SOMEFILE openssl dgst -md5 testfile md5sum /PATH/TO/SOMEFILE MAC: Message Authentication Code,單向加密的一種延伸應用,用於實現網絡通 信中保證所傳輸數據的完整性機制 CBC-MAC HMAC:使用md5或sha1算法
簡單示例,對文件1進行求md5摘要:網絡
生成密碼須要使用的標準命令爲 passwd ,用法以下:ide
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password} 經常使用選項有: -1:使用md5加密算法 -salt string:加入隨機數,最多8位隨機數 -in file:對輸入的文件內容進行加密 -stdion:對標準輸入的內容進行加密
在SSL交互過程當中,須要生成隨機數。工具
生成隨機數須要用到的標準命令爲 rand ,用法以下:
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num 經常使用選項有: -out file:將生成的隨機數保存至指定文件中 -base64:使用base64 編碼格式 -hex:使用16進制編碼格式
首先須要先使用 genrsa 標準命令生成私鑰,而後再使用 rsa 標準命令從私鑰中提取公鑰。
genrsa 的用法以下:
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits] 經常使用選項: -out filename:將生成的私鑰保存至指定的文件中 -des|-des3|-idea:不一樣的加密算法 numbits:指定生成私鑰的大小,默認是2048
通常狀況下祕鑰文件的權限必定要控制好,只能本身讀寫,所以可使用 umask 命令設置生成的私鑰權限,示例以下:
ras 的用法以下:
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id] 經常使用選項: -in filename:指明私鑰文件 -out filename:指明將提取出的公鑰保存至指定文件中 -pubout:根據私鑰提取出公鑰
使用openssl工具建立CA證書和申請證書時,須要先查看配置文件,由於配置文件中對證書的名稱和存放位置等相關信息都作了定義,具體可參考 /etc/pki/tls/openssl.cnf 文件。
第一步:建立爲 CA 提供所需的目錄及文件
![i(//upload-images.jianshu.io/upload_images/1737506-a44da07298662473.png!web?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
第二步:指明證書的開始編號
]# echo 01 >> serial
第三步:生成私鑰,私鑰的文件名與存放位置要與配置文件中的設置相匹配;
第四步:生成自簽證書,自簽證書的存放位置也要與配置文件中的設置相匹配,生成證書時須要填寫相應的信息;
命令中用到的選項解釋:
-new:表示生成一個新證書籤署請求
-x509:專用於CA生成自簽證書,若是不是自簽證書則不須要此項
-key:生成請求時用到的私鑰文件
-out:證書的保存路徑
-days:證書的有效期限,單位是day(天),默認是365天
在須要使用證書的主機上生成證書請求,以 httpd 服務爲例,步驟以下:
第一步:在須要使用證書的主機上生成私鑰,這個私鑰文件的位置能夠隨意定
第二步:生成證書籤署請求
第三步:將請求經過可靠方式發送給 CA 主機
第四步:CA 服務器拿到證書籤署請求文件後頒發證書,這一步是在 CA 服務器上作的
查看證書信息的命令爲:
吊銷證書的步驟也是在CA服務器上執行的,以剛纔新建的 httpd.crt 證書爲例,吊銷步驟以下:
第一步:在客戶機上獲取要吊銷證書的 serial 和 subject 信息
第二步:根據客戶機提交的 serial 和 subject 信息,對比其他本機數據庫 index.txt 中存儲的是否一致
第三步:執行吊銷操做
第四步:生成吊銷證書的吊銷編號 (第一次吊銷證書時執行)
# echo 01 > /etc/pki/CA/crlnumber
第五步:更新證書吊銷列表
# openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl
查看 crl 文件命令:
# openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text