我正在使用支持SSL的gSOAP开发Web服务。只要我复制(就是它!)作为gSOAP文档提供的代码,它就可以正常工作。试图添加一些功能,我碰到了很多困难!我对OpenSSL库不太了解,所以我在这里请你帮忙。 我应该添加一个CRL列表来检查客户端发送的证书。我该怎么做?而且,我改变了soap.fsslverify指向的函数:
int servlet_fsslverify(int ok, X509_STORE_CTX *store)
{
ok = 1;
char buf[1024];
X509 *cert = X509_STORE_CTX_get_current_cert(store);
fprintf(stderr, "SSL verify error or warning with certificate at depth %d: %s\n",
X509_STORE_CTX_get_error_depth(store),
X509_verify_cert_error_string(X509_STORE_CTX_get_error(store)));
X509_NAME_oneline(X509_get_issuer_name(cert), buf, sizeof(buf));
fprintf(stderr, "certificate issuer %s\n", buf);
X509_NAME_oneline(X509_get_subject_name(cert), buf, sizeof(buf));
fprintf(stderr, "certificate subject %s\n", buf);
/* Note: return 1 to continue, but unsafe progress will be terminated by OpenSSL */
return ok;
}
每次客户端尝试进行身份验证时都会调用它。如您所见,我能够检查客户端证书中的字段,但我真的不知道如何检查CRL中是否存在特定证书。 这就是全部,非常感谢大家回答。
答案 0 :(得分:0)
我在互联网上找到了解决方案!对不起,我不记得在哪里,但我会试着找回来,我会编辑这个帖子 - 积分给解算器。 在服务器上下文创建之后立即插入的代码。
X509_STORE *store;
store = SSL_CTX_get_cert_store(ServicePtr->ctx);
if (store)
{
X509_LOOKUP *lookup;
X509_STORE_set_flags(store, X509_V_FLAG_CRL_CHECK);
lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
if (lookup)
{
if ( X509_load_crl_file(lookup, globals.pki_crl, X509_FILETYPE_ASN1) < 1 )
{
std::cerr << "CRL not found or invalid" << std::endl;
}
}
else
{
std::cerr << "Unable to create a valid lookup" << std::endl;
}
}
else
{
std::cerr << "Unable to get X509_STORE" << std::endl;
}