官术网_书友最值得收藏!

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ù)。

主站蜘蛛池模板: 来凤县| 平塘县| 濉溪县| 江川县| 迭部县| 吴堡县| 惠东县| 沭阳县| 三原县| 平果县| 新乡市| 连城县| 洛宁县| 出国| 眉山市| 汾西县| 山丹县| 文登市| 廊坊市| 绥滨县| 临澧县| 额尔古纳市| 富裕县| 贵州省| 长治市| 宁德市| 河南省| 柘城县| 射洪县| 台北县| 河曲县| 宁阳县| 钟祥市| 旬阳县| 正宁县| 会宁县| 榆社县| 铁力市| 南皮县| 祁连县| 大竹县|