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

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

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

    捕風(fēng)之巢

    統(tǒng)計(jì)

    留言簿(3)

    java友情鏈接

    閱讀排行榜

    評(píng)論排行榜

    openssl簡(jiǎn)介(二)--證書

    ?

    一.???? 證書

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

    證書用來保證不對(duì)稱加密算法的合理性。想想吧,如果沒有證書記錄,那么假設(shè)某倆人 A B 的通話過程如下:

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

    xxxxxx(kn)
    表示用 kn 加密過的一段文字 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)?/span> A 沒有懷疑 C 的身份,所以他理所當(dāng)然的接受了 C publickey, 并且使用這個(gè) key 來繼續(xù)下面的通信。

    A
    ---------Cspublickey ------------C
    A---------
    Aspublickey(K1)-------- C
    ......

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

    那么,如果證書是假的怎么辦?或者證書被修改過了怎么辦?慢慢看下來吧。

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

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

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

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

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

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

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

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

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

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

    RootCAs 誰給簽名 ? 他們自己給自己簽名 , 叫自簽名 .

    說了這么多,舉個(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)家門
    Certification
    Authority
    Validity
    NotBefore:Nov418:58:341994GMT//
    證書的有效期
    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í)這是我們看的懂的格式的證書內(nèi)容,真正的證書都是加密過了的,如下:

    -----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-----



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

    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 證書是個(gè)什么東東吧。它實(shí)際上是建立了公共密鑰和某個(gè)實(shí)體之間聯(lián)系的數(shù)字化的文件。它包含的內(nèi)容有:

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

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

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

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

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

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

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

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

    SSL_VERIFY_CLIENT_ONCE
    :這是僅能使用在 sslsessionrenegotiation 階段的一種方式。什么是 SSLsessionrenegotiation? 以后的章節(jié)再解釋。我英文差點(diǎn),覺得這個(gè)詞組也很難翻譯成相應(yīng)的中文。以后的文章里,我覺得很難直接翻 譯的單詞或詞組,都會(huì)直接用英文寫出來。如果不是用這個(gè)模式的話 , 那么在 regegotiation 的時(shí)候, client 都要把自己的證書送給 server, 然后做一番分析。這個(gè)過程很消耗 cpu 時(shí)間的,而這個(gè)模式則不需要 client regotiation 的時(shí)候重復(fù)送自己的證書了。

    posted on 2006-10-17 15:20 捕風(fēng) 閱讀(595) 評(píng)論(0)  編輯  收藏 所屬分類: java安全

    主站蜘蛛池模板: 久久亚洲精品无码AV红樱桃| 亚洲毛片αv无线播放一区| 亚洲男女性高爱潮网站| 亚欧免费无码aⅴ在线观看| 亚洲精品乱码久久久久久久久久久久| 国产亚洲午夜精品| 日韩精品电影一区亚洲| 免费无码午夜福利片69| 国产精品亚洲αv天堂无码| GOGOGO免费观看国语| 中文字幕亚洲乱码熟女一区二区 | 国产人在线成免费视频| 亚洲国产成人精品无码区在线网站| 精品国产污污免费网站aⅴ | 亚洲视频欧洲视频| 国产乱子精品免费视观看片| 亚洲人成人网毛片在线播放| 日本成人在线免费观看| 一级特黄a免费大片| 亚洲精品午夜无码电影网| 久久成人无码国产免费播放| 亚洲福利电影一区二区?| 久久精品网站免费观看| 国产精品亚洲专一区二区三区| 亚洲最大av无码网址| 毛片在线播放免费观看| 亚洲成a人片在线不卡| 四虎免费久久影院| 免费一级毛片无毒不卡| 亚洲国产午夜精品理论片| 国产精品免费视频播放器| 在线观看黄片免费入口不卡| 亚洲午夜在线一区| 亚洲福利在线播放| 亚洲免费精彩视频在线观看| 亚洲精品无码久久久久牙蜜区| 国产乱辈通伦影片在线播放亚洲| 91久久精品国产免费一区| 在线亚洲精品视频| 亚洲国产精品热久久| 日本免费人成黄页在线观看视频 |