3
我在Erlang中创建了一个应用程序,它给出一个RSA私钥,它可以返回RSA公钥和与该私钥相关联的x509公钥。从Erlang的RSA私钥生成x509公钥
我知道我可以通过从私钥获取模数和公开指数来生成RSA公钥。
--from OTP-PUB-KEY.hrl
-record('RSAPrivateKey',{
version, modulus, publicExponent, privateExponent, prime1, prime2, exponent1, exponent2, coefficient, otherPrimeInfos = asn1_NOVALUE}).
-record('RSAPublicKey',{
modulus, publicExponent}).
但我该如何生成x509公钥?
我知道这是可能的,因为我用Perl编写的旧代码使用要做到这一点通过调用是这样的:
$private = Crypt::OpenSSL::RSA->new_private_key($hash_ref->{'private'});
{rsa => $private->get_public_key_string(),
x509 => $private->get_public_key_x509_string()};
有谁有任何想法如何做到这一点?
-----只是一个UPDATE ----
我已经找到了解决办法花一些时间来学习X509和阅读二郎PUBLIC_KEY文档后:
鉴于我能产生“RSAPublicKey”从简单地得到模量和publicExponent“RSAPrivateKey”,我的代码生成两个键应该是这样的:
getPublicKeysFromPrivateKey(#'RSAPrivateKey'{modulus = M, publicExponent = PE}) ->
RSAPub = #'RSAPublicKey'{modulus = M, publicExponent = PE},
%% Encoding the keys
RSAPublicKey = public_key:pem_encode([public_key:pem_entry_encode('RSAPublicKey', RSAPub)]),
X509PublicKey = public_key:pem_encode([public_key:pem_entry_encode('SubjectPublicKeyInfo', RSAPub)]),
[{rsa, RSAPublicKey},{x509, X509PublicKey}].
将产生:
[{rsa,<<"-----BEGIN RSA PUBLIC KEY----- \nMIGJAoGBAMU8ZcQ4S+gHDuZd6cEdqbf9l1Hw4fxQrJ455B2kJRUwyKidVbCH2omy\nI0SLNu92"...>>},
{x509,<<"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFPGXEOEvoBw7mXenBHam3/ZdR\n8OH8UKye"...>>}]
谢谢。
你的意思是X509证书?你为什么认为你需要这样的事情? –
我真的想要x509公钥。这是RASPublicKey的另一种格式,其'PEM'格式将是'BEGIN PUBLIC KEY'而不是'BEGIN RSA PUBLIC KEY'。 – RobisonSantos