如何将X509 *
证书转换为STACK_OF(X509_NAME)
需要将此STACK_OF(X509_NAME)
传递给openssl api ENGINE_load_ssl_client_cert
答案 0 :(得分:0)
我需要将
STACK_OF(X509_NAME)
传递给ENGINE_load_ssl_client_cert
...
你没有给我们太多的帮助。不清楚你的问题是什么,所以很难说你应该做些什么不同。
开始在<openssl src dir>/ssl/s3_clnt.c
中跟踪OpenSSL的代码:
int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey)
{
int i = 0;
#ifndef OPENSSL_NO_ENGINE
if (s->ctx->client_cert_engine) {
i = ENGINE_load_ssl_client_cert(s->ctx->client_cert_engine, s,
SSL_get_client_CA_list(s),
px509, ppkey, NULL, NULL, NULL);
if (i != 0)
return i;
}
#endif
if (s->ctx->client_cert_cb)
i = s->ctx->client_cert_cb(s, px509, ppkey);
return i;
}
如您所见,它需要一堆X509
,而不是X509_NAME
。我从未花费任何重要时间使用ENGINE代码,因此我不确定接下来会发生什么。
您可能也对OpenSSL wiki上的STACK API感兴趣。
最后,还有其他一些你可能感兴趣的点击。我很惊讶地看到其中一个应用中有没有点击。
$ grep -IR ENGINE_load_ssl_client_cert *
crypto/engine/eng_err.c: "ENGINE_load_ssl_client_cert"},
crypto/engine/eng_pkey.c:int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s,
crypto/engine/engine.h:int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s,
ssl/s3_clnt.c: i = ENGINE_load_ssl_client_cert(s->ctx->client_cert_engine, s,
util/libeay.num:ENGINE_load_ssl_client_cert 4046 EXIST::FUNCTION:ENGINE