我剛開始使用X.509證書。任何人都可以告訴我如何在linux上驗證證書嗎?用例是我的應用程序在之前的會話中下載了一個證書,並且在開始新會話之前,我必須檢查它是否仍然有效(即未存儲過期或從存儲中撤銷)。我明白這裏不可能有完整的示例,但任何指針都會有用。驗證Linux上的X.509證書
編輯:進一步調查顯示另一個實用工具稱爲網絡安全服務(NSS)。在可用性方面,這與OpenSSL相比如何?另外,我正在尋找程序化解決方案,因爲我將無法啓動命令行實用程序。
我剛開始使用X.509證書。任何人都可以告訴我如何在linux上驗證證書嗎?用例是我的應用程序在之前的會話中下載了一個證書,並且在開始新會話之前,我必須檢查它是否仍然有效(即未存儲過期或從存儲中撤銷)。我明白這裏不可能有完整的示例,但任何指針都會有用。驗證Linux上的X.509證書
編輯:進一步調查顯示另一個實用工具稱爲網絡安全服務(NSS)。在可用性方面,這與OpenSSL相比如何?另外,我正在尋找程序化解決方案,因爲我將無法啓動命令行實用程序。
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。)
正如其他人提到的,您可以使用openssl verify
。根據documentation,它也檢查有效期。
以編程方式,它可能意味着幾小時的搜索有點不好(或缺少)文檔,閱讀遍佈整個網絡的代碼示例,並可能是一個頭痛的問題。
要正確驗證證書,您需要通知所有中間證書。通常你也會通知撤銷清單(CRL),但這不是必需的。
所以,這裏就是你需要(OpenSSL的)的代碼方面做什麼:
X509_STORE_new
- 創建一個證書存儲區;X509_STORE_CTX_new
- 創建商店上下文;X509_STORE_add_cert
- 將CA(和所有中介)證書添加到證書存儲的可信列表(注意:有查找/加載列表的功能);X509_STORE_add_crl
- 將撤銷的證書添加到證書存儲區的CRL(注意:與上面相同);X509_STORE_CTX_init
- 初始化您的商店環境,通知您的證書商店;X509_STORE_CTX_set_purpose
- 定義目的,如果你需要的話;X509_STORE_CTX_set_cert
- 告訴上下文你要驗證哪個證書;X509_verify_cert
- 最後,驗證它;X509_STORE_CTX_cleanup
- 如果您想重新使用上下文來驗證另一個證書,請將其清理並跳回到(5);或者,可以使用X509_verify
進行快速驗證。但是請注意,它僅對比簽名。
當我需要它時,花了我一天的搜索,閱讀和測試。然後我想出了我需要的所有東西在OpenSSL源代碼中都是正確的。因此,如果您需要示例,請直接撥打openssl-xxx/apps/verify.c。
重要提示:切勿使用MD5。要了解原因,請閱讀Creating a rogue CA certificate。
你能告訴我如何使用查找/加載列表 – Balamurugan 2011-07-08 04:30:36
可能重複的[x509證書驗證在C](http://stackoverflow.com/questions/2756553/x509-certificate-verification-in-c) – jww 2014-03-03 05:20:47