Как использовать закрытый ключ в модуле PKCS # 11 вместо файла ключа доступа для взаимной аутентификации в OpenSSL?

У меня есть простой клиент SSL, который использует библиотеку OpenSSL. Мой сервер требует аутентификации клиента, поэтому я должен установить закрытый ключ клиента, хранящийся в защищенном паролем файле 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();
}

Теперь я хочу знать, как я могу установить SSL-соединение, используя закрытый ключ, хранящийся в токене безопасности (с интерфейсом PKCS # 11), вместо того, чтобы читать его из файла?


person Ehsan Khodarahmi    schedule 25.11.2014    source источник


Ответы (1)


Ответ немного сложен. Сначала вам нужно загрузить Engine вашего 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* из движка EVP_PKEY* key = ENGINE_load_private_key(e, "SecureToken", NULL, &cb_data);

и передать его в SSL: int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);

строки SecureToken и pkcs11_engine вы должны найти в документации к модулю вашего движка pkcs11

person Alex Bezuglyi    schedule 25.11.2014
comment
Вы знаете какие-нибудь хорошие ресурсы, которые объясняют этот тип двигателей? - person Ehsan Khodarahmi; 25.11.2014
comment
Отсутствует документация по openssl. Что я делаю. Во-первых, вы должны начать работать с openssl с вашим токеном через командную строку. Затем я скомпилировал openssl с опцией отладки и проверил код в отладчике. - person Alex Bezuglyi; 25.11.2014
comment
эта ссылка может быть отправной точкой: opensc-project.org/opensc/wiki/engine_pkcs11< /а> - person Ehsan Khodarahmi; 27.11.2014