从nodejs中的证书获取公钥

ash*_*hic 2 ssl node.js

我需要从服务器的 SSL 证书获取服务器的公钥。我得到的证书如下:

https.request(options, res => {
  const cert = res.connection.getPeerCertificate();
  const publicKey = cert.????()
}
Run Code Online (Sandbox Code Playgroud)

但我找不到从证书中获取公钥的方法。有没有可以做到这一点的库?

我希望使用公钥来加密一些数据:

const encryptedBuffer =  crypto.publicEncrypt({
  key: publicKey,
  padding: crypto.constants.RSA_PKCS1_PADDING
}, utf8Payload)
Run Code Online (Sandbox Code Playgroud)

我看到证书有一个“原始”缓冲区,但使用它作为公钥失败。

Tim*_*ler 9

-----BEGIN CERTIFICATE-----
MIID3DCCAsSgAwIBAgIUOaZ5jqRgBz4HjwilIbDz5+Polh0wDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
.....
C1c3RqArBaz/c4SqHhyKaHRFinDs5kjnAz+H4+QvQAH0UXgHG050YEZjeZPXMRJB
4I0fzGC++82WXhcwSPaX+BJZuv2bEIfxbyxdVanGmIJdYsGFwSc9sIf2j1cK22A5
vdboEXXkQnqF552iNy9HGRubNQ1VkqITELToRcqcvAo=
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

如果证书的格式如上,可以用cryptomodule来完成。不依赖其他包。

-----BEGIN CERTIFICATE-----
MIID3DCCAsSgAwIBAgIUOaZ5jqRgBz4HjwilIbDz5+Polh0wDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
.....
C1c3RqArBaz/c4SqHhyKaHRFinDs5kjnAz+H4+QvQAH0UXgHG050YEZjeZPXMRJB
4I0fzGC++82WXhcwSPaX+BJZuv2bEIfxbyxdVanGmIJdYsGFwSc9sIf2j1cK22A5
vdboEXXkQnqF552iNy9HGRubNQ1VkqITELToRcqcvAo=
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

或者

crypto.createPublicKey(cert).export({type:'spki', format:'pem'})

output format:
-----BEGIN PUBLIC KEY-----
..........................
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

查看文档的更多内容