- Linux服務(wù)器安全策略詳解(第2版)
- 曹江華
- 3008字
- 2019-01-01 07:27:53
2.3 Linux下安裝和配置OpenSSL
2.3.1 下載OpenSSL源代碼
OpenSSL是一套公布原始碼(Open Source)的套件,可以從http://www.openssl.org/取得。此文件撰寫時,OpenSSL最新版本為0.9.8d。
2.3.2 安裝OpenSSL
STEP 01 首先必須下載OpenSSL原始碼。
wget http://www.openssl.org/source/openssl-0.9.8d.tar.gz
STEP 02 解壓縮。
tar zxvf openssl-0.9.8d.tar.gz
STEP 03 設(shè)定OpenSSL安裝,“--prefix”參數(shù)為欲安裝之目錄,也就是安裝后的檔案會出現(xiàn)在該目錄下。
cd openssl-0.9.8d ./config --prefix=/home/blave/openssl
將“/home/blave/openssl”指定到你自己的目錄下。其他參數(shù)說明如表2-2所示。
表2-2 其他參數(shù)說明

MD5:MD5是將一任意長的數(shù)據(jù)轉(zhuǎn)化為固定長度的數(shù)據(jù)流的安全哈希算法。MD2、MD4和MD5(MD表示信息摘要)是由Ron Rivest設(shè)計的專門用于加密處理的,并被廣泛使用的Hash函數(shù),它們產(chǎn)生一種128位信息摘要,除徹底地搜尋外,沒有更快的方法對其加以攻擊,而其搜索時間一般需要1025年之久。
RSA:可以用來加密,也可以用來簽名的被廣泛使用的公鑰加密算法。
RC2、RC4:由RSA Data Security, INC所專有的bulk加密算法。RC2是一塊加密算法,而RC4是一流加密算法。
SHA:安全哈希算法(Secure Hash Algorithm)是在IPS PUB 180-1中定義的,它將產(chǎn)生一20 bit的輸出。
DES:DES是一被廣泛使用的對稱加密算法,它屬于塊加密。
CBC:CBC是一種加密方式,其中,每一明文塊在加密之前首先與上一個明文塊的加密所得的密文相異或(當(dāng)所加密的密文塊是第一個密文塊時,它與初始化向量相異或),然后再進(jìn)行加密。
STEP 04 編譯OpenSSL。
make
STEP 05 安裝OpenSSL。
make install
STEP 06 修改 ~/openssl/ssl/openssl.cnf。
dir=/home/blave/openssl/ssl/misc/demoCA #設(shè)定存取CA憑證的路徑并將blave改成你自己的路徑 default_days= 3650 #設(shè)定憑證可使用的天數(shù) default_bits = 2048 #設(shè)定公鑰長度(bits)
2.3.3 產(chǎn)生CA憑證
我們所產(chǎn)生的CA憑證,將放置在 ~/openssl/ssl/misc/demoCA目錄下,以下我們將介紹如何產(chǎn)生出最上層的CA憑證。
STEP 01 執(zhí)行CA憑證產(chǎn)生程序。
cd ~/openssl/ssl/misc ./CA.sh -newca CA certificate filename (or enter to create) [enter] Making CA certificate ... Generating a 1024 bit RSA private key .............................................................++++++ ..++++++ writing new private key to './demoCA/private/./cakey.pem' Enter PEM pass phrase:[設(shè)定通行碼] Verifying - Enter PEM pass phrase:[確認(rèn)通行碼] ----- 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) [GB]: CN State or Province Name (full name) [Berkshire]:Beijing Locality Name (eg, city) [Newbury]:Taichung Organization Name (eg, company) [My Company Ltd]:Tung-hai University Organizational Unit Name (eg, section) []:ISLAB Common Name (eg, your name or your server's hostname) []:ISLAB_CA Email Address []:blave@islab.csie.cn
STEP 02 確定CA憑證及公鑰是否產(chǎn)生。
cd ~/openssl/ssl/misc/demoCA ls cacert.pem certs crl index.txt newcerts private serial
“cacert.pem”即是CA之憑證,而“private”目錄即是存放CA私鑰之處。
STEP 03 設(shè)定CA憑證之存取權(quán)限,僅允許本人能存取,其他人必須限制存取權(quán)限。
chmod -R 660~/openssl/ssl/misc/demoCA
2.3.4 CA產(chǎn)生次級憑證
在CA憑證產(chǎn)生完之后,我們便可以產(chǎn)生使用者或公司所需要的憑證,此次級憑證產(chǎn)生后,使用者便可應(yīng)用于E-mail簽章加密或HTTPS等SSL傳輸加密。
STEP 01 產(chǎn)生使用者的公鑰及CSR文件(Certificate Signing Request)。
cd ~/openssl/ssl/misc/demoCA ~/openssl/bin/openssl req -nodes -new -keyout islab_key.pem \ -out islab_req.pem -days 3650-config ~/openssl/ssl/openssl.cnf #此處“-keyout”即為產(chǎn)生Private key的文件名,我們以“islab_key.pem”為例 #,你可自行設(shè)定。而“-out”則產(chǎn)生CSR的文件名,我們以“islab_req.pem”為例。 Generating a 2048 bit RSA private key ..........................................................+++ ..............................................................................+++ writing new private key to 'islab_key.pem' ----- 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) [TW]:Cn State or Province Name (full name) [TAIWAN]:beijing Locality Name (eg, city) []:Taichung Organization Name (eg, company) [THU]:THU Organizational Unit Name (eg, section) []:ISLAB Common Name (eg, YOUR name) []:blave@islab.csie.cn #Common Name請輸入你所欲使用的名稱,如此憑證產(chǎn)生后欲使用于E-mail #簽章,則必須填入E-mail名稱;若此憑證欲使用在HTTPS,則必須填網(wǎng)址。 E-mail Address []:blave@islab.csie.cn Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:[password] An optional company name []:[company] #以上兩項可隨意輸入即可。
STEP 02 產(chǎn)生使用者的憑證。
~/openssl/bin/openssl ca -config ~/openssl/ssl/openssl.cnf \ -policy policy_anything -out islab_cert.pem -infiles islab_req.pem Using configuration from /home/blave/openssl/ssl/openssl.cnf Enter pass phrase for /home/blave/openssl/ssl/misc/demoCA/private/cakey.pem:[輸入 CA通行碼] Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Feb 24 14:34:582005 GMT Not After : Feb 22 14:34:582015 GMT Subject: countryName = CN stateOrProvinceName = Beijing localityName = Taichung organizationName = THU organizationalUnitName = ISLAB commonName = blave@islab.csie.cn emailAddress = blave@islab.csie.cn X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: EC:88:66:DE:FF:79:CE:81:C2:EE:93:BF:9A:65:92:3B:AC:2C:CD:7E X509v3 Authority Key Identifier: keyid:37:AA:42:CF:FA:D9:73:C7:80:E5:0C:E2:9F:7B:95:86:40:66:72:C5 DirName:/C=TW/ST=Taiwan/L=Taichung/O=Tung-hai University/OU=ISLAB/CN= ISLAB_CA/emailAddress=blave@islab.csie.cn serial:00 Certificate is to be certified until Feb 22 14:34:582015 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
STEP 03 檢查憑證是否產(chǎn)生。
cd ~/openssl/ssl/misc/demoCA ls cacert.pem crl index.txt.attr islab_cert.pem islab_req.pem private serial.old certs index.txt index.txt.old islab_key.pem newcerts serial
islab_cert.pem、islab_req.pem及islab_key.pem分別為剛剛所產(chǎn)生出來的憑證、CSR及Private Key。
2.3.5 OpenSSL應(yīng)用
1.以cacert驗證產(chǎn)生出來的使用者cert
~/openssl/bin/openssl verify -CApath . \ -CAfile cacert.pem islab_cert.pem
2.檢查產(chǎn)生的序號
~/openssl/bin/openssl x509-noout -serial -in islab_cert.pem serial=01
3.檢查發(fā)行者的信息
~/openssl/bin/openssl x509-noout -issuer -in islab_cert.pem issuer= /C=TW/ST=TAIWAN/L=Taichung/O=THU/OU=ISLAB/CN=www.tekgate.idv.tw/emailAddress= blave@mail.tekgate.cn
4.檢查憑證起始及終止日期時間
~/openssl/bin/openssl x509-noout -in islab_cert.pem -dates notBefore=Feb 24 07:54:162005 GMT notAfter=Feb 22 07:54:162015 GMT
5.檢查個人憑證信息Subject
~/openssl/bin/openssl x509-noout -in islab_cert.pem -subject subject= /C=TW/ST=TAIWAN/L=Taichung/O=THU/OU=CSIE/CN=blave@mail.tekgate.idv.tw/ emailAddress= blave@mail.tekgate.cn
6.檢查MD5 Fingerprint
~/openssl/bin/openssl x509-noout -in islab_cert.pem -fingerprint MD5 Fingerprint=A4:A1:95:41:CC:26:18:00:AA:16:07:25:A8:5F:65:6E
7.檢查SHA-1 Fingerprint
~/openssl/bin/openssl x509-noout -in islab_cert.pem -fingerprint -sha1 SHA1 Fingerprint=B2:D7:CF:DF:DA:B7:A6:3B:4C:99:3A:94:52:64:B8:28:0B:3A:24:9D
8.由PEM轉(zhuǎn)至PKCS12
Microsoft Outlook Express使用PKCS12格式,因此若要使用Microsoft Outlook Express寄出簽章信件,只要將產(chǎn)生出來的.p12文檔安裝在Windows下即可。
~/openssl/bin/openssl pkcs12-export -in islab_cert.pem -out islab_cert.p12-name "Blave's Certificate" -inkey islab_key.pem Enter Export Password: Verifying - Enter Export Password:
9.由PKCS12轉(zhuǎn)至PEM
(1)由PKCS12產(chǎn)生Private Key
~/openssl/bin/openssl pkcs12-in islab_cert.p12-out islab_key2.pem Enter Import Password: MAC verified OK Enter PEM pass phrase: Verifying - Enter PEM pass phrase:
(2)再由Private Key產(chǎn)生憑證
~/openssl/bin/openssl x509-in islab_key2.pem -text \ -out islab_cert2.pem
10.文件加密
“islab_cert.pem”為個人憑證,可以公開給大家,因此若加密傳送一文件,便可以依下列方式加密。編輯一純文字文件,在此預(yù)設(shè)文件名為“document.txt”,而經(jīng)加密的文件名為“document.enc”。
echo "This is a text file." > document.txt cat document.txt This is a text file. ~/openssl/bin/openssl smime -encrypt -in document.txt \ -out document.enc islab_cert.pem cat document.enc MIME-Version: 1.0 Content-Disposition: attachment; filename="smime.p7m" Content-Type: application/x-pkcs7-mime; name="smime.p7m" Content-Transfer-Encoding: base64 MIICFgYJKoZIhvcNAQcDoIICBzCCAgMCAQAxggG5MIIBtQIBADCBnDCBljELMAkG A1UEBhMCVFcxDzANBgNVBAgTBlRBSVdBTjERMA8GA1UEBxMIVGFpY2h1bmcxDDAK … (略) … DQEHATAaBggqhkiG9w0DAjAOAgIAoAQIIyXl/VHcSASAGOtS9efsvXwqks1LmBp6 irSgxerAE6TShw==
11.文件解密
倘若我們收到了傳送的“document.enc”,我們便能使用Private Key來進(jìn)行解密。
~/openssl/bin/openssl smime -decrypt -in document.enc \ -recip islab_cert.pem -inkey islab_key.pem This is a text file.
12.文件簽章
為文件簽章可證明文件的來源無誤,并且可以驗證文件是否被篡改。為一純文字文件“document.txt”簽章,簽章后文件名為“document.sig”。
~/openssl/bin/openssl smime -sign -inkey islab_key.pem \ -signer islab_cert.pem -in document.txt -out document.sig cat document.sig MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg= sha1; boundary="----F565CC3F7AEE7ACC3F74CA855D8EC920" This is an S/MIME signed message ------F565CC3F7AEE7ACC3F74CA855D8EC920 This is a text file. ------F565CC3F7AEE7ACC3F74CA855D8EC920 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIIHBgYJKoZIhvcNAQcCoIIG9zCCBvMCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3 DQEHAaCCBFYwggRSMIIDu6ADAgECAgEBMA0GCSqGSIb3DQEBBAUAMIGWMQswCQYD … (略) … ------F565CC3F7AEE7ACC3F74CA855D8EC920-
13.文件簽章驗證
當(dāng)收到這份文件時,可利用我們的憑證(islab_cert.pem)及CA憑證(cacert.pem)來驗證文件。
~/openssl/bin/openssl smime -verify -in document.sig \ -signer islab_cert.pem -out document.txt -CAfile cacert.pem Verification successful
驗證方必須事先取得CA憑證(cacert.pem)方可驗證文件。
14.文件加密并簽章
我們已經(jīng)知道如何加解密,以及簽章驗證的方法,即我們必須先將文件進(jìn)行簽章再加密,而收方則以相反步驟進(jìn)行解密再驗證即可(如圖2-4所示)。

圖2-4 文件加密并簽章的流程
2.3.6 OpenSSL常用命令
OpenSSL有兩種運(yùn)行模式:交互模式和批處理模式。直接輸入“openssl”回車進(jìn)入交互模式,輸入帶命令選項的“openssl”進(jìn)入批處理模式。OpenSSL命令列表如圖2-5所示。

圖2-5 OpenSSL命令列表
● enc:通用加密程序,可以使用不同的加密組合完成加密,輸入及輸出可以通過Base64編碼轉(zhuǎn)換。
● dgst:通用郵件文摘,使用MD2、MD5、SHA (SHA-0或SHA-1)或者M(jìn)DC2等算法。
● asn1parse:分解并顯示ASN1編碼的二進(jìn)制文件。
● rsa:操縱RSA私鑰。
● dsa:操縱DSA私鑰。
● dh:操縱Diffie-Hellman參數(shù)文件。
● dsaparam:操縱并產(chǎn)生DSA參數(shù)文件。
● crl2pkcs7:產(chǎn)生包括了一個CRL和證書的PKCS7對象。
● x509:操縱X.509證書,“自簽”證書。
● req:操縱PKCS10證書需求,并且產(chǎn)生證書請求。
● genrsa:產(chǎn)生一個任意大小的RSA私鑰。
● gendh:產(chǎn)生一組Diffie-Hellman參數(shù)。
● ca:從PKCS10證書請求產(chǎn)生一個證書,該程序同時維護(hù)著所頒發(fā)的證書的數(shù)據(jù)庫。
● verify:檢測X.509證書的簽名。
OpenSSL的指令和選項繁多,這里主要介紹幾個常用的。
1.OpenSSL指令gendsa
格式:
openssl gendsa [-out filename] [-des] [-des3] [-idea] [-rand file(s)] [paramfile]
描述:本指令由DSA參數(shù)來產(chǎn)生DSA的一對密鑰。“dsa”參數(shù)可以用“dsaparam”來產(chǎn)生。
主要選項如下。
● -des/-des3/-idea:采用什么加密算法來加密我們的密鑰。一般會要你輸入保護(hù)密碼。如果這三個中一個也沒設(shè)置,我們的密鑰將不被加密而輸入。
● -rand file(s):產(chǎn)生Key的時候用過Seed的文件,可以把多個文件用冒號分開一起做Seed。
● paramfile:指定使用的DSA參數(shù)文件。
2.OpenSSL指令genrsa
格式:
openssl genrsa[-out filename][-passout arg][-des][-des3][-idea] [-f4][-3][-rand file(s)] [numbits]
描述:本指令是生成RSA私有密鑰的工具。
主要選項如下。
● -out filename:私有密鑰輸入文件名,默認(rèn)為標(biāo)準(zhǔn)輸出。
● -passout arg:參看指令“dsa”里面的“passout”參數(shù)說明。
● -f4|-3:使用的公共組件,一種是3,一種是f4。
● -rand file(s):產(chǎn)生Key的時候用過Seed的文件,可以把多個文件用冒號分開一起做Seed。
● numbits:指明產(chǎn)生的參數(shù)的長度。必須是本指令的最后一個參數(shù),如果沒有指明,則產(chǎn)生512bit長的參數(shù)。
3.OpenSSL指令rand
格式:
openssl rand [-out file] [-rand file(s)] [-base64] num
描述:本命令用來產(chǎn)生偽隨機(jī)字節(jié)。隨機(jī)數(shù)字產(chǎn)生器需要一個Seed,在沒有/dev/srandom情況下的解決方法是自己做一個~/.rnd文件。
主要選項如下:
● -out file:輸出文件。
● -rand file(s):產(chǎn)生隨機(jī)數(shù)字的時候用過Seed的文件,可以把多個文件用冒號分開一起做Seed。
● -base64:對產(chǎn)生的東西進(jìn)行Base64編碼。
● num:指明產(chǎn)生多少字節(jié)隨機(jī)數(shù)。
- 人工智能數(shù)學(xué)基礎(chǔ)
- 普林斯頓計算機(jī)公開課(原書第2版)
- 全國高等院校計算機(jī)基礎(chǔ)教育研究會2016年會學(xué)術(shù)論文集(高職)
- 微課設(shè)計與制作標(biāo)準(zhǔn)教程(全彩微課版)
- 計算機(jī)應(yīng)用基礎(chǔ)任務(wù)教程
- 群智能算法在人腦功能劃分中的應(yīng)用
- 大學(xué)計算機(jī)基礎(chǔ)(第4 版):計算思維
- 計算光刻與版圖優(yōu)化
- 解憂程序員:高薪編程、求職面試與成長轉(zhuǎn)型寶典
- 計算機(jī)導(dǎo)論(第三版)
- 精通ArcGIS Server應(yīng)用與開發(fā)
- 計算機(jī)應(yīng)用基礎(chǔ)教程(第二版)
- 醫(yī)學(xué)計算機(jī)應(yīng)用基礎(chǔ)(第二版)
- 計算機(jī)信息管理基礎(chǔ)
- 計算機(jī)基礎(chǔ)項目式教程(Windows 7+Office 2010)(第2版)