Cryptography 如何在OpenSSL中使用CryptSignMessage的结果验证数字签名

Cryptography 如何在OpenSSL中使用CryptSignMessage的结果验证数字签名,cryptography,openssl,digital-signature,cryptoapi,Cryptography,Openssl,Digital Signature,Cryptoapi,我正在验证分离的PKCS#7签名。使用WIN32 CryptoAPI函数CryptoSignMessage()生成的文件。文件在客户端签名,但必须在服务器端FreeBSD上进行验证。所以我不能使用CryptoAPI 请帮助我确定如何使用OpenSSL完成此类任务。现在我有两个文件FILENAME.xml和FILENAME.xml.sig,其中包含签名信息。根据规范,该文件包括“指定内容的散列,对散列进行签名,然后对原始消息内容和签名的散列进行编码。”我发现它还包含证书。使用openssl,我可以

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

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

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

openssl dgst-验证公钥文件-签名文件-md_gost94 FILENAME.xml 验证失败

还有一个服务可以读取此文件中的所有信息

也许我不明白什么。请帮忙。
完全可以吗?

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

示例命令是:

openssl cms -verify -nointern -noverify -certfile CERTIFICATE_FILE -inform DER -in SIGNATURE_FILE -content CONTENT_FILE -out /dev/null
其中,证书文件是Base64格式的证书


另外,我不确定GOST算法是否支持。请先尝试sha1RSA。

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

示例命令是:

openssl cms -verify -nointern -noverify -certfile CERTIFICATE_FILE -inform DER -in SIGNATURE_FILE -content CONTENT_FILE -out /dev/null
其中,证书文件是Base64格式的证书

另外,我不确定GOST算法是否支持。先试试sha1RSA