2010-07-20 221 views
5

我剛開始使用X.509證書。任何人都可以告訴我如何在linux上驗證證書嗎?用例是我的應用程序在之前的會話中下載了一個證書,並且在開始新會話之前,我必須檢查它是否仍然有效(即未存儲過期或從存儲中撤銷)。我明白這裏不可能有完整的示例,但任何指針都會有用。驗證Linux上的X.509證書

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

+0

可能重複的[x509證書驗證在C](http://stackoverflow.com/questions/2756553/x509-certificate-verification-in-c) – jww 2014-03-03 05:20:47

回答

0

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

您必須通過證書鏈並驗證它,直到您到達應已保存在您的計算機上的根證書。這是由實體稱爲根CA(證書頒發機構)頒發的自簽名證書

除了OCSP,還有一種過時的方法,您必須獲取吊銷列表,即CRL並解析該證書標識的列表。

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

3

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/[email protected] 
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。)

18

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

以編程方式,它可能意味着幾小時的搜索有點不好(或缺少)文檔,閱讀遍佈整個網絡的代碼示例,並可能是一個頭痛的問題。

要正確驗證證書,您需要通知所有中間證書。通常你也會通知撤銷清單(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。要了解原因,請閱讀Creating a rogue CA certificate

+0

你能告訴我如何使用查找/加載列表 – Balamurugan 2011-07-08 04:30:36