openssl簡介(六)--指令 verify(轉)

openssl簡介(六)--指令 verify

 

六.     指令 verify

用法:
   
    openssl verify
-CApath directory -CAfile file -purpose purpose 】【 -untrusted file -help -issuer_checks -verbose    - certificates
   
     
說明:
   
     
證書驗證工具。
     
   
選項
     -CApath directory
   
我們信任的 CA 的證書存放目錄。這些證書的名稱應該是這樣的格式:
    xxxxxxxx.0( xxxxxxxx
代表證書的哈希值。 參看 x509 指令的 -hash)
   
你也可以在目錄裏 touch 一些這樣格式文件名的文件,符號連接到真正的證書。
   
那麼這個 xxxxxxxx 我怎麼知道怎麼得到? x509 指令有說明。
   
其實這樣子就可以了:
    openssl x509 -hash -in server.crt
   
    -CAfile file
   
我們信任的 CA 的證書,裏面可以有多個 CA 的證書。
   
    -untrusted file
   
我們不信任的 CA 的證書。
   
    -purpose purpose
   
證書的用途。如果這個 option 沒有設置,那麼不會對證書的 CA 鏈進行驗證。
   
   
現在這個 option 的參數有以下幾個:
    sslclinet
    sslserver
    nssslserver
    smimesign
    smimeencrypt
   
等下會詳細解釋的。
   
    -help
   
打印幫助信息。
   
-verbose
   
     
打印出詳細的操作信息。
   
-issuer_checks
   
打印出我們驗證的證書的簽發 CA 的證書的之間的聯繫。
   
要一次驗證多個證書,把那些證書名都寫在後面就好了。
        
   
驗證操作解釋:
    S/MIME
和本指令使用完全相同的函數進行驗證。
   
我們進行的驗證和真正的驗證有個根本的區別:
   
在我們對整個證書鏈進行驗證的時候,即使中途有問題,我們也會驗證到最後,而真實的驗證一旦有一個環節出問題,那麼整個驗證過程就告吹。
   
驗證操作包括幾個獨立的步驟。
   
首先建立證書鏈,從我們目前的證書爲基礎,一直上溯到 Root CA 的證書 .
   
如果中間有任何問題,比如找不到某個證書的頒發者的證書,那麼這個步驟就掛。有任何一個證書是字簽名的,就被認爲是 Root CA 的證書。
   
尋找一個證書的頒發 CA 也包過幾個步驟。在 openssl0.9.5a 之前的版本,如果一個證書的頒發者和另一個證書的擁有着相同,就認爲後一個證書的擁有者就是前一個證書的簽名 CA.
    openssl0.9.6
及其以後的版本中,即使上一個條件成立,還要進行更多步驟的檢驗。包括驗證系列號等。到底有哪幾個我也沒看明白。
   
得到 CA 的名稱之後首先去看看是否是不信任的 CA, 如果不是,那麼纔去看看是否是信任的 CA. 尤其是 Root CA, 更是必須是在信任 CA 列表裏面。
   
現在得到鏈條上所有 CA 的名稱和證書了,下一步是去檢查第一個證書的用途是否和簽發時候批准的一樣。其他的證書則必須都是作爲 CA 證書而頒發的。
   
證書的用途在 x509 指令裏會詳細解釋。
   
過了第二步,現在就是檢查對 Root CA 的信任了。可能 Root CA 也是每個都負責不同領域的證書籤發。缺省的認爲任何一個 Root CA 都是對任何用途的證書有簽發權。
   
最後一步,檢查整條證書鏈的合法性。比如是否有任何一個證書過期了?簽名是否是正確的?是否真的是由該證書的頒發者簽名的?
   
任何一步出問題,所有該證書值得懷疑,否則,證書檢驗通過。
   
     
如果驗證操作有問題了,那麼打印出來的結果可能會讓人有點模糊。
   
一般如果出問題的話,會有類似這樣子的結果打印出來:
    server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
    error 24 at 1 depth lookup:invalid CA certificate
   
第一行說明哪個證書出問題,後面是其擁有者的名字,包括幾個字段。
   
第二行說明錯誤號,驗證出錯在第幾層的證書,以及錯誤描述。
   
下面是錯誤號及其描述的詳細說明 , 注意,有的錯誤雖然有定義,
   
但真正使用的時候永遠不會出現。用 unused 標誌 .
    0 X509_V_OK
   
驗證操作沒有問題
    2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
   
找不到該證書的頒發 CA 的證書。
    3 X509_V_ERR_UNABLE_TO_GET_CRL (unused)
   
找不到和該證書相關的 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)
   
證書相關的 CRL 簽名無效
    9 X509_V_ERR_CERT_NOT_YET_VALID
   
證書還沒有到有效開始時間
    10 X509_V_ERR_CRL_NOT_YET_VALID (unused)
   
與證書相關的 CRL 還沒有到有效開始時間
    11 X509_V_ERR_CERT_HAS_EXPIRED
   
證書過期
    12 X509_V_ERR_CRL_HAS_EXPIRED (unused)
   
與證書相關的 CRL 過期
    13 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
   
證書的 notBefore 字段格式不對 , 就是說那個時間是非法格式。
    14 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
   
證書的 notAfter 字段格式不對 , 就是說那個時間是非法格式。
    15 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD (unused)
    CRL
lastUpdate 字段格式不對。
    16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD (unused)
    CRL
nextUpdate 字段格式不對
    17 X509_V_ERR_OUT_OF_MEM
   
操作時候內存不夠。這和證書本身沒有關係。
    18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
   
需要驗證的第一個證書就是字簽名證書,而且不在信任 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
   
有一個證書的簽發 CA 的證書找不到。這說明可能是你的 Root CA 的證書列表不齊全。
    21 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
   
證書鏈只有一個 item, 但又不是字簽名的證書。
    22 X509_V_ERR_CERT_CHAIN_TOO_LONG (unused)
   
證書鏈太長。
    23 X509_V_ERR_CERT_REVOKED (unused)
   
證書已經被 CA 宣佈收回。
    24 X509_V_ERR_INVALID_CA
   
CA 的證書無效。
    25 X509_V_ERR_PATH_LENGTH_EXCEEDED
   
參數 basicConstraints pathlentgh 超過規定長度
    26 X509_V_ERR_INVALID_PURPOSE
   
提供的證書不能用於請求的用途。
   
比如鏈條中某個證書應該是用來做 CA 證書的,但證書裏面的該字段說明該證書不是用做 CA 證書的,就是這樣子的情況。
    27 X509_V_ERR_CERT_UNTRUSTED
    Root CA
的證書如果用在請求的用途是不被信任的。
    28 X509_V_ERR_CERT_REJECTED
    CA
的證書根本不可以用做請求的用途。
    29 X509_V_ERR_SUBJECT_ISSUER_MISMATCH
   
證書頒發者名稱和其 CA 擁有者名稱不相同。 -issuer_checks set 的時候可以檢驗出來。
    30 X509_V_ERR_AKID_SKID_MISMATCH
   
證書的密鑰標誌和其頒發 CA 爲其指定的密鑰標誌不同 .
    31 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
   
證書系列號與起頒發 CA 爲其指定的系列號不同。
    32 X509_V_ERR_KEYUSAGE_NO_CERTSIGN
   
CA 的證書用途不包括爲其他證書籤名。
    50 X509_V_ERR_APPLICATION_VERIFICATION
   
應用程序驗證出錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章