免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1466 | 回复: 0
打印 上一主题 下一主题

CA建置工具Openssl的管理與使用介紹(下) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-23 21:25 |只看该作者 |倒序浏览
CA工具
〔資訊安全〕
  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,可以在
      http://www.drh-consultancy.demon.co.uk/pkcs12faq.html之網
      址找到相關說明。
    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建置、管理與應
    用,將有其一定之發展與重要性。為使得使用者能在眾多使用工具
    中多一些資訊應用安全上的選擇,希望本文將提供使用者另一種應
    用層面上的思考,並減輕一些資訊流通、交換所帶來之疑懼,從而
    建立更為安全之資訊應用機制與環境。(全文完)


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/2389/showart_27387.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP