如何使用CryptSignMessage与OpenSSL的结果来验证数字符号

时间:2012-06-15 13:57:17

标签: cryptography openssl digital-signature cryptoapi

我正在尝试验证分离的PKCS#7签名。使用WIN32 CryptoAPI函数生成的文件CryptSignMessage()。文件在客户端签名,但必须在服务器端FreeBSD上验证。所以我不能使用CryptoAPI。

请帮我确定如何使用OpenSSL进行此类任务。现在我有两个文件FILENAME.xml和FILENAME.xml.sig,其中包含签名信息。根据规范,该文件包括“指定内容的散列,对散列进行签名,然后对原始消息内容和签名散列进行编码”。我发现它还包含证书。使用openssl,我可以从此文件中检索公钥和证书,但我不知道如何检索签名信息?

所以我试图从这个文件中检索信息,例如公钥和签名,以便与openssl命令一起使用

  

openssl dgst -verify PUBLIC_KEY_FILE -signature SIGNATURE_FILE -md_gost94 FILENAME.xml   验证失败

此外,还有一项服务可以读取此文件中的所有信息。 http://notary.cryptopro.ru/Detached.aspx

Information about EDS:
Algortim hashing:
Name:
GOST R 34.11-94
ID:
1.2.643.2.2.9
Algortim public key:
Name:
GOST R 34.10-2001
ID:
1.2.643.2.2.19
Value:
2DEA 8713 5AS2 69AA 34E0 B333 EF61 3773 5CF1
3BC4 BAD0 1745 0DDD 9577 FFAE BA4A A9EB A8CF
64B9 C338 1513 8BDB C478 BA3A 5409 6419 03A6
DD3A 04D2 D132 3319 8031
Serial Number: 1F11 EF05 0001 0000 1032

也许我不懂东西。请帮忙。 它完全可以吗?

1 个答案:

答案 0 :(得分:1)

如果您使用了CryptSignMessage()功能,则您拥有此公钥的证书。因此,您可以使用openssl cms服务(在某些发行版中,openssl是在没有它的情况下构建的,在这种情况下,您可以使用enable-cms选项重新编译它们。)

示例命令是:

openssl cms -verify -nointern -noverify -certfile CERTIFICATE_FILE -inform DER -in SIGNATURE_FILE -content CONTENT_FILE -out /dev/null

其中CERTIFICATE_FILE是 Base64 形式的证书。

P.S。我不确定GOST算法是否支持。首先尝试使用sha1RSA。