ruby/rails 中的 openssl smime

Posted

技术标签:

【中文标题】ruby/rails 中的 openssl smime【英文标题】:openssl smime in ruby/rails 【发布时间】:2012-06-24 22:42:26 【问题描述】:

所以,我有这个应用程序可以创建一个包含图像和内容的 zip 文件

我想用smime签名。

如果我使用终端命令:

openssl smime -binary -sign -passin "pass:MYPASS" -signer ./MyCertificate.pem -inkey ./MyKey.pem -in ./manifest.in -out ./signature.out -outform DER

格式化:

openssl smime -binary -sign -passin "pass:MYPASS"             \
         -signer ./MyCertificate.pem -inkey ./MyKey.pem       \
         -in ./manifest.in -out ./signature.out -outform DER

manifest.in 是包含要签名的文本的文件,signature.out 是输出文件。

我不太了解签名,但我相信这段代码正在使用 PKCS7 对我的文件进行签名

如何使用 ruby​​/rails 重新创建相同的结果?

我试图查看OpenSSL 的文档,但我找不到任何对我有用的东西

编辑

如果这对某人有帮助, 这就是文档所说的

我需要建立一个:

A detached PKCS#7 signature of the manifest

【问题讨论】:

你看过github.com/medined/smime吗?如果您愿意,您也可以使用该命令。 我看到了这个库,但帮助提出的问题多于实际帮助... 【参考方案1】:

找到了方法。

像这样:

  require 'secure_digest'

  def sign_manifest(manifest = )
    manifest_str = manifest.to_json

    key4_pem = File.read Rails.root.join("lib", "keys", "key.pem")
    pass_phrase = "supera"

    key = OpenSSL::PKey::RSA.new key4_pem, pass_phrase
    cert = OpenSSL::X509::Certificate.new File.read Rails.root.join("lib", "keys", "certificate.pem")

    sign = OpenSSL::PKCS7.sign(cert, key, manifest_str, nil, OpenSSL::PKCS7::BINARY | OpenSSL::PKCS7::NOATTR | OpenSSL::PKCS7::DETACHED).to_der

    sign
  end

只是为了澄清我的代码,清单参数是一个哈希女巫,我想使用此代码对其进行签名。如果我想要另一个项目,例如图像、字符串或文件,我只需要将其作为字符串读取

【讨论】:

以上是关于ruby/rails 中的 openssl smime的主要内容,如果未能解决你的问题,请参考以下文章

ruby Rails中的简单特征部署

Ruby/Rails 中的夏令时开始和结束日期

Ruby/Rails - 正确显示/格式化文本区域表单控件中的文本

比较数组中的值并删除 Ruby/Rails 中不同的项目

Ruby/Rails CSV 解析,UTF-8 中的无效字节序列

JSP,能不能像Ruby/Rails/Erb中的yield, layout, content_for一样工作