簡體   English   中英

如何在PKCS#11模塊上使用私鑰,而不是在OpenSSL中使用私鑰文件進行相互認證?

[英]How to use private key on a PKCS#11 module instead of perivate key file for mutual-authentication in OpenSSL?

我有一個使用OpenSSL庫的簡單SSL客戶端。 我的服務器需要客戶端身份驗證,因此我必須設置存儲在受密碼保護的PEM文件中的客戶端私鑰。 為此,我使用以下代碼:

/* set the private key from KeyFile */
if (SSL_CTX_use_PrivateKey_file(ctx, KeyFile, SSL_FILETYPE_PEM) <= 0)
{
    ERR_print_errors_fp(stderr);
    abort();
}

/* verify private key */
if ( !SSL_CTX_check_private_key(ctx) )
{
    fprintf(stderr, "Private key does not match the public certificate\n");
    abort();
}

現在,我想知道如何使用存儲在安全令牌(帶有PKCS#11接口)中的私鑰而不是從文件中讀取私鑰來建立SSL連接?

答案有點復雜。 首先,您需要加載PKCS#11的引擎:

ENGINE_load_builtin_engines();
{
    if (!(e = ENGINE_by_id("dynamic")))
        goto err;
    if (!ENGINE_ctrl_cmd_string(e, "SO_PATH", "dstu", 0))
        goto err;
    if (!ENGINE_ctrl_cmd_string(e, "LIST_ADD", "2", 0))
        goto err;
    if (!ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0))
        goto err;
    e = ENGINE_by_id("pkcs11_engine");
    if (!e)
      return error;

res = ENGINE_init(e);
if (!ENGINE_set_default(e, ENGINE_METHOD_ALL))
    goto err;

}

那么您需要從引擎EVP_PKEY* key = ENGINE_load_private_key(e, "SecureToken", NULL, &cb_data);加載EVP_PKEY * EVP_PKEY* key = ENGINE_load_private_key(e, "SecureToken", NULL, &cb_data);

並將其傳遞給SSL: int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);

您應該在引擎pkcs11模塊的文檔中找到字符串SecureTokenpkcs11_engine

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM