ruby - ruby/rails 中的 openssl smime

标签 ruby ruby-on-rails-3.1 openssl smime

所以,我有这个应用程序可以创建一个包含图像和内容的 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

最佳答案

找到了方法。

像这样:

  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

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

关于ruby - ruby/rails 中的 openssl smime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159478/

相关文章:

ruby - 如何重写 Ruby 中的数组构造函数?

actionmailer - Rails 3.1RC4 Mailer 邮件方法返回错误数量的参数(0 代表 1)

c - EVP_PKEY_keygen() 将 key 对生成为字符串?

java - 未提供 Android 列出的加密算法

ruby - bundle 安装出现错误 Bundler::HTTPError 无法从 http://rubygems.org/获取规范

ruby - Ruby 中的罗马数字

ruby-on-rails-3 - 轨道路线上多个 Controller 的根路径

ruby-on-rails-3 - OpenSSL + 自签名证书 = OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

ruby - 使用 Sequel 创建记录时出现“Sequel::Error: id is a restricted primary key”

ruby-on-rails - 我如何判断是否使用了出售的 gem?