OpenSSL与GOST引擎

10

我想使用OpenSSL生成私钥/公钥/(证书签名请求)并在以后签署一些数据。但我想使用OpenSSL GOST引擎

我下载了OpenSSL1.0.0并修改了openssl.cfg文件:

    openssl_conf = openssl_def

    [openssl_def]
    engines = engine_section

    [engine_section]
    gost = gost_section

    [gost_section]
    engine_id = gost
    dynamic_path = ./gost.dll
    default_algorithms = ALL
    CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet

我可以生成私钥和CSR(一行命令字符串):

    openssl req -newkey gost2001 -pkeyopt paramset:A -passout pass:aofvlgzm \
    -subj "/C=RU/ST=Moscow/L=Moscow/O=foo_bar/OU=foo_bar/CN=developer/ \
           emailAddress=vany.egorov@gmail.com" \
    -new > certificate_signing_request.csr

我得到了2个文件:

  • certificate_signing_request.csr
  • privkey.pem

我知道可以这样做(打印私钥和公钥的文本表示形式,未加密):

    openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -text

我使用 GOST 而不是 RSA,因此我不能执行以下操作:

    openssl rsa -in privkey.pem -pubout -out pubkey.pem
    Enter pass phrase for privkey.pem:
    6132:error:0607907F:digital envelope routines:EVP_PKEY_get1_RSA:expecting an rsa key:.\crypto\evp\p_lib.c:288:

我的问题是:如何使用GOST生成/获取公钥(也许是从私钥或CSR中获取)?

我使用的工具有:

  • Windows 7专业版x64;
  • OpenSSL 1.0.0;
  • Gost引擎

感谢任何帮助。

1个回答

20

我解决了我的问题。

为那些想要使用替代方案的人提供的逐步指南(КРИПТО-ПРО

证书签名请求(CSR) + 私钥

./openssl req -newkey gost2001 -pkeyopt paramset:A -passout pass:aofvlgzm -subj "/C=RU/ST=Moscow/L=Moscow/O=foo_bar/OU=foo_bar/CN=developer/emailAddress=vany.egorov@gmail.com" -keyout private.key.pem -out csr.csr

使用私钥(private.key.pem)签署CSR (csr.csr) (!!! 仅限管理员命令提示符 !!!)

如果不是管理员:"unable to write 'random state'"

./openssl x509 -req -days 365 -in csr.csr -signkey private.key.pem -out crt.crt

获取公钥

./openssl x509 -inform pem -in crt.crt -pubkey -noout > public.key.pem

获取GOST2001-md_gost94十六进制值

./openssl.exe dgst -hex -sign private.key.pem message.xml

获取MIME application/x-pkcs7-signature

./openssl smime -sign -inkey private.key.pem -signer crt.crt -in message.xml


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接