以下命令用于通过openssl对字符串进行签名:
smime -sign -signer cert.crt -inkey key.key -engine gost -binary -noattr
假设.cer文件中包含密钥,那么如何执行相同的命令呢?
我假设有两种选择:
更新:文件内部如下所示:(使用openssl x509 -in cert.cer -noout -text
,用X_X_X替换敏感数据):
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
X_X_X
Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
Issuer: X_X_X
Validity
X_X_X
X_X_X
Subject: X_X_X
Subject Public Key Info:
Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus
Unable to load Public Key
842D0000:error:03000072:digital envelope routines:X509_PUBKEY_get0:decode error:crypto\x509\x_pubkey.c:458:
842D0000:error:03000072:digital envelope routines:X509_PUBKEY_get0:decode error:crypto\x509\x_pubkey.c:458:
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement
X509v3 Subject Alternative Name:
othername: title::<unsupported>
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication, 1.2.643.2.1.6.8.5, 1.2.643.3.61.502710.1.6.3.2, 1.2.643.3.251.1.1, 1.2.643.3.251.3
X509v3 Certificate Policies:
Policy: Class of Signing Tool KC1
1.2.643.100.114:
...
Signing Tool of Subject:
X_X_X
Signing Tool of Issuer:
signTool : X_X_X
cATool : X_X_X
signToolCert: X_X_X
cAToolCert : X_X_X
X509v3 CRL Distribution Points:
Full Name:
X_X_X
Full Name:
X_X_X
Authority Information Access:
CA Issuers - X_X_X
CA Issuers - X_X_X
X509v3 Subject Key Identifier:
X_X_X
X509v3 Authority Key Identifier:
keyid:X_X_X
DirName:X_X_X
serial:X_X_X
Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
Signature Value:
X_X_X
发布于 2022-09-06 10:22:51
我想有几件事需要注意。
文件后缀
首先,应该注意的是,问题中所建议的“.crt或.cer文件”是不一样的。这些只是文件后缀,您无法从中派生出实际的文件格式。
例如,在Windows中创建的.cer
文件通常是DER (二进制)格式,而openssl默认为PEM (基-64文本)格式。.crt
也是如此,它只是在Windows中更常用的后缀。其他后缀是.der
和.pem
,这表明它们的后缀和格式匹配。
openssl
可以处理这两种格式。您可以使用openssl
或-inform pem
选项让-inform pem
知道输入格式。
私钥
我假设您想要签名一封电子邮件,因为您使用的是smime
选项(虽然您提到要签名一个字符串,但在您的上下文中可能是相同的)。
为了签署一条消息,你需要一个私钥。如果给您的S/MIME证书文件显然包括私钥(有时称为私有证书),则不应该首先提取密钥。只是不要使用-inkey
选项。
引用自openssl小型文档
如果未指定此选项,则必须将私钥包括在-recip或-signer文件指定的证书文件中。
若要使用PEM格式的证书创建明文签名消息,请使用
openssl smime -sign -in message.txt -text -out mail.msg -signer cert.crt
如果证书文件包含私钥,则证书文件不能是DER格式,因为DER格式只能容纳一个对象,因此证书和私钥需要在单独的DER文件中。另见这个关于PEM和DER之间的区别的答案。(感谢dave_thompson_085纠正我。)
https://stackoverflow.com/questions/73607969
复制相似问题