You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:13:04