<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    零全零美(www.zzgwt.com)
    生活中的很多事情,并不像If...Else那么簡(jiǎn)單!
    posts - 96,comments - 52,trackbacks - 0
    發(fā)信站:BBS水木清華站(FriNov1020:29:282000)

    引用請(qǐng)指明原作譯者fordesign@21cn.com

    二證書(shū)



    證書(shū)就是數(shù)字化的文件,里面有一個(gè)實(shí)體(網(wǎng)站,個(gè)人等)的公共密鑰和其他的屬性,如名稱(chēng)等。該公共密鑰只屬于某一個(gè)特定的實(shí)體,它的作用是防止一個(gè)實(shí)體假裝成另外一個(gè)實(shí)體。

    證書(shū)用來(lái)保證不對(duì)稱(chēng)加密算法的合理性。想想吧,如果沒(méi)有證書(shū)記錄,那么假設(shè)某倆人A與B的通話(huà)過(guò)程如下:

    這里假設(shè)A的publickey是K1,privatekey是K2,B的publickey是K3,privatekey是K4

    xxxxxx(kn)表示用kn加密過(guò)的一段文字xxxxxx

    A-----〉hello(plaintext)-------------〉B
    A〈---------hello(plaintext)〈---------B
    A〈---------Bspublickey〈------------B
    A---------〉spublickey(K1)--------〉B
    ......



    如果C想假裝成B,那么步驟就和上面一樣。
    A-----〉hello(plaintext)-------------〉C
    A〈---------hello(plaintext)〈---------C

    注意下一步,因?yàn)锳沒(méi)有懷疑C的身份,所以他理所當(dāng)然的接受了C的publickey,并且使用這個(gè)key來(lái)繼續(xù)下面的通信。

    A〈---------Cspublickey〈------------C
    A---------〉A(chǔ)spublickey(K1)--------〉C
    ......

    這樣的情況下A是沒(méi)有辦法發(fā)覺(jué)C是假的。如果A在通話(huà)過(guò)程中要求取得B的證書(shū),并且驗(yàn)證證書(shū)里面記錄的名字,如果名字和B的名字不符合,就可以發(fā)現(xiàn)對(duì)方不是B.驗(yàn)證B的名字通過(guò)再?gòu)淖C書(shū)里面提取B的公用密鑰,繼續(xù)通信過(guò)程。


    那么,如果證書(shū)是假的怎么辦?或者證書(shū)被修改過(guò)了怎么辦?慢慢看下來(lái)吧。


    證書(shū)最簡(jiǎn)單的形式就是只包含有證書(shū)擁有者的名字和公用密鑰。當(dāng)然現(xiàn)在用的證書(shū)沒(méi)這么簡(jiǎn)單,里面至少還有證書(shū)過(guò)期的deadline,頒發(fā)證書(shū)的機(jī)構(gòu)名稱(chēng),證書(shū)系列號(hào),和一些其他可選的信息。最重要的是,它包含了證書(shū)頒發(fā)機(jī)構(gòu)(certificationauthority簡(jiǎn)稱(chēng)CA)的簽名信息。

    我們現(xiàn)在常用的證書(shū)是采用X.509結(jié)構(gòu)的,這是一個(gè)國(guó)際標(biāo)準(zhǔn)證書(shū)結(jié)構(gòu)。任何遵循該標(biāo)準(zhǔn)的應(yīng)用程序都可以讀,寫(xiě)X509結(jié)構(gòu)的證書(shū)。

    通過(guò)檢查證書(shū)里面的CA的名字,和CA的簽名,就知道這個(gè)證書(shū)的確是由該CA簽發(fā)的然后,你就可以簡(jiǎn)單證書(shū)里面的接收證書(shū)者的名字,然后提取公共密鑰。這樣做建立的基礎(chǔ)是,你信任該CA,認(rèn)為該CA沒(méi)有頒發(fā)錯(cuò)誤的證書(shū)。

    CA是第三方機(jī)構(gòu),被你信任,由它保證證書(shū)的確發(fā)給了應(yīng)該得到該證書(shū)的人。CA自己有一個(gè)龐大的publickey數(shù)據(jù)庫(kù),用來(lái)頒發(fā)給不同的實(shí)體。

    這里有必要解釋一下,CA也是一個(gè)實(shí)體,它也有自己的公共密鑰和私有密鑰,否則怎么做數(shù)字簽名?它也有自己的證書(shū),你可以去它的站點(diǎn)down它的證書(shū)得到它的公共密鑰。

    一般CA的證書(shū)都內(nèi)嵌在應(yīng)用程序中間。不信你打開(kāi)你的IE,在internet選項(xiàng)里面選中"內(nèi)容",點(diǎn)擊"證書(shū)",看看那個(gè)"中間證書(shū)發(fā)行機(jī)構(gòu)"和"委托根目錄發(fā)行機(jī)構(gòu)",是不是有一大堆CA的名稱(chēng)?也有時(shí)CA的證書(shū)放在安全的數(shù)據(jù)庫(kù)里面。

    當(dāng)你接受到對(duì)方的證書(shū)的時(shí)候,你首先會(huì)去看該證書(shū)的CA,然后去查找自己的CA證書(shū)數(shù)據(jù)庫(kù),看看是否找的到,找不到就表示自己不信任該CA,那么就告吹本次連接。找到了的話(huà)就用該CA的證書(shū)里面的公用密鑰去檢查CA在證書(shū)上的簽名。

    這里又有個(gè)連環(huán)的問(wèn)題,我怎么知道那個(gè)CA的證書(shū)是屬于那個(gè)CA的?人家不能造假嗎?

    解釋一下吧。CA也是分級(jí)別的。最高級(jí)別的CA叫RootCAs,其他cheap一點(diǎn)的CA的證書(shū)由他們來(lái)頒發(fā)和簽名。這樣的話(huà),最后的保證就是:我們信任RootCAs.那些有RootCAs簽名過(guò)的證書(shū)的CA就可以來(lái)頒發(fā)證書(shū)給實(shí)體或者其他CA了。

    你不信任RootCAs?人民幣由中國(guó)人民銀行發(fā)行,運(yùn)到各個(gè)大銀行,再運(yùn)到地方銀行,你從地方銀行取人民幣的時(shí)候不信任發(fā)行它的中國(guó)人民銀行嗎?RootCAs都是很權(quán)威的機(jī)構(gòu),沒(méi)有必要擔(dān)心他們的信用。

    那RootCAs誰(shuí)給簽名?他們自己給自己簽名,叫自簽名.

    說(shuō)了這么多,舉個(gè)certificate的例子吧,對(duì)一些必要的item解釋一下。

    CertificateExample
    Certificate:
    Data:
    Version:1(0x0)
    SerialNumber://系列號(hào)
    02:41:00:00:16
    SignatureAlgorithm:md2WithRSAEncryption//CA同志的數(shù)字簽名的算法
    Issuer:C=US,O=RSADataSecurity,Inc.,OU=Commercial//CA自報(bào)家門(mén)
    Certification
    Authority
    Validity
    NotBefore:Nov418:58:341994GMT//證書(shū)的有效期
    NotAfter:Nov318:58:341999GMT
    Subject:C=US,O=RSADataSecurity,Inc.,OU=Commercial
    CertificationAuthority
    SubjectPublicKeyInfo:
    PublicKeyAlgorithm:rsaEncryption
    RSAPublicKey1000bit)
    Modulus(1000bit):
    00:a4:fb:81:62:7b:ce:10:27:dd:e8:f7:be:6c:6e:
    c6:70:99:db:b8:d5:05:03:69:28:82:9c:72:7f:96:
    3f:8e:ec:ac:29:92:3f:8a:14:f8:42:76:be:bd:5d:
    03:b9:90:d4:d0:bc:06:b2:51:33:5f:c4:c2:bf:b6:
    8b:8f:99:b6:62:22:60:dd:db:df:20:82:b4:ca:a2:
    2f:2d:50:ed:94:32:de:e0:55:8d:d4:68:e2:e0:4c:
    d2:cd:05:16:2e:95:66:5c:61:52:38:1e:51:a8:82:
    a1:c4:ef:25:e9:0a:e6:8b:2b:8e:31:66:d9:f8:d9:
    fd:bd:3b:69:d9:eb
    Exponent:65537(0x10001)
    SignatureAlgorithm:md2WithRSAEncryption
    76:b5:b6:10:fe:23:f7:f7:59:62:4b:b0:5f:9c:c1:68:bc:49:
    bb:b3:49:6f:21:47:5d:2b:9d:54:c4:00:28:3f:98:b9:f2:8a:
    83:9b:60:7f:eb:50:c7:ab:05:10:2d:3d:ed:38:02:c1:a5:48:
    d2:fe:65:a0:c0:bc:ea:a6:23:16:66:6c:1b:24:a9:f3:ec:79:
    35:18:4f:26:c8:e3:af:50:4a:c7:a7:31:6b:d0:7c:18:9d:50:
    bf:a9:26:fa:26:2b:46:9c:14:a9:bb:5b:30:98:42:28:b5:4b:
    53:bb:43:09:92:40:ba:a8:aa:5a:a4:c6:b6:8b:57:4d:c5

    其實(shí)這是我們看的懂的格式的證書(shū)內(nèi)容,真正的證書(shū)都是加密過(guò)了的,如下:



    -----BEGINCERTIFICATE-----

    MIIDcTCCAtqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBiDELMAkGA1UEBhMCQ0gx

    EjAQBgNVBAgTCWd1YW5nZG9uZzESMBAGA1UEBxMJZ3Vhbmd6aG91MREwDwYDVQQK

    Ewhhc2lhaW5mbzELMAkGA1UECxMCc3cxDjAMBgNVBAMTBWhlbnJ5MSEwHwYJKoZI

    hvcNAQkBFhJmb3JkZXNpZ25AMjFjbi5jb20wHhcNMDAwODMwMDc0MTU1WhcNMDEw

    ODMwMDc0MTU1WjCBiDELMAkGA1UEBhMCQ0gxEjAQBgNVBAgTCWd1YW5nZG9uZzES

    MBAGA1UEBxMJZ3Vhbmd6aG91MREwDwYDVQQKEwhhc2lhaW5mbzELMAkGA1UECxMC

    c3cxDjAMBgNVBAMTBWhlbnJ5MSEwHwYJKoZIhvcNAQkBFhJmb3JkZXNpZ25AMjFj

    bi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMDYArTAhLIFacYZwP30

    Zu63mAkgpAjVHaIsIEJ6wySIZl2THEHjJ0kS3i8lyMqcl7dUFcAXlLYi2+rdktoG

    jBQMOtOHv1/cmo0vzuf38+NrAZSZT9ZweJfIlp8W9uyz8Dv5hekQgXFg/l3L+HSx

    wNvQalaOEw2nyf45/np/QhNpAgMBAAGjgegwgeUwHQYDVR0OBBYEFKBL7xGeHQSm

    ICH5wBrOiqNFiildMIG1BgNVHSMEga0wgaqAFKBL7xGeHQSmICH5wBrOiqNFiild

    oYGOpIGLMIGIMQswCQYDVQQGEwJDSDESMBAGA1UECBMJZ3Vhbmdkb25nMRIwEAYD

    VQQHEwlndWFuZ3pob3UxETAPBgNVBAoTCGFzaWFpbmZvMQswCQYDVQQLEwJzdzEO

    MAwGA1UEAxMFaGVucnkxITAfBgkqhkiG9w0BCQEWEmZvcmRlc2lnbkAyMWNuLmNv

    bYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAGQa9HK2mixM7ML7

    0jZr1QJUHrBoabX2AbDchb4Lt3qAgPOktTc3F+K7NgB3WSVbdqC9r3YpS23RexU1

    aFcHihDn73s+PfhVjpT8arC1RQDg9bDPvUUYphdQC0U+HF72/CvxGCTqpnWiqsgw

    xqeog0A8H3doDrffw8Zb7408+Iqf

    -----ENDCERTIFICATE-----



    證書(shū)都是有壽命的。就是上面的那個(gè)NotBefore和NotAfter之間的日子。過(guò)期的證書(shū),如果沒(méi)有特殊原因,都要擺在證書(shū)回收列(certificaterevocationlist)里面.證書(shū)回收列,英文縮寫(xiě)是CRL.比如一個(gè)證書(shū)的key已經(jīng)被破了,或者證書(shū)擁有者沒(méi)有權(quán)力再使用該證書(shū),該證書(shū)就要考慮作廢。CRL詳細(xì)記錄了所有作廢的證書(shū)。

    CRL的缺省格式是PEM格式。當(dāng)然也可以輸出成我們可以讀的文本格式。下面有個(gè)CRL的例子。



    -----BEGINX509CRL-----

    MIICjTCCAfowDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMxIDAeBgNVBAoT

    F1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy

    IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Fw05NTA1MDIwMjEyMjZaFw05NTA2MDEw

    MDAxNDlaMIIBaDAWAgUCQQAABBcNOTUwMjAxMTcyNDI2WjAWAgUCQQAACRcNOTUw

    MjEwMDIxNjM5WjAWAgUCQQAADxcNOTUwMjI0MDAxMjQ5WjAWAgUCQQAADBcNOTUw

    MjI1MDA0NjQ0WjAWAgUCQQAAGxcNOTUwMzEzMTg0MDQ5WjAWAgUCQQAAFhcNOTUw

    MzE1MTkxNjU0WjAWAgUCQQAAGhcNOTUwMzE1MTk0MDQxWjAWAgUCQQAAHxcNOTUw

    MzI0MTk0NDMzWjAWAgUCcgAABRcNOTUwMzI5MjAwNzExWjAWAgUCcgAAERcNOTUw

    MzMwMDIzNDI2WjAWAgUCQQAAIBcNOTUwNDA3MDExMzIxWjAWAgUCcgAAHhcNOTUw

    NDA4MDAwMjU5WjAWAgUCcgAAQRcNOTUwNDI4MTcxNzI0WjAWAgUCcgAAOBcNOTUw

    NDI4MTcyNzIxWjAWAgUCcgAATBcNOTUwNTAyMDIxMjI2WjANBgkqhkiG9w0BAQIF

    AAN+AHqOEJXSDejYy0UwxxrH/9+N2z5xu/if0J6qQmK92W0hW158wpJg+ovV3+wQ

    wvIEPRL2rocL0tKfAsVq1IawSJzSNgxG0lrcla3MrJBnZ4GaZDu4FutZh72MR3Gt

    JaAL3iTJHJD55kK2D/VoyY1djlsPuNh6AEgdVwFAyp0v

    -----ENDX509CRL-----





    下面是文本格式的CRL的例子。

    ThefollowingisanexampleofaCRLintextformat:

    issuer=/C=US/O=RSADataSecurity,Inc./OU=SecureServerCertification

    Authority

    lastUpdate=May202:12:261995GMT

    nextUpdate=Jun100:01:491995GMT

    revoked:serialNumber=027200004CrevocationDate=May202:12:261995GMT

    revoked:serialNumber=0272000038revocationDate=Apr2817:27:211995GMT

    revoked:serialNumber=0272000041revocationDate=Apr2817:17:241995GMT

    revoked:serialNumber=027200001ErevocationDate=Apr800:02:591995GMT

    revoked:serialNumber=0241000020revocationDate=Apr701:13:211995GMT

    revoked:serialNumber=0272000011revocationDate=Mar3002:34:261995GMT

    revoked:serialNumber=0272000005revocationDate=Mar2920:07:111995GMT

    revoked:serialNumber=024100001FrevocationDate=Mar2419:44:331995GMT

    revoked:serialNumber=024100001ArevocationDate=Mar1519:40:411995GMT

    revoked:serialNumber=0241000016revocationDate=Mar1519:16:541995GMT

    revoked:serialNumber=024100001BrevocationDate=Mar1318:40:491995GMT

    revoked:serialNumber=024100000CrevocationDate=Feb2500:46:441995GMT

    revoked:serialNumber=024100000FrevocationDate=Feb2400:12:491995GMT

    revoked:serialNumber=0241000009revocationDate=Feb1002:16:391995GMT

    revoked:serialNumber=0241000004revocationDate=Feb117:24:261995GMT



    總結(jié)一下X.509證書(shū)是個(gè)什么東東吧。它實(shí)際上是建立了公共密鑰和某個(gè)實(shí)體之間聯(lián)系的數(shù)字化的文件。它包含的內(nèi)容有:

    版本信息,X.509也是有三個(gè)版本的。

    系列號(hào)
    證書(shū)接受者名稱(chēng)
    頒發(fā)者名稱(chēng)
    證書(shū)有效期
    公共密鑰
    一大堆的可選的其他信息
    CA的數(shù)字簽名

    證書(shū)由CA頒發(fā),由CA決定該證書(shū)的有效期,由該CA簽名。每個(gè)證書(shū)都有唯一的系列號(hào)。證書(shū)的系列號(hào)和證書(shū)頒發(fā)者來(lái)決定某證書(shū)的唯一身份。

    openssl有四個(gè)驗(yàn)證證書(shū)的模式。你還可以指定一個(gè)callback函數(shù),在驗(yàn)證證書(shū)的時(shí)候會(huì)自動(dòng)調(diào)用該callback函數(shù)。這樣可以自己根據(jù)驗(yàn)證結(jié)果來(lái)決定應(yīng)用程序的行為。具體的東西在以后的章節(jié)會(huì)詳細(xì)介紹的。

    openssl的四個(gè)驗(yàn)證證書(shū)模式分別是:

    SSL_VERIFY_NONE:完全忽略驗(yàn)證證書(shū)的結(jié)果。當(dāng)你覺(jué)得握手必須完成的話(huà),就選用這個(gè)選項(xiàng)。其實(shí)真正有證書(shū)的人很少,尤其在中國(guó)。那么如果SSL運(yùn)用于一些免費(fèi)的服務(wù),比如email的時(shí)候,我覺(jué)得server端最好采用這個(gè)模式。

    SSL_VERIFY_PEER:希望驗(yàn)證對(duì)方的證書(shū)。不用說(shuō)這個(gè)是最一般的模式了.對(duì)client來(lái)說(shuō),如果設(shè)置了這樣的模式,驗(yàn)證server的證書(shū)出了任何錯(cuò)誤,SSL握手都告吹.對(duì)server來(lái)說(shuō),如果設(shè)置了這樣的模式,client倒不一定要把自己的證書(shū)交出去。如果client沒(méi)有交出證書(shū),server自己決定下一步怎么做。

    SSL_VERIFY_FAIL_IF_NO_PEER_CERT:這是server使用的一種模式,在這種模式下,server會(huì)向client要證書(shū)。如果client不給,SSL握手告吹。

    SSL_VERIFY_CLIENT_ONCE:這是僅能使用在sslsessionrenegotiation階段的一種方式。什么是SSLsessionrenegotiation?以后的章節(jié)再解釋。我英文差點(diǎn),覺(jué)得這個(gè)詞組也很難翻譯成相應(yīng)的中文。以后的文章里,我覺(jué)得很難直接翻譯的單詞或詞組,都會(huì)直接用英文寫(xiě)出來(lái)。如果不是用這個(gè)模式的話(huà),那么在regegotiation的時(shí)候,client都要把自己的證書(shū)送給server,然后做一番分析。這個(gè)過(guò)程很消耗cpu時(shí)間的,而這個(gè)模式則不需要client在regotiation的時(shí)候重復(fù)送自己的證書(shū)了。
    posted on 2009-11-27 17:28 零全零美 閱讀(281) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 安全相關(guān)
    主站蜘蛛池模板: 亚洲一级片免费看| 国产1024精品视频专区免费| 亚洲成年人电影网站| 成人人免费夜夜视频观看| 国内成人精品亚洲日本语音| 亚洲人成人网站色www| 日韩版码免费福利视频| 日韩电影免费在线观看网址 | 久久久久国产精品免费免费搜索| 久久亚洲精品无码网站| 久久亚洲国产精品一区二区| 精品熟女少妇AV免费观看| 男女一进一出抽搐免费视频| 亚洲成a人片在线观看播放| 国产精品酒店视频免费看 | 四虎成人免费网站在线| 久久久久久久国产免费看| 亚洲成av人片不卡无码| 亚洲精品视频免费观看| 91手机看片国产永久免费| 一区二区在线视频免费观看| 亚洲成a人片在线看| 国产亚洲一区二区在线观看 | 亚洲国产精品线观看不卡| 精品国产日韩亚洲一区| 成全高清视频免费观看| 四虎影视在线影院在线观看免费视频 | 中文字幕手机在线免费看电影| 激情五月亚洲色图| 亚洲国产精品无码专区在线观看| 免费无码一区二区三区蜜桃大| 久久久久久久99精品免费| 免费人成大片在线观看播放| 亚洲a视频在线观看| 亚洲国产精品久久久久婷婷老年| 免费a级毛片网站| 久久久高清免费视频| 久久午夜免费鲁丝片| 一边摸一边爽一边叫床免费视频| 亚洲欧洲国产综合AV无码久久| 亚洲蜜芽在线精品一区|