分类: 系统运维
2005-05-23 21:25:17
〔資訊安全〕
CA建置工具Openssl的管理與使用介紹(下)
陸維肇
b)Serial Number
CA簽發certificate時,會以serial number紀錄每份certificate
所發行的序號,它以16進位方式來表示。我們可以用下面的指令
來檢查certificate的serial number:
$ openssl x509 -noout -serial -in mycert.pem
serial=01
在此例中,serial=01代表這份certificate是CA第一份所簽發出來。
c)Issuer
Issuer就是發行certificate的CA,當我拿到一份別人的certificate
時,可以從issuer知道是由哪一個CA發行的,然後再取得CA的
certificate對其做驗證:
$ openssl x509 -noout -issuer -in mycert.pem
issuer= /C=TW/O=AS/CN=Sinica
由上例所看到certificate的issuer為Sinica。
d)Start Date & Expire Date
每份certificate都有啟始時間(start date)與終止時間(expire date),
在這段時間之內是certificate的有效日期,如果過期的話,就要
重新申請,要求CA重新簽發:
$ openssl x509 -noout -in mycert.pem -dates
notBefore=Jul 25 09:39:40 2002 GMT
notAfter=Jul 25 09:39:40 2003 GMT
noBefore紀錄的為啟始時間;notAfter紀錄的為終止時間。
e)Subject
Subject即user在產生certificate signing request時所填的資
料,代表個人的身份資料:
$ openssl x509 -in mycert.pem -noout -subject
subject= /C=TW/O=AS/OU=AS/CN=Chih-ChiangChang/Email=ccchang@beta.wsl.sinica.edu.tw
f)Public Key
顯示內含在certificate內的public key:
$ openssl x509 -in mycert.pem -noout -modulus
Modulus=CFDE135C3DE935FAEC7E7149439C901DF7AE3704440D8CB7
8B17A5DB1046DFA284CA6026534A8751C185562EE49207C744DB00D9
26BCF95C48A6530ED41315CD7E208D1746D9B67553FF094161183017
41ED9015B558D02EDAD5A1620A980E91D89D02AABC75287C5043D965
D2BC46C0BB2807A7D3AA047A6D3960738A563977
g)MD5 Fingerprint
MD5 fingerprint是由全部的certificate內容經由MD5 hash algorithm
編碼後所產生固定長度的輸出。編碼結果會因為certificate內容
的些微差異而不同,因此,MD5 fingerprint可以用來檢查certificate
是否有被更動過,或兩份certificate內容是否一致:
$ openssl x509 -in mycert.pem -noout -fingerprint
MD5 Fingerprint=88:65:5A:9C:58:4B:15:5C:
88:C5:D7:54:36:30:85:FB
h)SHA1 Fingerprint
SHA1 fingerpint用意與MD5 fingerprint相同,只是改為SHA1 hash
algorithm。在Netscape當中,使用的是MD5演算法;而在MSIE當
中所使用的則是SHA1演算法。
$ openssl x509 -sha1 -in user.pem -noout -fingerprint
SHA1 Fingerprint=BA:C2:06:16:58:CA:AA:
64:99:86:AD:E0:D8:A8:C0:38:BE:1F:20:A4
3.轉換檔案格式(PEM/PKCS#12)
在Netscape與MSIE當中所支援的certificate格式是PKCS#12 format,
而不是PEM format,其內容是一堆無法閱讀的binary格式。Import
certificate到Netscape或MSIE,必須先轉成PKCS#12的檔案格式。
有關PKCS#12的FAQ,可以在
之網
址找到相關說明。
a)由PEM轉成PKCS#12:
轉成PKCS#12檔案格式除了要certificate外,還要user的private
key,並會要求輸入private key的passphrass。此外,程式還會
額外要求加上一個Export Password,且在往後要import這個PKCS#12
格式的certificate到browser時,會要求輸入這組export password,
此乃因為PKCS#12檔內含user的private key,而export password
可以防止其他人隨意使用:
$ openssl pkcs12 -export -in mycert.pem -out
mycert.p12 -name “My Certificate” -inkey
mykey.pem
-export:產生一個PKCS#12檔
-in:使用者的certificate
-out:輸出檔名
-name:取一個friendly的名稱,當被browser import使用時,會以
此名稱顯示。
-inkey:使用者的private key
b)由PKCS#12轉成PEM:
$ openssl pkcs12 -in mycert.p12 -out cert_key.pem
由PKCS#12格示轉回的內容包括user的certificate與private key。
我們可利用如下指令將certificate extract出來,可以得到與原
來的mycert.pem檔完全相同的內容:
$ openssl x509 -in cert_key.pem -text -out mycert2.pem
$ diff mycert.pem mycert2.pem
相關應用
經過前暑之各步驟執行之後,至此,我們可謂已經擁有了自己一
把private key(mykey.pem)以及一份由Sinica CA所簽發出來的
certificate(mycert.pem)。以下接著將介紹使用private key與
certificate的基本應用,包括:文件加密(Encrypt)與解密
(Decrypt)、文件簽章(Sign Signature)與驗證簽章(Verify
Signature)等應用。
1.文件加密(Encrypt)解密(Decrypt)
由於certificate是對外公開的,因此,假設我的朋友要送一份文
件給我,他可以使用我的certificate來對文件加密,而這份文件
只有用我的private key才能解開。以下範例將示範對文件如何加
密,並檢視內容的差異:
明文文件(plain text):test.txt
密文文件(cipher text):test.msg
$ cat test.txt
this is a test file
$ openssl smime -encrypt -in test.txt -out test.msg mycert.pem
$ cat test.msg
MIME-Version: 1.0
Content-Disposition: attachment; filename=“smime.p7m”
Content-Type: application/x-pkcs7-mime; name=“smime.p7m”
Content-Transfer-Encoding: base64
MIIBJgYJKoZIhvcNAQcDoIIBFzCCARMCAQAxgcowgccCAQAwMDArMQsw
CQYDVQQGEwJUVzELMAkGA1UEChMCQVMxDzANBgNVBAMTBlNpbmljYQIB
ATANBgkqhkiG9w0BAQEFAASBgKUPraw5n7SFYxePNAacBQjsKxbSzToq
hi4eb8+PnDU27COVfNrs5sH7YhaNfv5DA6m0mRL+72tZYaNLWFabZQt1
6+j2+BNFLq2Q+tpWkgEOkQl5C5y4jPSTGn196McHRvAM0F9xTzcXnpU0
5EkvgXOMuwnk2Q5yO+hOio2j6ZpVMEEGCSqGSIb3DQEHATAaBggqhkiG
9w0DAjAOAgIAoAQIfaLelEC1pdiAGDWM4QdUhbKoRSnolqgfMe8FFZUb
lNEeIA==
加密過的文件test.msg只能使用我的private key解開。我們以下列
之指令為上述密文解密:
$ openssl smime -decrypt -in test.msg -recip mycert.pem -inkey mykey.pem
Enter PEM pass phrase:
this is a test file
在輸入private key的passphrase後,果然得到相同的內容。
2.文件簽章(Sign Signature)& 驗證簽章(Verify Signature)
文件簽章的用意在於確認發件者(sender)的身份以及文章的完
整性(integrity),而不在資料的保密。簽章者使用private
key對文件簽章將文件送出後,收件者可以使用簽章者的certificate
來驗證這份文件的來源,以及確認該文件是否被更動過。下例子
中將使用我的private key對文件進行簽章:
$ openssl smime -sign -inkey mykey.pem -signer mycert.pem -in test.txt -out test.sig
$ cat test.sig
MIME-Version: 1.0
Content-Type: multipart/signed; protocol=“application/x-pkcs7-signature”; micalg=sha1;
boundary=“----2DCFB33BAC7791CDAD3CFC6C779187E2”
This is an S/MIME signed message
------2DCFB33BAC7791CDAD3CFC6C779187E2
this is a test file
------2DCFB33BAC7791CDAD3CFC6C779187E2
Content-Type: application/x-pkcs7-signature; name=“smime.p7s”
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=“smime.p7s”
MIID0gYJKoZIhvcNAQcCoIIDwzCCA78CAQExCzAJBgUrDgMCGgUAMAsGCS
qGSIb3DQEHAaCCAhAwggIMMIIBdQIBATANBgkqhkiG9w0BAQQFADArMQsw
CQYDVQQGEwJ5NDBaFw0wMzA3MjUwOTM5NDBaMHIxCzAJBgNVBAYTAlRXMQ
swCQYDVQQKEwJBUzELMAkGA1UECxMCQVMxGjAYBgNVBAMTEUNoaWgtQ2hp
YW5nIENoYW5nMS0------2DCFB33BAC7791CDAD3CFC6C779187E2--
test.sig文件中最後附上的是使用者的signature。當收件者收到
這封文件時,他可以使用我的certificate來驗證這份文件的來源:
$ openssl smime -verify -in test.sig -signer mycert.pem -out test.txt
Verification Failure
27686:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify
error:pk7_smime.c:213:Verify error:unable to get local issuer certificate
此例中出現驗證錯誤訊息,此可由error message看出它找不到
issuer的certificate,因此,必不能直接拿certificate就可以驗
證簽章。實際上驗證的步驟如下:
a)驗證certificate是否有效;
b)如果有效,才能拿certificate驗證簽章。
因此,上述的指令必須稍微修正,在指令最後再加上-CAfile,指
定CA的certificate,CAfile內包含Central CA與Sinica CA的certificate,
用法與前面驗證Certificate所介紹的相同:
$ openssl smime -verify -in test.sig -signer mycert.pem -out test.txt -CAfile ca-list.pem
Verification Successful
利用pipe組合上述之指令,能夠使傳送文件達到同時確認發信來
源,又能確保資料安全的目的:
a)發信人對文件簽章再用收信人之certificate對訊息加密:
openssl smime -sign -in test.txt -signer sender.pem -inkey sender.key |
openssl smime -encrypt -out mail.msg receiver.pem
b)收信人用private key對文件解密,再以送件者的certificate來驗證簽章:
openssl smime -decrypt -in mail.msg -recip receiver.pem -inkey receiver.key|
openssl smime -verify -signer sender.pem -CAfile ca-list.pem
結語
網路的發達使得資訊的使用日益便捷而快速,然而卻也相對引發
諸如資訊內容安全性的考量與疑慮。對此,有關CA建置、管理與應
用,將有其一定之發展與重要性。為使得使用者能在眾多使用工具
中多一些資訊應用安全上的選擇,希望本文將提供使用者另一種應
用層面上的思考,並減輕一些資訊流通、交換所帶來之疑懼,從而
建立更為安全之資訊應用機制與環境。(全文完)