如何在 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
最终能够使用这个 rdoc 示例解决问题
http://ruby-doc.org/stdlib-2.0.0/libdoc/openssl/rdoc/OpenSSL/X509/Certificate.html#method-c-new
所以我正在使用 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
最终能够使用这个 rdoc 示例解决问题 http://ruby-doc.org/stdlib-2.0.0/libdoc/openssl/rdoc/OpenSSL/X509/Certificate.html#method-c-new