Tôi đang cố gắng tạo chứng chỉ tự ký bằng ruby, nhưng đang gặp sự cố. Đây là những gì tôi đang có ngay bây giờ:Ruby Tạo Chứng chỉ Tự ký
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}") }
Khi tôi cố gắng sử dụng khóa bí mật được tạo ra và chứng chỉ trong apache, tôi nhận được lỗi này:
[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
Đây là những gì giấy chứng nhận của tôi nói:
-----BEGIN CERTIFICATE-----
<lots of stuff>
-----END CERTIFICATE-----
Nó tự gọi nó là chứng chỉ thay vì CSR, đó là điều mà hầu hết những điều tôi đã tìm thấy trực tuyến nói về lỗi apache2 đó (tôi có thể đã nhận được CSR và CERT). Tôi đoán là tôi không tạo đúng loại chứng chỉ. Có lẽ tôi phải thay đổi các thuộc tính nối tiếp hoặc phiên bản. Ngoài ra, tôi không làm bất cứ việc tự ký nào ở bất cứ đâu, không phải là tôi biết. Tôi biết bạn có thể làm một cái gì đó như thế này mặc dù:
require "openssl"
key = OpenSSL::PKey::RSA.generate(1024)
signature = key.sign(OpenSSL::Digest::SHA1.new, "data to sign")
Nhắc nhở: Mục tiêu của tôi là tạo chứng chỉ tự ký, trong trường hợp câu hỏi dài của tôi bị mất tập trung trên đường.
EDIT: Tôi đoán câu hỏi thực sự là làm thế nào để đăng ký một giấy chứng nhận với một chìa khóa
Bất kỳ một người sẽ quan tâm tôi đã chuẩn bị exammple csr trong ruby, Bạn có thể tìm thấy nó ở đây: https://gist.github.com/1922961 – mtfk