2016-07-29 87 views

回答

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