?
六.????
指令
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
鏈進行驗證。
? ?
? ?
現(xiàn)在這個
option
的參數(shù)有以下幾個:
? ? sslclinet
? ? sslserver
? ? nssslserver
? ? smimesign
? ? smimeencrypt
? ?
等下會詳細解釋的。
? ?
? ? -help
? ?
打印幫助信息。
? ?
-verbose
? ?
? ???
打印出詳細的操作信息。
? ?
-issuer_checks
? ?
打印出我們驗證的證書的簽發(fā)
CA
的證書的之間的聯(lián)系。
? ?
要一次驗證多個證書,把那些證書名都寫在后面就好了。
? ?? ???
? ?
驗證操作解釋:
? ? S/MIME
和本指令使用完全相同的函數(shù)進行驗證。
? ?
我們進行的驗證和真正的驗證有個根本的區(qū)別:
? ?
在我們對整個證書鏈進行驗證的時候,即使中途有問題,我們也會驗證到最后,而真實的驗證一旦有一個環(huán)節(jié)出問題,那么整個驗證過程就告吹。
? ?
驗證操作包括幾個獨立的步驟。
? ?
首先建立證書鏈,從我們目前的證書為基礎,一直上溯到
Root CA
的證書
.
? ?
如果中間有任何問題,比如找不到某個證書的頒發(fā)者的證書,那么這個步驟就掛。有任何一個證書是字簽名的,就被認為是
Root CA
的證書。
? ?
尋找一個證書的頒發(fā)
CA
也包過幾個步驟。在
openssl0.9.5a
之前的版本,如果一個證書的頒發(fā)者和另一個證書的擁有著相同,就認為后一個證書的擁有者就是前一個證書的簽名
CA.
? ? openssl0.9.6
及其以后的版本中,即使上一個條件成立,還要進行更多步驟的檢驗。包括驗證系列號等。到底有哪幾個我也沒看明白。
? ?
得到
CA
的名稱之后首先去看看是否是不信任的
CA,
如果不是,那么才去看看是否是信任的
CA.
尤其是
Root CA,
更是必須是在信任
CA
列表里面。
? ?
現(xiàn)在得到鏈條上所有
CA
的名稱和證書了,下一步是去檢查第一個證書的用途是否和簽發(fā)時候批準的一樣。其他的證書則必須都是作為
CA
證書而頒發(fā)的。
? ?
證書的用途在
x509
指令里會詳細解釋。
? ?
過了第二步,現(xiàn)在就是檢查對
Root CA
的信任了。可能
Root CA
也是每個都負責不同領域的證書簽發(fā)。缺省的認為任何一個
Root CA
都是對任何用途的證書有簽發(fā)權。
? ?
最后一步,檢查整條證書鏈的合法性。比如是否有任何一個證書過期了?簽名是否是正確的?是否真的是由該證書的頒發(fā)者簽名的?
? ?
任何一步出問題,所有該證書值得懷疑,否則,證書檢驗通過。
? ?
? ???
如果驗證操作有問題了,那么打印出來的結果可能會讓人有點模糊。
? ?
一般如果出問題的話,會有類似這樣子的結果打印出來:
? ? server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
? ? error 24 at 1 depth lookup:invalid CA certificate
? ?
第一行說明哪個證書出問題,后面是其擁有者的名字,包括幾個字段。
? ?
第二行說明錯誤號,驗證出錯在第幾層的證書,以及錯誤描述。
? ?
下面是錯誤號及其描述的詳細說明
,
注意,有的錯誤雖然有定義,
? ?
但真正使用的時候永遠不會出現(xiàn)。用
unused
標志
.
? ? 0 X509_V_OK
? ?
驗證操作沒有問題
? ? 2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
? ?
找不到該證書的頒發(fā)
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
? ?
有一個證書的簽發(fā)
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)
? ?
證書已經(jīng)被
CA
宣布收回。
? ? 24 X509_V_ERR_INVALID_CA
? ?
某
CA
的證書無效。
? ? 25 X509_V_ERR_PATH_LENGTH_EXCEEDED
? ?
參數(shù)
basicConstraints pathlentgh
超過規(guī)定長度
? ? 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
? ?
證書頒發(fā)者名稱和其
CA
擁有者名稱不相同。
-issuer_checks
被
set
的時候可以檢驗出來。
? ? 30 X509_V_ERR_AKID_SKID_MISMATCH
? ?
證書的密鑰標志和其頒發(fā)
CA
為其指定的密鑰標志不同
.
? ? 31 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
? ?
證書系列號與起頒發(fā)
CA
為其指定的系列號不同。
? ? 32 X509_V_ERR_KEYUSAGE_NO_CERTSIGN
? ?
某
CA
的證書用途不包括為其他證書簽名。
? ? 50 X509_V_ERR_APPLICATION_VERIFICATION
? ?
應用程序驗證出錯。