我有一个客户端/服务器架构,我在其中使用openssl库来实现加密通信(TLSv1.2)。 由于我使用的是“自签名”证书,为了验证服务器的身份,我的想法是在客户端放入服务器公钥(server_public_key.pem)的物理副本,然后验证它是否等于收到的在TLS的握手阶段。
在客户端上,我可以使用以下命令检索后者:
X509 *cert = SSL_get_peer_certificate(ssl);
现在,我将提取此对象中包含的公钥的人类可读字符串。
我知道我可以这样打印:
EVP_PKEY *pkey = X509_get_pubkey(cert);
PEM_write_PUBKEY(stdout, pkey);
但是我需要将它保存为字符串(而不是将其发送到stdout)。我怎么能这样做?
答案 0 :(得分:1)
使用BIO_new()创建一个由内部内存缓冲区支持的新BIO
(最初为空)。
然后使用PEM_write_bio_PUBKEY()
将公钥写入BIO,此时使用BIO
手册页中记录的功能来检索公钥。
有关创建BIO
,写入,然后从中读取的简单示例,请参阅引用的文档。用PEM_write_bio_PUBKEY()
替换样本写操作就足够了。