Ich versuche, ein selbstsigniertes Zertifikat in Ruby zu generieren, bekomme aber Probleme. Das ist, was ich habe zur Zeit gerade jetzt:Ruby Generieren selbstsigniertes Zertifikat
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}") }
Wenn ich versuche, die erzeugten privaten Schlüssel und das Zertifikat in Apache zu verwenden, erhalte ich diese Fehlermeldung:
[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
Dies ist, was mein Zertifikat sagt:
-----BEGIN CERTIFICATE-----
<lots of stuff>
-----END CERTIFICATE-----
Es nennt sich ein Zertifikat anstelle eines CSR, das ist es, was die meisten Dinge, die ich online über diese apache2 Fehler sagen gefunden habe (dass ich vielleicht die CSR und CERT gemischt bekommen). Meine Vermutung ist, dass ich nicht den richtigen Zertifikatstyp erstelle. Vielleicht muss ich die Serien- oder Versionsattribute ändern. Außerdem mache ich nirgendwo Selbstsignaturen, nicht, dass ich es sowieso wüsste. Ich weiß, dass Sie so etwas wie dies obwohl tun können:
require "openssl"
key = OpenSSL::PKey::RSA.generate(1024)
signature = key.sign(OpenSSL::Digest::SHA1.new, "data to sign")
Zur Erinnerung: Mein Ziel ist es, ein selbst signiertes Zertifikat, falls meine lang ish Frage verloren Fokus auf die Art und Weise zu erzeugen.
EDIT: Ich denke, die wirkliche Frage ist, wie ein Zertifikat mit einem Schlüssel
Jeder, der interessiert sein werde ich csr exammple vorbereitet in Rubin, Sie können es hier finden: https://gist.github.com/1922961 – mtfk