【问题标题】:Creating PEM-format cert from N and e in Ruby在 Ruby 中从 N 和 e 创建 PEM 格式的证书
【发布时间】:2017-10-16 19:05:38
【问题描述】:

我正在处理一个 Web 服务,它以以下格式向客户端发送公钥。

DB2F71B3B998D600946FD47636122256FB9FA10A33A66707133A73CC458B9D90A593C32DD054BCF5CEA430CE512D659D689BD3E61ECCD4B18B3921FF7FB81F0433B9CE995A3DC096A8DD5C3A5F8EC6EB4C0CF1036CDBA0E29F20B54E1F690002A01F29A7BB9622B05835C23EBDF8F1A0D4581C9579B29877F1457053B681DA72A0DD4BF1133B857BEB7C3971416F12D6630F7939DF3C44DFB4555B5A8260134FC3AEB328CF76697367A336E881FE291F860E5E7BE708F9BA7C046632868B17468AC7BD8013032F17BDA9DF9DFF0552B33C8431075BA0936BDFF9E6173EF1901AFE27FD72422EAD6F77059F15BADB4F376F56C1F04D6DB52E509954399DEC28D9:10001

注意 N 和 e 值用冒号 ':' 分隔。

我想使用 OpenSSL::PKey::RSA 来处理公钥,但它只接受 DER 和 PEM 格式的证书。如何将我获得的公钥格式化为 PEM 或 DER 格式证书,供 Ruby 中的 OpenSSL 包装库使用?

编辑:

这个 python 代码基本上完成了我在 Ruby 中尝试做的事情。我正在寻找 RSAPublicNumbers 类的等价物。 https://github.com/jpf/okta-jwks-to-pem/blob/master/jwks_to_pem.py#L40

【问题讨论】:

  • FWIW 最终目标只是加密一个字符串。
  • 感谢您提供 Python 链接!那个链接正是我需要的!

标签: ruby ssl


【解决方案1】:

查看base64_to_long

def generate_key_from_jwks(kid_header)
  key = OpenSSL::PKey::RSA.new
  exponent = kid_header['e']
  modulus = kid_header['n']
  key.set_key(base64_to_long(modulus), base64_to_long(exponent), nil)
end

def base64_to_long(data)
  decoded_with_padding = Base64.urlsafe_decode64(data) + Base64.decode64('==')
  decoded_with_padding.to_s.unpack('C*').map do |byte|
    to_hex(byte)
  end.join.to_i(16)
end

def to_hex(int)
  int < 16 ? '0' + int.to_s(16) : int.to_s(16)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2014-07-27
    • 2011-10-18
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2022-07-08
    相关资源
    最近更新 更多