(Erlang)以Pem格式从证书中提取公钥

Jey*_*hey 5 erlang rsa certificate pem public-key

我有一个pem格式的证书,我想提取公共密钥(RSA)。我已经很远了:

{ok, PemBin} = file:read_file("/path/to/certificate.pem").
[Certificate] = public_key:pem_decode(PemBin).
Run Code Online (Sandbox Code Playgroud)

现在,我可以执行以下操作:

public_key:pem_entry_decode(Certificate).
Run Code Online (Sandbox Code Playgroud)

这给了我一个包含证书上各种细节的元组,但是我在任何地方都看不到公钥的条目。如何从该证书中获取公钥?应该很简单,但是我在public_key-module中找不到任何函数。

Jey*_*hey 8

好的,这是模块中的完整功能:

-module(crypto_helper).
-include_lib("public_key/include/public_key.hrl").
-export([get_public_key_from_cert/1]).

get_public_key_from_cert(PathToCert) ->
   {ok, PemBin} = file:read_file(PathToCert),
   PemEntries = public_key:pem_decode(PemBin),
   {value, CertEntry} = lists:keysearch(‘Certificate’, 1, PemEntries)
   {_, DerCert, _} = CertEntry,
   Decoded = public_key:pkix_decode_cert(DerCert, otp),
   PublicKey = Decoded#'OTPCertificate'.tbsCertificate#'OTPTBSCertificate'.subjectPublicKeyInfo#'OTPSubjectPublicKeyInfo'.subjectPublicKey,
   PublicKey.
Run Code Online (Sandbox Code Playgroud)

现在您可以按以下方式使用它:

PublicKey = crypto_helper:get_public_key_from_cert("/usr/admin/myServer/priv/certificate.pem"),
EncryptedMsg = public_key:encrypt_public(<<"Hallo">>, PublicKey),
Run Code Online (Sandbox Code Playgroud)