在Linux上validationX.509证书

我刚开始使用X.509证书。 任何人可以告诉我如何去validation在Linux上的证书? 用例是我的应用程序在之前的会话中下载了一个证书,并且在开始一个新的会话之前,我必须检查它是否仍然有效(即,在存储之后没有过期或撤销)。 我明白这里不可能有完整的示例,但任何指针都是有用的。

编辑:进一步的调查显示另一个实用工具称为networking安全服务(NSS)。 在可用性方面,这与OpenSSL相比如何? 此外,我正在寻找编程解决scheme,因为我将无法启动命令行工具。

Solutions Collecting From Web of "在Linux上validationX.509证书"

正如别人提到的,你可以使用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 oo/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 oo/CN=CC Signet - CA Klasa 3/serialNumber=Numer wpisu: 4 error 20 at 0 depth lookup:unable to get local issuer certificate 

如果您希望将结果放在更大的程序中,可能会比使用OpenSSL更容易使用gnutls_x509_crt_verify(3)gnutls_x509_crt_get_key_usage(3)gnutls_x509_crt_check_revocation(3)接口。 (我从来没有用过gnutls,但是我用过OpenSSL。)

OCSP是检查证书撤销的协议。 Openssl提供证书链验证和签名验证API。 它需要一些编码。 所以我建议你看看Openssl文档。

您必须通过证书链并验证它,直到您到达应该已保存在您的计算机上的根证书。 这是由根CA(证书颁发机构)实体颁发的自签名证书

除了OCSP,还有一个过时的方法,你必须取回撤销列表,即CRLs并解析该列表中的证书ID。

编辑:我忘了提及openssl命令行工具,它具有相同的功能。