Здравствуйте! Пытаюсь создать сертификаты с поддержкой гост.
Получаю следующую ошибку при генерации сертификата уц:
error:8007D06C:lib(128):PKEY_GOST_CTRL:invalid digest type:gost_pmeth.c:82:
Команда создания ключа:
openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -out cakey.pem
Создание сертификата:
openssl req -key cakey.pem -new -x509 -extensions v3_ca -out cacert.pem
Или
openssl req -engine gost -newkey gost2001 -pkeyopt paramset:A -x509 -extensions v3_ca -passout pass:135246 -subj "/C=RU/ST=Moscow/L=Moscow/O=organization/CN=sample.ru/emailAddress=user@sample.ru" -keyout priv.pem -out req.csr
engine "gost" set.
Generating a 2048 bit GOST2001 private key
writing new private key to 'priv.pem'
-----
140203655325600:error:8007D06C:lib(128):PKEY_GOST_CTRL:invalid digest type:gost_pmeth.c:82:
Ключ генерится, сертификат не хочет.
В openssl.cnf прописано:
openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = /usr/lib64/openssl/engines/libgost.so
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
openssl ciphers | tr ":" "\n" | grep -i gost
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
Пробовал на разных версиях openssl (OpenSSL 1.0.2a-fips 19 Mar 2015 и OpenSSL 1.0.1e 11 Feb 2013)
В файле
gost_pmeth.c на 82 строке:
/* --------------------- control functions ------------------------------*/
static int pkey_gost_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
{
struct gost_pmeth_data *pctx =
(struct gost_pmeth_data *)EVP_PKEY_CTX_get_data(ctx);
switch (type) {
case EVP_PKEY_CTRL_MD:
{
if (EVP_MD_type((const EVP_MD *)p2) != NID_id_GostR3411_94) {
GOSTerr(GOST_F_PKEY_GOST_CTRL, GOST_R_INVALID_DIGEST_TYPE);
return 0;
}
pctx->md = (EVP_MD *)p2;
return 1;
}