【问题标题】:How to decode CSR (PKCS #10) using Ruby如何使用 Ruby 解码 CSR (PKCS #10)
【发布时间】:2018-05-24 17:21:12
【问题描述】:

我有文件:

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDPzCCAqgCAQAwZDELMAkGA1UEBhMCQ04xCzAJBgNVBAgTAmJqMQswCQYDVQQH
EwJiajERMA8GA1UEChMIbXhjei5uZXQxETAPBgNVBAsTCG14Y3oubmV0MRUwEwYD
VQQDEwx3d3cubXhjei5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMQ7
an4v6pHRusBA0prMWXMWJCXY1AO1H0X8pvZj96T5GWg++JPCQE9guPgGwlD02U0B
NDoEABeD1fwyKZ+JV5UFiOeSjO5sWrzIupdMI7hf34UaPNxHo6r4bLYEykw/Rnmb
GKnNcD4QlPkypE+mLR4p0bnHZhe3lOlNtgd6NpXbAgMBAAGgggGZMBoGCisGAQQB
gjcNAgMxDBYKNS4yLjM3OTAuMjB7BgorBgEEAYI3AgEOMW0wazAOBgNVHQ8BAf8E
BAMCBPAwRAYJKoZIhvcNAQkPBDcwNTAOBggqhkiG9w0DAgICAIAwDgYIKoZIhvcN
AwQCAgCAMAcGBSsOAwIHMAoGCCqGSIb3DQMHMBMGA1UdJQQMMAoGCCsGAQUFBwMB
MIH9BgorBgEEAYI3DQICMYHuMIHrAgEBHloATQBpAGMAcgBvAHMAbwBmAHQAIABS
AFMAQQAgAFMAQwBoAGEAbgBuAGUAbAAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABp
AGMAIABQAHIAbwB2AGkAZABlAHIDgYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAADANBgkqhkiG9w0BAQUFAAOBgQBIKHVhHb9FZdVLV4VZ
9DK4aBSuYY//jlIpvsfMIdHXfAsuan7w7PH87asp1wdb6lD9snvLZix1UGK7VQg6
wUFYNlMqJh1m7ITVvzhjdnx7EzCKkBXSxEom4mwbvSNvzqOKAWsDE0gvHQ9aCSby
NFBQQMoW94LqrG/kuIQtjwVdZA==
-----END NEW CERTIFICATE REQUEST-----

如何在 Ruby 中对其进行解码以获得以下属于请求主题的信息?

  • 通用名:www.somedomain.com
  • 组织:someorg.com
  • 组织单位:someunit.com
  • 城市/地区:北京
  • 州/省:北京
  • 国家:中国

【问题讨论】:

  • 幸运的是,Ruby 带有一个 OpenSSL 模块,它包装了 OpenSSL 库。
  • RubyOpenSSL 可以generate CSR,但是那里没有解码方法。
  • OpenSSL::X509::Request.new(your_request_data) 呢?
  • 非常感谢!这解决了我的问题。附: OpenSSL::X509::Request.new(File.open("/my/file.csr").read)
  • 这将为您留下一个打开的文件句柄,请改用File.read('/my/file.csr')

标签: ruby-on-rails ruby openssl x509 csr


【解决方案1】:
  def parse_csr(file_path)
    csr = OpenSSL::X509::Request.new(File.read(file_path))
    # puts csr.subject.to_a
    # => [["C", "RU", 19], ["ST", "State", 12], ["L", "City", 12], ["O", "CompanyName", 12], ["OU", "Unit", 12], ["CN", "App 1.0", 12], ["emailAddress", "user@company.com", 22]]
    csr.subject.to_a.inject({}) do |r, s|
      r.merge!(s[0] => s[1])
    end
  end

输出:

=> {"C"=>"RU", "ST"=>"State", "L"=>"City", "O"=>"Company Name", "OU"=>"Unit", "CN"=>"App v1.0", "emailAddress"=>"user@company.com"}

【讨论】:

  • 略短:subject.to_a.each(&:pop).to_h
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
相关资源
最近更新 更多