OpenSSL现在是否自动处理CRL(证书吊销列表)?

OpenSSL现在是否自动处理CRL(证书吊销列表)?,openssl,Openssl,我正在撰写的参考书(Viega、Messier和Chandra的OpenSSL网络安全)第133页指出: […]应用程序必须加载CRL文件,以便内部验证过程确保其验证的每个证书都不会被吊销。不幸的是,OpenSSL的CRL功能在版本0.9.6中是不完整的。从0.9.7开始,新版本将提供利用CRL信息所需的功能。[……] 我在OpenSSL文档中找不到任何关于它的有用信息(这并不奇怪)。在我看来,检查CRL应该是OpenSSL验证过程中自动的一部分。CRL现在是自动处理的吗,还是我仍然必须检查书中

我正在撰写的参考书(Viega、Messier和Chandra的OpenSSL网络安全)第133页指出:

[…]应用程序必须加载CRL文件,以便内部验证过程确保其验证的每个证书都不会被吊销。不幸的是,OpenSSL的CRL功能在版本0.9.6中是不完整的。从0.9.7开始,新版本将提供利用CRL信息所需的功能。[……]

我在OpenSSL文档中找不到任何关于它的有用信息(这并不奇怪)。在我看来,检查CRL应该是OpenSSL验证过程中自动的一部分。CRL现在是自动处理的吗,还是我仍然必须检查书中列出的所有垃圾,以费力地验证证书是否已被吊销


一个密切相关的问题:
SSL\u CTX\u set\u default\u verify\u paths
函数是否也加载CRL路径?

SSL\u CTX\u set\u default\u verify\u paths()
只加载CA路径,而不是CRL路径

我相信(尽管我自己还没有实际实施),正确的流程是:

/* Load CRLs into the `X509_STORE` */

X509_STORE *x509_store = SSL_CTX_get_cert_store(ctx);
X509_STORE_add_crl(x509_store, crl);

/* Enable CRL checking */
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
SSL_CTX_set1_param(ctx, param);
X509_VERIFY_PARAM_free(param);

公认的答案在libssl v0.9.8o中不太适用。尽管代码与截至2011/06/23的在线文档页面底部的代码相匹配:

我使用了以下代码:

X509_STORE *store = getStore();

// Enable CRL checking
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new();
X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
X509_STORE_set1_param(store, param);
X509_VERIFY_PARAM_free(param);
请注意,使用X509_存储而不是SSL_CTX来设置参数

编辑:OpenSSL和CRLs还有一件事需要注意。如果在上下文上启用CRL,则CA没有CRL的任何证书都将被拒绝。据我所知,没有办法让OpenSSL只将CRL应用于CRL中列出的CA的证书

我遇到了这个问题,浪费了很多时间试图弄清楚为什么我的证书在完全有效的情况下没有被接受。问题是我为一个CA添加了CRL,但没有为另一个CA添加CRL。来自CA且没有CRL的所有证书均被拒绝。在这方面,OpenSSL要么全是,要么全是