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