Ruby中含换行符的数据导致PKCS7验证失败的问题求助
Ruby中含换行符的数据导致PKCS7验证失败的问题求助
大家好,我最近在用Ruby的OpenSSL库做PKCS7签名验证时碰到了一个头疼的问题:只要待验证的数据里带有换行符,OpenSSL::PKCS7#verify就会返回false,哪怕我已经在调用时加上了OpenSSL::PKCS7::NOVERIFY标志也没用!
以下是我用来复现问题的完整测试代码:
require 'openssl' def test(data) store = OpenSSL::X509::Store.new signed = OpenSSL::PKCS7.sign(@cert, @key, data).to_der pkcs7 = OpenSSL::PKCS7.new(signed) valid = pkcs7.verify(pkcs7.certificates, store, data, OpenSSL::PKCS7::NOVERIFY) end @key = OpenSSL::PKey::RSA.new 2048 @cert = OpenSSL::X509::Certificate.new @cert.serial = 0 @cert.public_key = @key.public_key @cert.not_before = Time.now @cert.not_after = Time.now + 2**12 @cert.sign @key, OpenSSL::Digest.new('SHA256') test("foo") # => true test("foo\n") # => false
我试过把换行符放在字符串的任意位置,结果都是验证失败。实在搞不懂为什么一个换行符就能改变验证结果?有没有大佬知道这背后的原因,以及该怎么处理带换行符的输入字符串,才能正常完成PKCS7签名验证呢?
我的Ruby版本是2.6.8p205。
备注:内容来源于stack exchange,提问作者Jellicle
相关产品推荐
相关产品推荐

