版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
OpenSSL有兩種運(yùn)行模式:交互模式和批處理模式。
直接輸入opens?回車進(jìn)入交互模式,輸入帶命令選項(xiàng)的openssl進(jìn)入批處理模式。
⑴配置文件
OpenSSL的默認(rèn)配置文件位置不是很固定,可以用opensslca命令得知。
你也可以指定自己的配置文件。
當(dāng)前只有三個(gè)命令會(huì)使用這個(gè)配置文件:有望未來版本會(huì)
OpenSSLca,req,x509o
有更多命令使用配置文件。
⑵消息摘要算法
支持的算法包括:(有時(shí)候叫做
MD2,MD4,MD5,MDC2,SHA1DSS1),RIPEMD-160o
SHA1和RIPEMD-160產(chǎn)生160位哈西值,其他的產(chǎn)生128位。除非出于兼容性考慮,否
則推薦使用SHA1或者RIPEMD-160。
除了RIPEMD-160需要用rmdl60命令外,其他的算法都可用dgst命令來執(zhí)行。
OpenSSL對(duì)于SHA1的處理有點(diǎn)奇怪,有時(shí)候必須把它稱作DSS1來引用。
消息摘要算法除了可計(jì)算哈西值,還可用于簽名和驗(yàn)證簽名。簽名的時(shí)候,對(duì)于DSA
生成的私匙必須要和DSS1(即SHAD搭配。而對(duì)于RSA生成的私匙,任何消息摘要算法
都可使用。
##########################################################
###
#消息摘要算法應(yīng)用例子
#用SHA1算法計(jì)算文件fiMtxt的哈西值,輸出到stdout
$openssldgst-shalfile.txt
#用SHA1算法計(jì)算文件file.txt的哈西值,輸出到文件digesttxt
$opensslshal-outdigesttxtfile.txt
#用DSSl(SHAl)算法為文件file.txt簽名,輸出到文件dsasign.bin
#簽名的privatekey必須為DSA算法產(chǎn)生的,保存在文件dsakey.pem中
$openssldgst-dssl-signdsakey.pem-outdsasign.binfile.txt
#用dssl算法驗(yàn)證file.txt的數(shù)字簽名dsasign.bin,
#驗(yàn)證的privatekey為DSA算法產(chǎn)生的文件dsakey.pem
$openssldgst-dssl-prverifydsakey.pem-signaturedsasign.binfile.txt
#用shal算法為文件file.txt簽名,輸出到文件rsasign.bin
#簽名的privatekey為RSA算法產(chǎn)生的文件rsaprivate.pem
$opensslshal-signrsaprivate.pem-outrsasign.binfile.txt
#用shal算法驗(yàn)證行l(wèi)e.txt的數(shù)字簽名rsasign.bin,
#驗(yàn)證的publickey為RSA算法生成的rsapublic.pem
$opensslshal-verifyrsapublic.pem-signaturersasign.binfile.txt
(3)對(duì)稱密碼
OpenSSL支持的對(duì)稱密碼包括Blowfish,CAST5,DES,3DES(TripleDES),IDEA,RC2,
以及還新增了的支持。很多對(duì)稱密碼支持不同的模式,
RC4RC5dOpenSSL0.9.7AES
包括以及。對(duì)于每一種密碼,默認(rèn)的模式總是需要特別指出的
CBC,CFB,ECBOFBCBCO
是,盡量避免使用ECB模式,要想安全地使用它難以置信地困難。
enc命令用來訪問對(duì)稱密碼,此外還可以用密碼的名字作為命令來訪問。除了加解密,
base64可作為命令或者enc命令選項(xiàng)對(duì)數(shù)據(jù)進(jìn)行base64編碼/解碼。
當(dāng)你指定口令后,命令行工具會(huì)把口令和一個(gè)8字節(jié)的sa*隨機(jī)生成的)進(jìn)行組合,然
后計(jì)算MD5hash值。這個(gè)hash值被切分成兩部分:加密鑰匙(key)和初始化向量
當(dāng)然加密鑰匙和初始化向量也可以手工指定,但是不推薦那樣,
(initializationvector)o
因?yàn)槿菀壮鲥e(cuò)。
##########################################################
###
#對(duì)稱加密應(yīng)用例子
#用算法的模式加密文件
DES3CBCplaintextdoc;
#加密結(jié)果輸出到文件ciphertext.bin
$opensslenc-des3-salt-inplaintextdoc-outciphertext.bin
#用DES3算法的OFB模式解密文件ciphertextbin,
#提供的口令為trousers,輸出到文件plaintextdoc
#注意:因?yàn)槟J讲煌?,該命令不能?duì)以上的文件進(jìn)行解密
$opensslenc-des-ede3-ofb-d-inciphertextbin-outplaintextdoc-pass
pass:trousers
#用Blowfish的CFB模式加密plaintextdoc,口令從環(huán)境變量PASSWORD中取
#輸出到文件ciphertext.bin
$opensslbf-cfb-salt-inplaintextdoc-outciphertext.bin-pass
env:PASSWORD
#給文件ciphertext.bin用base64編碼,輸出到文件base64,txt
$opensslbase64-inciphertext.bin-outbase64.txt
#用RC5算法的CBC模式加密文件plaintextdoc
#輸出到文件ciphertext.bin,
#saltkey和初始化向量(iv)在命令行指定
$opensslrc5-inplaintextdoc-outciphertext.bin-SC62CB1D49F158ADC-iv
E9EDACA1BD7090C6-K
89D4B1678D604FAA3DBFFD030A314B29
⑷公匙密碼
41Diffie-Hellman
被用來做鑰匙協(xié)商(keyagreement),具有保密(secrecy)功能,但是不具有加密
(encryption)或者認(rèn)證(authentication)功能,因此在進(jìn)行協(xié)商前需用別的方式對(duì)另一方進(jìn)
彳秋證。
首先,Diffie-Hellman創(chuàng)建一套雙方都認(rèn)可的參數(shù)集,包括一個(gè)隨機(jī)的素?cái)?shù)和生成因
子(generatorvalue,通常是2或者5)?;谶@個(gè)參數(shù)集,雙方都計(jì)算出一個(gè)公鑰匙和私
鑰匙,公鑰匙交給對(duì)方,對(duì)方的公鑰匙和自己的私鑰匙用來計(jì)算共享的鑰匙。
OpenSSL0,9.5提供了dhparam命令用來生成參數(shù)集,但是生成公鑰匙和私鑰匙的
命令dh和gendh已不推薦使用.未來版本可能會(huì)加上這個(gè)功能。
##########################################################
###
#Diffie-Hellman應(yīng)用例子
#使用生成因子2和隨機(jī)的1024?bit的素?cái)?shù)產(chǎn)生DOffie-Hellman參數(shù)
#輸出保存到文件dhparam.pem
$openssldhparam-outdhparam.pem-21024
#從dhparam.pem中讀取D卅ie-Hell參數(shù),以C代碼的形式
#輸出到stdout
$openssldhparam-indhparam.pem-noout-C
4.2數(shù)字簽名算法(DigitalSignatureAlgorithm,DSA)
主要用來做認(rèn)證,不能用來加密(encryption)或者保密(secrecy),因此它通常和
Diffie-Hellman配合使用。在進(jìn)行鑰匙協(xié)商前先用DSA進(jìn)行認(rèn)證(authentication)。
有三個(gè)命令可用來完成DSA算法提供的功能。
dsaparam命令生成和檢查DSA參數(shù),還可生成DSA私鑰匙。
gendsa命令用來為一套DSA參數(shù)生成私鑰匙,這把私鑰匙可明文保存,也可指定加
密選項(xiàng)加密保存??刹捎肈ES,3DES,或者IDEA進(jìn)行加密。
dsa命令用來從DSA的私鑰匙中生成公鑰匙,還可以為私鑰匙加解密,或者改變私鑰
匙加密的口令。
##########################################################
###
#DSA應(yīng)用例子
#生成1024位DSA參數(shù)集,并輸出到文件dsaparam.pem
$openssldsaparam-outdsaparam.pem1024
#使用參數(shù)文件dsaparam.pem生成DSA私鑰匙,
#采用3DES加密后輸出到文件dsaprivatekey.pem
$opensslgendsa-outdsaprivatekey.pem-des3dsaparam.pem
#使用私鑰匙dsaprivatekey.pem生成公鑰匙,
#輸出到dsapublickey.pem
$openssldsa=indsaprivatekey.pem-pubout-outdsapublickey.pem
#從dsaprivatekey.pem中讀取私鑰匙,解密并輸入新口令進(jìn)行加密,
#然后寫回文件dsaprivatekey.pem
$openssldsa-indsaprivatekey.pem-outdsaprivatekey.pem-des3-passin
4.3RSA
得名于它的三位創(chuàng)建者:
RSARonRivest,AdiShamir,LeonardAdleman9
目前之所以如此流行,是因?yàn)樗C?、認(rèn)證、加密的功能于T本.
不像Diffie^Hellman和DSA,RSA算法不需要生成參數(shù)文件,這在很大程度上簡(jiǎn)化
了操作。
有三個(gè)命令可用來完成RSA提供的功能6
genrsa命令生成新的RSA私匙,推薦的私匙長(zhǎng)度為1024位,不建議低于該值或者
高于2048位。
缺省情況下私匙不被加密,但是可用DES、3DES或者IDEA加密。
rsa命令可用來添加、修改、刪除私匙的加密保護(hù),也可用來從私匙中生成RSA公匙,
或者用來顯示私匙或公匙信息。
「sautl命令提供RSA加密和簽名功能。但是不推薦用它來加密大塊數(shù)據(jù),或者給大塊
數(shù)據(jù)簽名,因?yàn)檫@種算法的速度較來慢.通常用它給對(duì)稱密
匙加密,然后通過enc命令用對(duì)稱密匙對(duì)大塊數(shù)據(jù)加密。
##########################################################
###
#RSA應(yīng)用例子
#產(chǎn)生1024位RSA私匙,用3DES加密它,口令為trousers,
#輸出到文件「saprivatekeypem
$opensslgenrsa-outrsaprivatekey.pem-passoutpass:trousers-des31024
#從文件rs叩rivatekey.pem讀取私匙,用口令trousers解密,
#生成的公鑰匙輸出到文件rsapublickey.pem
$opensslrsa-inrsaprivatekey.pem-passinpass;trousers-pubout-out
rsapubckey.pem
#用公鑰匙rsapublickey.pem加密文件plain.txt,
#輸出到文件cipher.txt
$opensslrsautl-encrypt-pubin-inkeyrsapublickey.pem-inplain.txt-out
cipher.txt
#使用私鑰匙rsaprivatekey,pern解密密文cipher.txt,
#輸出到文件plain.txt
$opensslrsautl-decrypt-inkeyrsaprivatekey.pem-incipher.txt-outplain.txt
#用私鑰匙rs叩rivatekey.pem給文件plaimtxt簽名,
#輸出到文件signature.bin
$opensslrsautl-sign-inkeyrsaprivatekey.pem-inplain.txt-outsignature.bin
#用公鑰匙rsapublickey.pem驗(yàn)證簽名signature.bin,
#輸出到文件plain.txt
$opensslrsautl-verify-pubin-inkeyrsapublickey.pem-insignature.bin-out
plain
(5)S/MIM[[SecureMultipurposeInternetMailExchange]
S/MIME應(yīng)用于安全郵件交換,可用來認(rèn)證和加密,是PGP的競(jìng)爭(zhēng)對(duì)手。與PGP不
同的是,它需要一套公匙體系建立信任關(guān)系,而PGP只需直接從臬個(gè)地方獲取對(duì)方的公匙
就可以.然而正因?yàn)檫@樣,它的擴(kuò)展性比PGP要好。另一方面,S/MIME可以對(duì)多人群發(fā)
安全消息,而PGP則不能。
命令$mime可用來加解密、簽名、驗(yàn)證S/MIMEv2消息(對(duì)S/MIMEv3的支持有限
而且很可能不工作)。對(duì)于沒有內(nèi)置S/MIME支持的應(yīng)用來說,可通過smime來處理進(jìn)來
(incoming)和出去(outgoing)的消息。
##########################################################
###
#RSA應(yīng)用例子
#從X.509證書文件cert.pem中獲取公鑰匙,
#用3DES加密mail.txt
#輸出到文件mail.enc
$opensslsmime-encrypt-inmail.txt-des3-outmail.enccert.pem
#從X.509證書文件cert.pem中獲取接收人的公鑰匙,
#用私鑰匙key.pem解密S/MIME消息mail.enc,
#結(jié)果輸出到文件mail.txt
$opensslsmime-decrypt-inmail.enc-recipcert.pem-inkeykey.pem-out
mail.txt
#cert.pem為X.509證書文件,用私匙key,pem為mail.txt簽名,
#證書被包含在S/MIME消息中,輸出到文件maiLsgn
$opensslsmime-sign-inmail.txt-signercert.pem-inkeykey.pem-out
mail.sgn
#驗(yàn)證S/MIME消息maiLsgn,輸出到文件mail.txt
#簽名者的證書應(yīng)該作為S/MIME消息的一部分包含在maiLsgn中
$opensslsmime-verify-inmail.sgn-outmail.txt
(6)口令和口令輸入(passphase)
OpenSSL口令選項(xiàng)名稱不是很一致,通常為passin和passout.可以指定各種各樣
的口令輸入來源,不同的來源所承擔(dān)的風(fēng)險(xiǎn)取決于你的接受能九
stdin
這種方式不同于缺省方式,它允許重定向標(biāo)準(zhǔn)輸入,而缺省方式下是直接從真實(shí)的終
端設(shè)備(TTY)讀入口令的。
pass:
直接在命令行指定口令為password.不推薦這樣使用。
env;
從環(huán)境變量中獲取口令,比pass方式安全了些,但是進(jìn)程環(huán)境仍可能被別有用心的進(jìn)
程讀到。
file:
從文件中獲取,注意保護(hù)好文件的安全性。
fd:
從文件描述符中讀取。通常情況是父進(jìn)程啟動(dòng)OpenSSL命令行工具,由于OpenSSL
繼承了父進(jìn)程的文件描述符,因此可以從文件描述符中讀取口令。
(7)重置偽隨機(jī)數(shù)生成器(SeedingthePseudorandomNumberGenerator)
對(duì)于OpenSSL,正確地重置PRNG(Pseud。RandomNumberGenerator很重要。
命令行工具會(huì)試圖重置PRNG,當(dāng)然這不是萬無一失的。如果錯(cuò)誤發(fā)生,命令行工具
會(huì)生成一條警告,這意味著生成的隨機(jī)數(shù)是可預(yù)料的,這時(shí)就應(yīng)該采用一種更可靠的重置
機(jī)制而不能是默認(rèn)的。
在Windows系統(tǒng),重置PRNG的來源很多,比如屏幕內(nèi)容。在Unix系統(tǒng),通常通
過設(shè)備/dev/urandom來重置PRNG.從0.9.7開始,OpenSSL還試圖通過連接EGD套
接字來重置PRNG。
除了基本的重置來源,命令行工具還會(huì)查找包含隨機(jī)數(shù)據(jù)的文件。假如環(huán)境變量
RANDFILE被設(shè)置它的值就可以用來重置PRNG。如果沒有設(shè)置則HOME目錄下的.「nd
文件將會(huì)使用。
OpenSSL還提供了一個(gè)命令rand用來指定重置來源文件。來源文件之間以操作系統(tǒng)
的文件分割字符隔開。對(duì)于Unix系統(tǒng),如果來源文件是EGD套接字,則會(huì)從EGD服務(wù)
器獲取隨機(jī)數(shù)。
EGD服務(wù)器是用Perl寫成的收集重置來源的daemon可運(yùn)行在裝了Perl的基于Unix
的系統(tǒng),見o如果沒有/dev/random或者/dev/urandom,
EGD是T不錯(cuò)的候選
EGD不能運(yùn)行在Windows系統(tǒng)中。對(duì)于Windows環(huán)境,推薦使用EGADS(Entropy
它可運(yùn)行在和系統(tǒng)中,見
GatheringAndDistributionSystem)eUnixWindows
/egadso
(本文參考O'Reilly-NetworkSecuritywithOpenSSL)
附加測(cè)試實(shí)例:
##########################################################
###
#消息摘要算法應(yīng)用例子
#用SHA1算法計(jì)算文件file.txt的哈西值,輸出到stdout
$openssldgst-shalfile.txt
[root@server02echozhaohang>file.txt
[root@server02-]#openssldgst-shalfile.txt
SHAl(file.txt)=cf017022db32f04cb57d2eclae6b39751a6155e4
#用SHA1算法計(jì)算文件file.txt的哈西值輸出到文件digests
$opensslshal-outdigesttxtfile.txt
[root@server02~]#opensslshal-outdigesttxtfile.txt
[root@server02~]#catdigest.txt
SHAl(file.txt)=cf017022db32f04cb57d2eclae6b39751a6155e4
#用DSSl(SHAl)算法為文件We.txt簽名,輸出到文件dsasign.bin
#簽名的privatekey必須為DSA算法產(chǎn)生的,保存在文件dsakey.pem中
$openssldgst-dssl-signdsakey.pem-outdsasign.binfile.txt
#用dssl算法驗(yàn)證file.txt的數(shù)字簽名dsasign.bin,
#驗(yàn)證的privatekey為DSA算法產(chǎn)生的文件dsakey.pem
$openssldgst-dssl-prverifydsakey.pem-signaturedsasign.binfile.txt
#用shal算法為文件file.txt簽名輸出到文件rsasign.bin
#簽名的privatekey為RSA算法產(chǎn)生的文件rsaprivate.pem
$opensslshal-signrsaprivate.pem-outrsasign.binfile.txt
#用shal算法驗(yàn)證file.txt的數(shù)字簽名rsasign.bin,
#驗(yàn)證的publickey為RSA算法生成的rsapublk.pem
$opensslshal-verifyrsapublic.pem-signaturersasign.binfile.txt
##########################################################
###
##########################################################
###
#對(duì)稱加密應(yīng)用例子
#用DES3算法的CBC模式加密文件file.txt
#加密結(jié)果輸出到文件ciphertextbin
$opensslenc-des3-salt-infile.txt-outciphertext.bin-passpass:123456
#用DES3算法的CBC模式解密文件ciphertextbin
$opensslenc-des3-d-inciphertext.bin-passpass:123456
#用DES3算法的OFB模式解密文件ciphertextbin:
#提供的口令為trousers,輸出到文件plaintext.doc
#注意:因?yàn)槟J讲煌?,該命令不能?duì)以上的文件進(jìn)行解密
$opensslenc-des-ede3-ofb-d-inciphertext.bin-outfile.txt-pass
pass:123456
#用Blowfish的CFB模式加/解密file.txt,口令從環(huán)境變量HOSTNMAE中取
$opensslbf-cfb-salt-infile.txt-outciphertext.bin-passenv:HOSTNAME
$opensslbf-cfb-d-inciphertext.bin-passenv:HOSTNAME
##########################################################
###
##########################################################
###
#DSA應(yīng)用例子?數(shù)字簽名算法
#給文件ciphertext.bin用base64編碼,輸出到文件base64.txt
$opensslbase64-inciphertext.bin-outbase64,txt
#使用參數(shù)文件dsaparam.pem生成DSA私鑰匙,
#采用3DES加密后輸出到文件dsaprivatekey.pem
$opensslgendsa-outdsaprivatekey.pem-des3dsaparam.pem
#使用私鑰匙dsaprivatekey.pem生成公鑰匙,
#輸出到dsapublickey.pem
$ope
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)畢業(yè)生實(shí)習(xí)自我鑒定(合集15篇)
- 2024年渣土運(yùn)輸行業(yè)合作合同樣本
- 教師個(gè)人年終述職報(bào)告合集15篇
- 《淘氣包馬小跳》讀后感15篇
- 英文感謝信模板集合7篇
- 2024-2025學(xué)年高中歷史 第四單元 雅爾塔體系下的冷戰(zhàn)與和平 第3課 美蘇爭(zhēng)霸教學(xué)教學(xué)實(shí)錄2 新人教版選修3
- 個(gè)人年度的工作計(jì)劃
- 二年級(jí)體育上冊(cè) 2.36游戲活動(dòng)和立定跳遠(yuǎn)測(cè)試教學(xué)實(shí)錄
- 九年級(jí)化學(xué)上冊(cè) 第四章 生命之源-水4.4《化學(xué)方程式》教學(xué)實(shí)錄(新版)粵教版
- 心理專業(yè)名詞解釋
- 2024年度軟件開發(fā)分包合同技術(shù)要求與交底2篇
- 湖南省邵陽市2023-2024學(xué)年高一上學(xué)期拔尖創(chuàng)新人才早期培養(yǎng)競(jìng)賽(初賽)數(shù)學(xué)試題 含解析
- 2024年執(zhí)業(yè)藥師資格繼續(xù)教育定期考試題庫附含答案
- 微短劇制作手冊(cè)專業(yè)版
- 酒店前臺(tái)消防安全培訓(xùn)
- 舒適化醫(yī)療麻醉
- 南寧二中、柳州高中2025屆高一上數(shù)學(xué)期末聯(lián)考試題含解析
- 2024年秋季學(xué)期新魯教版(54制)6年級(jí)上冊(cè)英語課件 Unit6 Section A (3a-3c)(第3課時(shí))
- 福建省泉州市2023-2024學(xué)年高一上學(xué)期1月教學(xué)質(zhì)量檢測(cè)(期末考試)地理試題 附答案
- 【期末復(fù)習(xí)提升卷】浙教版2022-2023學(xué)年八年級(jí)上學(xué)期數(shù)學(xué)期末壓軸題綜合訓(xùn)練試卷1(解析版)
- 山東省臨沂市費(fèi)縣2023-2024學(xué)年八年級(jí)上學(xué)期1月期末生物試題
評(píng)論
0/150
提交評(píng)論