捕風(fēng)之巢

          統(tǒng)計(jì)

          • 隨筆 - 7
          • 文章 - 82
          • 評(píng)論 - 14
          • 引用 - 0

          留言簿(3)

          java友情鏈接

          閱讀排行榜

          評(píng)論排行榜

          openssl簡(jiǎn)介(六)--指令 verify

          ?

          六.???? 指令 verify

          用法:
          ? ?
          ? ? openssl verify
          -CApath directory -CAfile file -purpose purpose 】【 -untrusted file -help -issuer_checks -verbose ?? - certificates
          ? ?
          ? ???
          說明:
          ? ?
          ? ???
          證書驗(yàn)證工具。
          ? ???
          ? ?
          選項(xiàng)
          ? ???-CApath directory
          ? ?
          我們信任的 CA 的證書存放目錄。這些證書的名稱應(yīng)該是這樣的格式:
          ? ? xxxxxxxx.0( xxxxxxxx
          代表證書的哈希值。 參看 x509 指令的 -hash)
          ? ?
          你也可以在目錄里 touch 一些這樣格式文件名的文件,符號(hào)連接到真正的證書。
          ? ?
          那么這個(gè) xxxxxxxx 我怎么知道怎么得到? x509 指令有說明。
          ? ?
          其實(shí)這樣子就可以了:
          ? ? openssl x509 -hash -in server.crt
          ? ?
          ? ? -CAfile file
          ? ?
          我們信任的 CA 的證書,里面可以有多個(gè) CA 的證書。
          ? ?
          ? ? -untrusted file
          ? ?
          我們不信任的 CA 的證書。
          ? ?
          ? ? -purpose purpose
          ? ?
          證書的用途。如果這個(gè) option 沒有設(shè)置,那么不會(huì)對(duì)證書的 CA 鏈進(jìn)行驗(yàn)證。
          ? ?
          ? ?
          現(xiàn)在這個(gè) option 的參數(shù)有以下幾個(gè):
          ? ? sslclinet
          ? ? sslserver
          ? ? nssslserver
          ? ? smimesign
          ? ? smimeencrypt
          ? ?
          等下會(huì)詳細(xì)解釋的。
          ? ?
          ? ? -help
          ? ?
          打印幫助信息。
          ? ?
          -verbose
          ? ?
          ? ???
          打印出詳細(xì)的操作信息。
          ? ?
          -issuer_checks
          ? ?
          打印出我們驗(yàn)證的證書的簽發(fā) CA 的證書的之間的聯(lián)系。
          ? ?
          要一次驗(yàn)證多個(gè)證書,把那些證書名都寫在后面就好了。
          ? ?? ???
          ? ?
          驗(yàn)證操作解釋:
          ? ? S/MIME
          和本指令使用完全相同的函數(shù)進(jìn)行驗(yàn)證。
          ? ?
          我們進(jìn)行的驗(yàn)證和真正的驗(yàn)證有個(gè)根本的區(qū)別:
          ? ?
          在我們對(duì)整個(gè)證書鏈進(jìn)行驗(yàn)證的時(shí)候,即使中途有問題,我們也會(huì)驗(yàn)證到最后,而真實(shí)的驗(yàn)證一旦有一個(gè)環(huán)節(jié)出問題,那么整個(gè)驗(yàn)證過程就告吹。
          ? ?
          驗(yàn)證操作包括幾個(gè)獨(dú)立的步驟。
          ? ?
          首先建立證書鏈,從我們目前的證書為基礎(chǔ),一直上溯到 Root CA 的證書 .
          ? ?
          如果中間有任何問題,比如找不到某個(gè)證書的頒發(fā)者的證書,那么這個(gè)步驟就掛。有任何一個(gè)證書是字簽名的,就被認(rèn)為是 Root CA 的證書。
          ? ?
          尋找一個(gè)證書的頒發(fā) CA 也包過幾個(gè)步驟。在 openssl0.9.5a 之前的版本,如果一個(gè)證書的頒發(fā)者和另一個(gè)證書的擁有著相同,就認(rèn)為后一個(gè)證書的擁有者就是前一個(gè)證書的簽名 CA.
          ? ? openssl0.9.6
          及其以后的版本中,即使上一個(gè)條件成立,還要進(jìn)行更多步驟的檢驗(yàn)。包括驗(yàn)證系列號(hào)等。到底有哪幾個(gè)我也沒看明白。
          ? ?
          得到 CA 的名稱之后首先去看看是否是不信任的 CA, 如果不是,那么才去看看是否是信任的 CA. 尤其是 Root CA, 更是必須是在信任 CA 列表里面。
          ? ?
          現(xiàn)在得到鏈條上所有 CA 的名稱和證書了,下一步是去檢查第一個(gè)證書的用途是否和簽發(fā)時(shí)候批準(zhǔn)的一樣。其他的證書則必須都是作為 CA 證書而頒發(fā)的。
          ? ?
          證書的用途在 x509 指令里會(huì)詳細(xì)解釋。
          ? ?
          過了第二步,現(xiàn)在就是檢查對(duì) Root CA 的信任了。可能 Root CA 也是每個(gè)都負(fù)責(zé)不同領(lǐng)域的證書簽發(fā)。缺省的認(rèn)為任何一個(gè) Root CA 都是對(duì)任何用途的證書有簽發(fā)權(quán)。
          ? ?
          最后一步,檢查整條證書鏈的合法性。比如是否有任何一個(gè)證書過期了?簽名是否是正確的?是否真的是由該證書的頒發(fā)者簽名的?
          ? ?
          任何一步出問題,所有該證書值得懷疑,否則,證書檢驗(yàn)通過。
          ? ?
          ? ???
          如果驗(yàn)證操作有問題了,那么打印出來的結(jié)果可能會(huì)讓人有點(diǎn)模糊。
          ? ?
          一般如果出問題的話,會(huì)有類似這樣子的結(jié)果打印出來:
          ? ? server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
          ? ? error 24 at 1 depth lookup:invalid CA certificate
          ? ?
          第一行說明哪個(gè)證書出問題,后面是其擁有者的名字,包括幾個(gè)字段。
          ? ?
          第二行說明錯(cuò)誤號(hào),驗(yàn)證出錯(cuò)在第幾層的證書,以及錯(cuò)誤描述。
          ? ?
          下面是錯(cuò)誤號(hào)及其描述的詳細(xì)說明 , 注意,有的錯(cuò)誤雖然有定義,
          ? ?
          但真正使用的時(shí)候永遠(yuǎn)不會(huì)出現(xiàn)。用 unused 標(biāo)志 .
          ? ? 0 X509_V_OK
          ? ?
          驗(yàn)證操作沒有問題
          ? ? 2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
          ? ?
          找不到該證書的頒發(fā) CA 的證書。
          ? ? 3 X509_V_ERR_UNABLE_TO_GET_CRL (unused)
          ? ?
          找不到和該證書相關(guān)的 CRL
          ? ?4 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
          ? ?
          無法解開證書里的簽名。
          ? ? 5 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE (unused)
          ? ?
          無法解開 CRLs 的簽名。
          ? ? 6 X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
          ? ?
          無法得到證書里的公共密鑰信息。
          ? ? 7 X509_V_ERR_CERT_SIGNATURE_FAILURE
          ? ?
          證書簽名無效
          ? ? 8 X509_V_ERR_CRL_SIGNATURE_FAILURE (unused)
          ? ?
          證書相關(guān)的 CRL 簽名無效
          ? ? 9 X509_V_ERR_CERT_NOT_YET_VALID
          ? ?
          證書還沒有到有效開始時(shí)間
          ? ? 10 X509_V_ERR_CRL_NOT_YET_VALID (unused)
          ? ?
          與證書相關(guān)的 CRL 還沒有到有效開始時(shí)間
          ? ? 11 X509_V_ERR_CERT_HAS_EXPIRED
          ? ?
          證書過期
          ? ? 12 X509_V_ERR_CRL_HAS_EXPIRED (unused)
          ? ?
          與證書相關(guān)的 CRL 過期
          ? ? 13 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
          ? ?
          證書的 notBefore 字段格式不對(duì) , 就是說那個(gè)時(shí)間是非法格式。
          ? ? 14 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
          ? ?
          證書的 notAfter 字段格式不對(duì) , 就是說那個(gè)時(shí)間是非法格式。
          ? ? 15 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD (unused)
          ? ? CRL
          lastUpdate 字段格式不對(duì)。
          ? ? 16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD (unused)
          ? ? CRL
          nextUpdate 字段格式不對(duì)
          ? ? 17 X509_V_ERR_OUT_OF_MEM
          ? ?
          操作時(shí)候內(nèi)存不夠。這和證書本身沒有關(guān)系。
          ? ? 18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
          ? ?
          需要驗(yàn)證的第一個(gè)證書就是字簽名證書,而且不在信任 CA 證書列表中。
          ? ? 19 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
          ? ?
          可以建立證書鏈,但在本地找不到他們的根??
          ? ?
          ? ? : self signed certificate in certificate chain
          ? ? the certificate chain could be built up using the untrusted certificates
          ? ? but the root could not be found locally.
          ? ? 20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
          ? ?
          有一個(gè)證書的簽發(fā) CA 的證書找不到。這說明可能是你的 Root CA 的證書列表不齊全。
          ? ? 21 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
          ? ?
          證書鏈只有一個(gè) item, 但又不是字簽名的證書。
          ? ? 22 X509_V_ERR_CERT_CHAIN_TOO_LONG (unused)
          ? ?
          證書鏈太長(zhǎng)。
          ? ? 23 X509_V_ERR_CERT_REVOKED (unused)
          ? ?
          證書已經(jīng)被 CA 宣布收回。
          ? ? 24 X509_V_ERR_INVALID_CA
          ? ?
          CA 的證書無效。
          ? ? 25 X509_V_ERR_PATH_LENGTH_EXCEEDED
          ? ?
          參數(shù) basicConstraints pathlentgh 超過規(guī)定長(zhǎng)度
          ? ? 26 X509_V_ERR_INVALID_PURPOSE
          ? ?
          提供的證書不能用于請(qǐng)求的用途。
          ? ?
          比如鏈條中某個(gè)證書應(yīng)該是用來做 CA 證書的,但證書里面的該字段說明該證書不是用做 CA 證書的,就是這樣子的情況。
          ? ? 27 X509_V_ERR_CERT_UNTRUSTED
          ? ? Root CA
          的證書如果用在請(qǐng)求的用途是不被信任的。
          ? ? 28 X509_V_ERR_CERT_REJECTED
          ? ? CA
          的證書根本不可以用做請(qǐng)求的用途。
          ? ? 29 X509_V_ERR_SUBJECT_ISSUER_MISMATCH
          ? ?
          證書頒發(fā)者名稱和其 CA 擁有者名稱不相同。 -issuer_checks set 的時(shí)候可以檢驗(yàn)出來。
          ? ? 30 X509_V_ERR_AKID_SKID_MISMATCH
          ? ?
          證書的密鑰標(biāo)志和其頒發(fā) CA 為其指定的密鑰標(biāo)志不同 .
          ? ? 31 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
          ? ?
          證書系列號(hào)與起頒發(fā) CA 為其指定的系列號(hào)不同。
          ? ? 32 X509_V_ERR_KEYUSAGE_NO_CERTSIGN
          ? ?
          CA 的證書用途不包括為其他證書簽名。
          ? ? 50 X509_V_ERR_APPLICATION_VERIFICATION
          ? ?
          應(yīng)用程序驗(yàn)證出錯(cuò)。

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

          主站蜘蛛池模板: 岑巩县| 高要市| 银川市| 三台县| 和平区| 芜湖市| 永寿县| 南江县| 台江县| 城口县| 绵阳市| 泰安市| 保康县| 天门市| 建平县| 威宁| 峨眉山市| 资阳市| 屯门区| 广元市| 屏东市| 桐柏县| 河间市| 剑阁县| 门源| 安丘市| 象州县| 白朗县| 万全县| 嘉善县| 德昌县| 黑水县| 弥渡县| 梁平县| 洪雅县| 梧州市| 临清市| 寻乌县| 灌云县| 寿阳县| 乃东县|