一攒菠、SSL 簡(jiǎn)介
按照我的理解來(lái)解釋下哨免,為了讓網(wǎng)絡(luò)通信更安全茎活,需要認(rèn)證和加密,認(rèn)證是說(shuō)明你是要找的人琢唾,加密是為了讓截獲中間報(bào)文第三者無(wú)法得到消息內(nèi)容载荔。
為此有人設(shè)計(jì)了SSL,即套接字上的安全層采桃,簡(jiǎn)單來(lái)說(shuō)就是在TCP之上做一個(gè)安全通信層懒熙,HTTP on SSL 即是HTTPs丘损,現(xiàn)在幾乎所有的銀行網(wǎng)站訪問(wèn)都是基于HTTPS協(xié)議的。
認(rèn)證是通過(guò)證書(shū)+非對(duì)稱(chēng)加密算法來(lái)解決的工扎,具體我也不搬遷了大家去看看
https交互過(guò)程
SSL交互過(guò)程還是很復(fù)雜的徘钥,牽扯到非對(duì)稱(chēng)加密和對(duì)稱(chēng)加密,以及復(fù)雜的交互過(guò)程肢娘,為此有人寫(xiě)了openssl庫(kù)呈础,這個(gè)庫(kù)的使用非常廣泛,本文就是闡明如何安裝和基本使用這個(gè)庫(kù)的蔬浙。
有了這openssl庫(kù)猪落,就可以直接寫(xiě)和HTTPS的交互的代碼了。
二畴博、openssl 功能
openssl可以實(shí)現(xiàn):秘鑰證書(shū)管理笨忌、對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密 。
openssl: 多用途的命令行工具俱病,包openssl官疲,可以執(zhí)行交互或批量命令。
libcrypto: 加密算法庫(kù)亮隙,包openssl-libs途凫。
libssl:加密模塊應(yīng)用庫(kù),實(shí)現(xiàn)了ssl及tls溢吻,包nss维费。
1.1 加密命令
工具: openssl enc, gpg
算法: 3des, aes, blowfish, twofish、3des等促王。
常用選項(xiàng)有:
-in filename:指定要加密的文件存放路徑
-out filename:指定加密后的文件存放路徑
-salt:自動(dòng)插入一個(gè)隨機(jī)數(shù)作為文件內(nèi)容加密犀盟,默認(rèn)選項(xiàng) 加點(diǎn)鹽:)
-e:加密;
-d:解密蝇狼,解密時(shí)也可以指定算法阅畴,若不指定則使用默認(rèn)算法,但一定要與加密時(shí)的算法一致
-a/-base64:當(dāng)進(jìn)行加解密時(shí)迅耘,他只對(duì)數(shù)據(jù)進(jìn)行運(yùn)算贱枣,有時(shí)需要進(jìn)行base64轉(zhuǎn)換,設(shè)置
此選項(xiàng)后加密結(jié)果進(jìn)行base64編碼颤专,解密前先進(jìn)行base64編碼纽哥。
加密解密算法可以通過(guò)自己制定,有什么算法可以通過(guò)openssl help enc去查看加密內(nèi)容栖秕。
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 ?
對(duì)稱(chēng)加密算法
OpenSSL一共提供了8種對(duì)稱(chēng)加密算法春塌,其中7種是分組加密算法,僅有的一種流加密算法是RC4。這7種分組加密算法分別是AES摔笤、DES、Blowfish垦写、CAST吕世、IDEA、RC2梯投、RC5命辖,都支持電子密碼本模式(ECB)、加密分組鏈接模式(CBC)分蓖、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式尔艇。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長(zhǎng)度是128位么鹤,其它算法使用的則是64位终娃。事實(shí)上,DES算法里面不僅僅是常用的DES算法蒸甜,還支持三個(gè)密鑰和兩個(gè)密鑰3DES算法棠耕。
非對(duì)稱(chēng)加密算法
OpenSSL一共實(shí)現(xiàn)了4種非對(duì)稱(chēng)加密算法,包括DH算法柠新、RSA算法窍荧、DSA算法和橢圓曲線算法(EC)。DH算法一般用戶(hù)密鑰交換恨憎。RSA算法既可以用于密鑰交換蕊退,也可以用于數(shù)字簽名,當(dāng)然憔恳,如果你能夠忍受其緩慢的速度瓤荔,那么也可以用于數(shù)據(jù)加密。DSA算法則一般只用于數(shù)字簽名喇嘱。
1.2 摘要命令
OpenSSL實(shí)現(xiàn)了5種信息摘要算法茉贡,分別是MD2、MD5者铜、MDC2腔丧、SHA(SHA1)和RIPEMD。SHA算法事實(shí)上包括了SHA和SHA1兩種信息摘要算法作烟,此外愉粤,OpenSSL還實(shí)現(xiàn)了DSS標(biāo)準(zhǔn)中規(guī)定的兩種信息摘要算法DSS和DSS1。
摘要一般有兩個(gè)作用:1)做信息完整性校驗(yàn)拿撩;2)保存密碼衣厘,有些密碼是直接在數(shù)據(jù)庫(kù)中采用MD5(真實(shí)密碼值)保存的,有的還進(jìn)行加鹽處理,使其難以破解影暴,這樣密碼只能重置错邦,無(wú)法告訴你原始過(guò)程,因?yàn)檎遣豢赡娴摹?/p>
openssl dgst
常用選項(xiàng)有:
[-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一種摘要算法
-out filename:將摘要的內(nèi)容保存到指定文件中
dgst命令:
幫助: man dgst
openssl dgst -md5 [-hex默認(rèn)16進(jìn)制] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
MAC: Message Authentication Code型宙,單向加密的一種延伸應(yīng)用撬呢,用于實(shí)現(xiàn)網(wǎng)絡(luò)通
信中保證所傳輸數(shù)據(jù)的完整性機(jī)制
CBC-MAC
HMAC:使用md5或sha1算法
簡(jiǎn)單示例,對(duì)文件1進(jìn)行求md5摘要:
1.3 生成密碼和base64等
生成密碼需要使用的標(biāo)準(zhǔn)命令為 passwd 妆兑,用法如下:
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
常用選項(xiàng)有:
-1:使用md5加密算法
-salt string:加入隨機(jī)數(shù)魂拦,最多8位隨機(jī)數(shù)
-in file:對(duì)輸入的文件內(nèi)容進(jìn)行加密
-stdion:對(duì)標(biāo)準(zhǔn)輸入的內(nèi)容進(jìn)行加密
1.4 生成隨機(jī)數(shù)
在SSL交互過(guò)程中,需要生成隨機(jī)數(shù)搁嗓。
生成隨機(jī)數(shù)需要用到的標(biāo)準(zhǔn)命令為 rand 芯勘,用法如下:
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
常用選項(xiàng)有:
-out file:將生成的隨機(jī)數(shù)保存至指定文件中
-base64:使用base64 編碼格式
-hex:使用16進(jìn)制編碼格式
1.5 生成密鑰對(duì)
首先需要先使用 genrsa 標(biāo)準(zhǔn)命令生成私鑰,然后再使用 rsa 標(biāo)準(zhǔn)命令從私鑰中提取公鑰腺逛。
genrsa 的用法如下:
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]
常用選項(xiàng):
-out filename:將生成的私鑰保存至指定的文件中
-des|-des3|-idea:不同的加密算法
numbits:指定生成私鑰的大小荷愕,默認(rèn)是2048
一般情況下秘鑰文件的權(quán)限一定要控制好,只能自己讀寫(xiě)棍矛,因此可以使用 umask 命令設(shè)置生成的私鑰權(quán)限路翻,示例如下:
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]
常用選項(xiàng):
-in filename:指明私鑰文件
-out filename:指明將提取出的公鑰保存至指定文件中
-pubout:根據(jù)私鑰提取出公鑰
1.7創(chuàng)建證書(shū)
使用openssl工具創(chuàng)建CA證書(shū)和申請(qǐng)證書(shū)時(shí),需要先查看配置文件茄靠,因?yàn)榕渲梦募袑?duì)證書(shū)的名稱(chēng)和存放位置等相關(guān)信息都做了定義茂契,具體可參考 /etc/pki/tls/openssl.cnf 文件。
第一步:創(chuàng)建為 CA 提供所需的目錄及文件
![i(http://upload-images.jianshu.io/upload_images/1737506-a44da07298662473.png!web?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
第二步:指明證書(shū)的開(kāi)始編號(hào)
]# echo 01 >> serial
第三步:生成私鑰慨绳,私鑰的文件名與存放位置要與配置文件中的設(shè)置相匹配掉冶;
第四步:生成自簽證書(shū),自簽證書(shū)的存放位置也要與配置文件中的設(shè)置相匹配脐雪,生成證書(shū)時(shí)需要填寫(xiě)相應(yīng)的信息厌小;
命令中用到的選項(xiàng)解釋?zhuān)?br>
-new:表示生成一個(gè)新證書(shū)簽署請(qǐng)求
-x509:專(zhuān)用于CA生成自簽證書(shū),如果不是自簽證書(shū)則不需要此項(xiàng)
-key:生成請(qǐng)求時(shí)用到的私鑰文件
-out:證書(shū)的保存路徑
-days:證書(shū)的有效期限战秋,單位是day(天)璧亚,默認(rèn)是365天
(2)頒發(fā)證書(shū)
在需要使用證書(shū)的主機(jī)上生成證書(shū)請(qǐng)求,以 httpd 服務(wù)為例脂信,步驟如下:
第一步:在需要使用證書(shū)的主機(jī)上生成私鑰癣蟋,這個(gè)私鑰文件的位置可以隨意定
第二步:生成證書(shū)簽署請(qǐng)求
第三步:將請(qǐng)求通過(guò)可靠方式發(fā)送給 CA 主機(jī)
第四步:CA 服務(wù)器拿到證書(shū)簽署請(qǐng)求文件后頒發(fā)證書(shū),這一步是在 CA 服務(wù)器上做的
查看證書(shū)信息的命令為:
(3)吊銷(xiāo)證書(shū)
吊銷(xiāo)證書(shū)的步驟也是在CA服務(wù)器上執(zhí)行的狰闪,以剛才新建的 httpd.crt 證書(shū)為例疯搅,吊銷(xiāo)步驟如下:
第一步:在客戶(hù)機(jī)上獲取要吊銷(xiāo)證書(shū)的 serial 和 subject 信息
第二步:根據(jù)客戶(hù)機(jī)提交的 serial 和 subject 信息,對(duì)比其余本機(jī)數(shù)據(jù)庫(kù) index.txt 中存儲(chǔ)的是否一致
第三步:執(zhí)行吊銷(xiāo)操作
第四步:生成吊銷(xiāo)證書(shū)的吊銷(xiāo)編號(hào) (第一次吊銷(xiāo)證書(shū)時(shí)執(zhí)行)
# echo 01 > /etc/pki/CA/crlnumber
第五步:更新證書(shū)吊銷(xiāo)列表
# openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl
查看 crl 文件命令:
# openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text
轉(zhuǎn)自:http://www.178linux.com/48764?utm_source=tuicool&utm_medium=referral
其他:http://man.linuxde.net/openssl埋泵、http://www.reibang.com/p/56f7a350b0ab