1

我正在尝试验证分离的 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

也许我不明白一些事情。请帮忙。有可能吗?

4

1 回答 1

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形式的证书。

PS 我不确定 GOST 算法是否支持。首先尝试 sha1RSA。

于 2013-02-04T09:33:50.690 回答