我有我的证书,源文件,Base64格式的独立签名。CryptoARM程序中由UEC (通用电子卡-俄罗斯智能卡项目)创建的签名(我认为是使用GOST散列函数)。
我正在使用Ubuntu13.10并安装了OpenSSL 1.0.1e (默认情况下包含GOST支持)。
我已经在Ubuntu CA商店中安装了UEC CA服务器:
sudo cp ~/uec/uec.cer /usr/local/share/ca-certificates/uec.crt
sudo update-ca-certificates控制台验证成功(如果文件未被更改,则确定):
$ openssl smime -verify -engine gost -inform DER -in ~/uec/to_be.txt.sig -content ~/uec/to_be.txt
engine "gost" set.
Verification successful
Original file contents goes here因此,我试图在Ruby2.0.0和2.1.0中进行验证,正如在这个问题中所指出的:基于OpenSSL的数字签名验证
require 'openssl'
OpenSSL::Engine.load
engine = OpenSSL::Engine.by_id('gost')
cert_store = OpenSSL::X509::Store.new
cert_store.set_default_paths
my_cert = File.read('/home/envek/uec/envek-b64.cer')
data = File.read('/home/envek/uec/to_be.txt')
signature = OpenSSL::PKCS7.new(File.read('/home/envek/uec/to_be.txt.der.sig'))
signature.verify([my_cert], cert_store, data, OpenSSL::PKCS7::DETACHED || OpenSSL::PKCS7::NOVERIFY)
# => false
signature
# => #<OpenSSL::PKCS7:0x00000002168918 @data="\xEF\xBB\xBF\xD0\xAD\xD1\x82\xD0\xBE \xD1\x84\xD0\xB0\xD0\xB9\xD0\xBB, \xD0\xBA\xD0\xBE\xD1\x82\xD0\xBE\xD1\x80\xD1\x8B\xD0\xB9 \xD1\x8F \xD0\xBF\xD0\xBE\xD0\xB4\xD0\xBF\xD0\xB8\xD1\x88\xD1\x83", @error_string="unsupported algorithm">所以,我真的不知道为什么它只是返回假,我的引擎负荷是否有任何影响。如何说PKCS7#verify使用正确的算法,由GOST引擎提供?
有什么想法吗?
文件:
要使OpenSSL正常工作,需要采取以下步骤(找到这里):
这个字符串最多应该添加到/etc/ssl/openssl.cnf的顶部
openssl_conf = openssl_def这些字符串最多应该添加到/etc/ssl/openssl.cnf的底部。
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
default_algorithms = ALL
engine_id = gost在此之后,下一个命令应该显示下一个输出:
$ openssl ciphers | tr ":" "\n" | grep GOST
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89发布于 2014-04-14 21:57:07
奇怪的是,我只是尝试调用具有0xFFFF值的0xFFFF方法。只是:
engine.set_default(0xFFFF)而且有效!
文档对此完全不清楚。它所做的是什么,它作为价值所收到的标志是什么?任何人,请解释我。
https://stackoverflow.com/questions/23070936
复制相似问题