在Ruby中用N和e创建PEM格式的证书

时间:2017-10-16 19:05:39

标签: ruby ssl

我正在处理以下列格式向公共密钥发送公钥的网络服务。

source name_of_that_file

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

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

编辑:

这个python代码基本上是我在Ruby中尝试做的事情。我正在寻找RSAPublicNumbers类的等价物。 synchronizes with

1 个答案:

答案 0 :(得分:0)

选中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