我想使用OpenSSL生成私有/公共/(证书签名请求)并稍后签署一些数据。但我想使用OpenSSL GOST engine。
我下载了OpenSSL 1.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个文件:
我知道我可以做(打印私钥和公钥的(未加密的)文本表示):
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的mabye)?
我用:
感谢您的帮助。
答案 0 :(得分:17)
我解决了我的问题。
为希望替代КРИПТО-ПРО
的所有人提供分步指南证书签名请求(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)(仅限!!! ADMIN COMMAND PROM !!!)
如果不是管理员:“无法写'随机状态'”
./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 hex
./openssl.exe dgst -hex -sign private.key.pem message.xml
获取MIME应用程序/ x-pkcs7-signature
./openssl smime -sign -inkey private.key.pem -signer crt.crt -in message.xml