Ruby генерирует самоподписанный сертификат

Я пытаюсь генерировать самоподписанный сертификат в рубине, но сталкиваюсь с проблемой. Это - то, что я в настоящее время имею прямо сейчас:

require 'openssl'

if ARGV.length != 3 then
    puts "USAGE: #{__FILE__} <type[der|pem]> <private-out> <public-out>"
    exit
end

type = ARGV[0].downcase
privateKeyFile = ARGV[1]
publicKeyFile = ARGV[2]

values = [{ 'C' => 'US'},
          {'ST' => 'SomeState'},
          { 'L' => 'SomeCity'},
          { 'O' => 'Organization'},
          {'OU' => 'Organizational Unit'},
          {'CN' => "somesite.com"}]

name = values.collect{ |l| l.collect { |k, v| "/#{k}=#{v}" }.join }.join

key = OpenSSL::PKey::RSA.generate(1024)
pub = key.public_key
ca = OpenSSL::X509::Name.parse(name)
cert = OpenSSL::X509::Certificate.new
cert.version = 2 
cert.serial = 1 
cert.subject = ca
cert.issuer = ca
cert.public_key = pub 
cert.not_before = Time.now
cert.not_before = Time.now + (360 * 24 * 3600)

File.open(privateKeyFile + "." + type, "w") {|f| f.write key.send("to_#{type}") }
File.open(publicKeyFile + "." + type, "w") {|f| f.write cert.send("to_#{type}") }

Когда я пытаюсь использовать сгенерированный закрытый ключ и сертификат в апаче, я получаю эту ошибку:

[Thu Mar 04 10:58:44 2010] [error] Init: Unable to read server certificate from file /etc/ssl/certs/gnarly.pem
[Thu Mar 04 10:58:44 2010] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Thu Mar 04 10:58:44 2010] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error

Это - то, что говорит мой сертификат:

-----BEGIN CERTIFICATE-----
<lots of stuff>
-----END CERTIFICATE-----

Это называет себя сертификатом вместо CSR, который является тем, что большинство вещей, которые я нашел онлайн, говорит о том, что apache2 ошибка (что я, возможно, получил CSR и перепутанный CERT). Мое предположение - то, что я не генерирую правильный тип сертификата. Возможно, я должен изменить последовательные или атрибуты версии. Кроме того, я не делаю никакого самоподписания нигде, не, что я знаю о так или иначе. Я знаю, что можно сделать что-то вроде этого хотя:

require "openssl"
key = OpenSSL::PKey::RSA.generate(1024)
signature = key.sign(OpenSSL::Digest::SHA1.new, "data to sign")

Напоминание: Моя цель состоит в том, чтобы генерировать самоподписанный сертификат, в случае, если мой длинноватый вопрос потерял внимание на путь.

Править: Я предполагаю, что реальный вопрос состоит в том, как подписать сертификат с ключом

7
задан Tilo 16 May 2013 в 18:49
поделиться

2 ответа

С тех пор я нашел несколько очень хороших источников примеров использования OpenSSL:

http://snippets.dzone.com/posts/show/6309

http://projects.reductivelabs.com/projects/ puppet / repository / revisions / master / entry / lib / puppet / sslcertificates.rb

http://projects.reductivelabs.com/projects/puppet/repository/revisions/master/entry/lib/puppet/sslcertificates/ca. rb

http://projects.reductivelabs.com/projects/puppet/repository/revisions/master/entry/lib/puppet/sslcertificates/certificate.rb

Я до сих пор не нашел хорошей документации по этому поводу , хотя я не думаю, что это займет слишком много времени, чтобы записывать то, что в примерах.

Я также понял, как делать то, что я хотел, из исходного кода марионетки. Надеюсь, это поможет кому-то еще, кто разочарован отсутствием документации OpenSSL в ruby.

1
ответ дан 7 December 2019 в 03:14
поделиться

В create_self_signed_cert есть метод webrick/ssl, который прост для понимания и полезен.

2
ответ дан 7 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: