gpt4 book ai didi

来自 x509 证书的 Ruby 编码主题

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:51 26 4
gpt4 key购买 nike

我需要帮助

require 'openssl'
Encoding.default_external = Encoding::UTF_8
certificate = OpenSSL::X509::Certificate.new(File.open('!^9e1209.cer'))
puts certificate.subject

来自这个证书文件: cert file我得到的主题如下:

: /C=UA/ST=\xD0\x96\xD0\xB8\xD1\x82\xD0\xBE\xD0\xBC\xD0\xB8\xD1\x80\

但是如果我从 Windows 控制台复制这个字符串并粘贴到编辑器中:

Encoding.default_external = Encoding::UTF_8
puts a = "/C=UA/ST=\xD0\x96\xD0\xB8\xD1\x82\xD0\xBE\xD0\xBC\xD0\xB8\xD1\x80\xD"

我得到:

: /C=UA/ST=Житомир

如何在从证书中提取后立即对 certificate.subject 进行编码?

最佳答案

我在搜索另一个与 X509 证书和 Ruby 相关的问题时偶然发现了您的问题。已经在 ruby/openssl Github repository (issue 26) 中看到这个问题,您可以使用原始问题中的代码来解决您自己的问题。

require 'openssl'

### Note 1 ###
# I had to look this up in the OpenSSL include files.
# I couldn't find it in ruby anyplace.
ASN1_STRFLGS_ESC_MSB = 4

Encoding.default_external = Encoding::UTF_8
certificate = OpenSSL::X509::Certificate.new(File.open('!^9e1209.cer'))

i_expected_this_to_work = certificate.subject.to_s
puts i_expected_this_to_work
puts i_expected_this_to_work.encoding

# Following instructions from https://wiki.openssl.org/index.php/Manual:X509_NAME_print_ex(3)
# to get UTF-8.
puts
puts 'The "Using magic flags" approach'

oh_so_close = certificate.subject.to_s(OpenSSL::X509::Name::ONELINE & ~ASN1_STRFLGS_ESC_MSB)
puts oh_so_close
puts oh_so_close.encoding

puts
puts 'The "Fix the magic flags" approach'
corrected_approach = oh_so_close.force_encoding(Encoding::UTF_8)
puts corrected_approach
puts corrected_approach.encoding

结果将是:

/C=UA/ST=\xD0\x96\xD0\xB8\xD1\x82\xD0\xBE\xD0\xBC\xD0\xB8\xD1\x80\xD1\x81\xD1\x8C\xD0\xBA\xD0\xB0/L=\xD0\x96\xD0\xB8\xD1\x82\xD0\xBE\xD0\xBC\xD0\xB8\xD1\x80/O=\xD0\xA3\xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xBB\xD1\x96\xD0\xBD\xD0\xBD\xD1\x8F \xD0\x9D\xD0\x91\xD0\xA3 \xD0\xB2 \xD0\x96\xD0\xB8\xD1\x82\xD0\xBE\xD0\xBC\xD0\xB8\xD1\x80\xD1\x81\xD1\x8C\xD0\xBA\xD1\x96\xD0\xB9 \xD0\xBE\xD0\xB1\xD0\xBB\xD0\xB0\xD1\x81\xD1\x82\xD1\x96/OU=\xD0\x92\xD1\x96\xD0\xB4\xD0\xB4\xD1\x96\xD0\xBB \xD0\xB3\xD0\xBE\xD1\x82\xD1\x96\xD0\xB2\xD0\xBA\xD0\xBE\xD0\xB2\xD0\xBE\xD0\xB3\xD0\xBE \xD0\xBE\xD0\xB1\xD1\x96\xD0\xB3\xD1\x83 \xD1\x96 \xD0\xBA\xD0\xB0\xD1\x81\xD0\xBE\xD0\xB2\xD0\xB8\xD1\x85 \xD0\xBE\xD0\xBF\xD0\xB5\xD1\x80\xD0\xB0\xD1\x86\xD1\x96\xD0\xB9/OU=\xD0\xA1\xD0\xB5\xD0\xBA\xD1\x82\xD0\xBE\xD1\x80 \xD0\xBA\xD0\xB0\xD1\x81\xD0\xBE\xD0\xB2\xD0\xB8\xD1\x85 \xD0\xBE\xD0\xBF\xD0\xB5\xD1\x80\xD0\xB0\xD1\x86\xD1\x96\xD0\xB9 \xD1\x82\xD0\xB0 \xD0\xB7\xD0\xB1\xD0\xB5\xD1\x80\xD1\x96\xD0\xB3\xD0\xB0\xD0\xBD\xD0\xBD\xD1\x8F \xD1\x86\xD1\x96\xD0\xBD\xD0\xBD\xD0\xBE\xD1\x81\xD1\x82\xD0\xB5\xD0\xB9/title=\xD1\x81\xD1\x82\xD0\xB0\xD1\x80\xD1\x88\xD0\xB8\xD0\xB9 \xD0\xBA\xD0\xB0\xD1\x81\xD0\xB8\xD1\x80/CN=\xD0\x91\xD0\xBE\xD0\xB4\xD1\x80\xD0\xBE\xD0\xB2 \xD0\x9C\xD0\xB8\xD0\xBA\xD0\xBE\xD0\xBB\xD0\xB0 \xD0\x9F\xD0\xB5\xD1\x82\xD1\x80\xD0\xBE\xD0\xB2\xD0\xB8\xD1\x87/serialNumber=00000DF9/UID=9E1209
ASCII-8BIT

The "Using magic flags" approach
C = UA, ST = Житомирська, L = Житомир, O = Управління НБУ в Житомирській області, OU = Відділ готівкового обігу і касових операцій, OU = Сектор касових операцій та зберігання цінностей, title = старший касир, CN = Бодров Микола Петрович, serialNumber = 00000DF9, UID = 9E1209
ASCII-8BIT

The "Fix the magic flags" approach
C = UA, ST = Житомирська, L = Житомир, O = Управління НБУ в Житомирській області, OU = Відділ готівкового обігу і касових операцій, OU = Сектор касових операцій та зберігання цінностей, title = старший касир, CN = Бодров Микола Петрович, serialNumber = 00000DF9, UID = 9E1209
UTF-8

祝你好运!

关于来自 x509 证书的 Ruby 编码主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com