驗證證書的有效性 cryptoapi

2021-04-01 09:53:01 字數 1662 閱讀 6626

使用certgetissuercertificatefromstore函式來驗證證書的有效性,其函式宣告如下:

pccert_context winapicertgetissuercertificatefromstore(hcertstorehcertstore

,//[in]要查詢的證書庫pccert_contextpsubjectcontext

,//[in]包含主題的證書內容pccert_contextpprevissuercontext

,//[in]包含頒發者證書的內容,第一次查詢時為nulldword*pdwflags

);

pprevissuercontext

這個引數在第一次尋找頒發者證書時必須為null,以後尋找下乙個頒發者證書時

將上次返回的pccert_context傳給它(因為同乙個頒發者可能有很多個證書),注意這裡傳過來的

pccert_context的結構在函式執行完後將被釋放.

pdwflags

[in,out]

[in]

為要驗證證書內容的標誌,主要有以下幾個(可以用或連線):

cert_store_revocation_flag 驗證證書是否在crl列表中

cert_store_signature_flag 用頒發者證書的公鑰來驗證主題證書是否有效

cert_store_time_validity_flag 驗證主題證書是否在有效期內

[out]

做為返回值返回時,這個標誌又多了兩個值,如下:

cert_store_no_crl_flag 沒有匹配的crl,也就是說在crl列表中沒有找到此證書

cert_store_no_issuer_flag 在證書庫中沒有找到頒發者證書

函式執行完後,pdwflags

將被重新設定,驗證成功的標誌將被設為0,失敗的仍然不變,注意:

當cert_store_revocation_flag 被設定,並且在證書庫的crl中也沒有找到時,返回的

pdwflags

中cert_store_no_crl_flag將被設定而且cert_store_revocation_flag繼續

保留.當 cert_store_signature_flag or cert_store_revocation_flag 被設定時,若

函式找不到頒發者的證書,在返回時cert_store_no_issuer_flag的標誌將被設定.

注意:如果證書被驗證為無效的,函式仍然返回找到的頒發者證書的cert_context的指標.
如果函式呼叫出錯,返回null,這時可以呼叫getlasterror()檢視出錯的資訊:

crypt_e_not_found 頒發者證書沒找到

crypt_e_self_signed 主題證書與頒發者證書是一樣的(自簽名證書)

e_invalidarg pdwflags

引數值無效或是hcertstore

指定的控制代碼與pprevissuercontext

的不一致.

數字證書有效性的驗證

分為三步 1.數字證書有效期驗證 就是說證書的使用時間要在起始時間和結束時間之內。通過解析證書很容易得到證書的有效期 2.證書鏈的驗證 證書鏈可以有任意環節的長度,所以在三節的鏈中,信任錨證書ca 環節可以對中間證書簽名 中間證書的所有者可以用自己的私鑰對另乙個證書簽名。certpath api 可...

驗證數字證書的有效性

此文來自於知乎的 要想驗證證書是否有效,要檢查三點 1.驗證證書是否在有效期內。證書中會包含證書的有效期的起始時間和結束時間,取乙個時間點去比較就好了。關鍵問題是如何保證取到的時間點是可信的,這就是另外乙個話題了。2.驗證證書是否被吊銷了。被吊銷的證書是無效的。驗證吊銷有crl和ocsp兩種方法。c...

郵箱有效性驗證

由於面對全球性客戶,主要是用郵箱來做為聯絡的主要工具所以,應用 軟體來做集中 程式有時有問題主要原因總結為郵箱不合法造成的 提前對不合法的郵箱進行一定的標記是很不必要的 以前的處理方法對郵箱進行正則驗證,但沒找到比較好的規則.後來想到了利用微軟提供的乙個 mailaddress 物件來對其email...