如何在 ruby 中使用 openssl 生成 csr 和 crt 文件

How to generate csr and crt files using openssl in ruby

所以我正在使用 AWS Iot 并在后端的 rails 上有一个服务器 运行ning ruby。我需要为客户端生成一些证书,而 AWS 网站上的示例仅提供了一种使用 openssl 命令行执行此操作的方法。如果可能的话,我想使用 ruby 中的开放式 ssl 库来执行此操作,以避免在终端中发出 ruby 运行 命令,这可能会导致问题。
这些是我想使用 ruby

复制的命令
openssl genrsa -out deviceCert.key 2048    

openssl req -new -key deviceCert.key -out deviceCert.csr    

openssl x509 -req -in deviceCert.csr -CA sampleCACertificate.pem -CAkey sampleCACertificate.key -CAcreateserial -out deviceCert.crt -days 99999 -sha256  

我找到并认为我能做到的第一行

require 'openssl'    
rsa_key = OpenSSL::PKey::RSA.new(2048)    

但我卡在了最后两行。有任何想法吗?

下面是生成自签名证书的示例。

require 'rubygems'
require 'openssl'

key = OpenSSL::PKey::RSA.new(1024)
public_key = key.public_key

subject = "/C=BE/O=Test/OU=Test/CN=Test"

cert = OpenSSL::X509::Certificate.new
cert.subject = cert.issuer = OpenSSL::X509::Name.parse(subject)
cert.not_before = Time.now
cert.not_after = Time.now + 365 * 24 * 60 * 60
cert.public_key = public_key
cert.serial = 0x0
cert.version = 2

ef = OpenSSL::X509::ExtensionFactory.new
ef.subject_certificate = cert
ef.issuer_certificate = cert
cert.extensions = [
  ef.create_extension("basicConstraints","CA:TRUE", true),
  ef.create_extension("subjectKeyIdentifier", "hash"),
  # ef.create_extension("keyUsage", "cRLSign,keyCertSign", true),
]
cert.add_extension ef.create_extension("authorityKeyIdentifier",
                                       "keyid:always,issuer:always")

cert.sign key, OpenSSL::Digest::SHA1.new

puts cert.to_pem

Source for Example

最终能够使用这个 rdoc 示例解决问题 http://ruby-doc.org/stdlib-2.0.0/libdoc/openssl/rdoc/OpenSSL/X509/Certificate.html#method-c-new