簡體   English   中英

在linux上驗證X.509證書

[英]validating X.509 certificate on linux

我剛開始使用X.509證書。 誰能告訴我如何在linux上驗證證書? 用例是我的應用程序已經在之前的會話中下載了證書,我必須在開始新會話之前檢查它是否仍然有效(即,在存儲之后沒有過期或撤銷)。 我理解這里不可能有完整的樣本,但任何指針都會有用。

編輯:進一步調查顯示另一個稱為網絡安全服務(NSS)的實用程序。 在可用性方面,這與OpenSSL相比如何? 此外,我正在尋找程序化解決方案,因為我將無法啟動命令行實用程序。

正如其他人提到的,您可以使用openssl verify 根據文檔 ,它還檢查有效期。

從程序上來說,它可能意味着數小時搜索有點不好(或丟失)的文檔,在整個網絡上閱讀代碼示例,並且可能令人頭疼。

要正確驗證證書,您需要通知所有中間證書。 通常你也會通知撤銷列表(CRL),但這不是必需的。

那么,這就是你需要做的代碼(OpenSSL):

  1. X509_STORE_new - 創建證書存儲區;
  2. X509_STORE_CTX_new - 創建商店上下文;
  3. X509_STORE_add_cert - 將CA(和所有中間)證書添加到證書存儲的可信列表中(注意:有一個查找/加載列表的函數);
  4. X509_STORE_add_crl - 將撤銷的證書添加到證書庫的CRL中(注意:與上面相同);
  5. X509_STORE_CTX_init - 初始化您的商店上下文,通知您的證書商店;
  6. X509_STORE_CTX_set_purpose - 如果需要,定義目的;
  7. X509_STORE_CTX_set_cert - 告訴上下文您要驗證哪個證書;
  8. X509_verify_cert - 最后,驗證它;
  9. X509_STORE_CTX_cleanup - 如果要重用上下文來驗證另一個證書,請將其清理並跳回(5);
  10. 最后但並非最不重要的是,解除分配(1)和(2);

或者,可以使用X509_verify進行快速驗證。 但請注意,它僅對簽名進行比較。

當我需要它時,花了我一整天的搜索,閱讀和測試。 然后我發現我需要的一切都在OpenSSL源代碼中。 因此,如果您需要一個示例,請直接訪問openssl-xxx / apps / verify.c

重要提示:永遠不要使用MD5。 要了解原因,請閱讀創建流氓CA證書

如果你想要一個簡單的工具, openssl verify會做你想做的事情:

從跑步:

cd /usr/share/ca-certificates
find . -type f -exec openssl -verify {} \;

這是一個輸出選擇:

./telesec.de/deutsche-telekom-root-ca-2.crt: OK
./brasil.gov.br/brasil.gov.br.crt: OK
./cacert.org/cacert.org.crt: OK
./spi-inc.org/spi-ca-2003.crt: /C=US/ST=Indiana/L=Indianapolis/O=Software in the Public Interest/OU=hostmaster/CN=Certification Authority/emailAddress=hostmaster@spi-inc.org
error 10 at 0 depth lookup:certificate has expired
OK
./spi-inc.org/spi-cacert-2008.crt: OK
./signet.pl/signet_ocspklasa3_pem.crt: /C=PL/O=TP Internet Sp. z o.o./CN=CC Signet - CA Klasa 3/serialNumber=Numer wpisu: 4
error 2 at 1 depth lookup:unable to get issuer certificate
./signet.pl/signet_ca3_pem.crt: /C=PL/O=TP Internet Sp. z o.o./CN=CC Signet - CA Klasa 3/serialNumber=Numer wpisu: 4
error 20 at 0 depth lookup:unable to get local issuer certificate

如果您希望將結果放在更大的程序中,那么gnutls_x509_crt_verify(3)gnutls_x509_crt_get_key_usage(3)gnutls_x509_crt_check_revocation(3)接口比OpenSSL更容易使用。 (我從來沒有用過GNUTLS,但我已經使用OpenSSL的。)

OCSP是一種檢查證書撤銷的協議。 Openssl提供證書鏈驗證和簽名驗證API。 它需要一些編碼。 所以我建議你研究一下Openssl文檔。

您必須通過證書鏈並對其進行驗證,直到您獲得應該已保存在計算機上的根證書。 這是由稱為根CA(證書頒發機構)的實體頒發的自簽名證書

除了OCSP之外,還有一種過時的方法,你必須獲取撤銷列表即CRL並解析證書ID的列表。

編輯:我忘了提到openssl命令行實用程序,它具有相同的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM