我有一个客户端/服务器体系结构,我在其中使用openssl库实现加密通信(TLSV1.2)。由于我使用"自签名"证书,以验证服务器的标识在TLS的握手阶段。
在客户端,我可以用:
检索后者X509 *cert = SSL_get_peer_certificate(ssl);
现在,我将提取此对象中包含的公共密钥的人类可读字符串。
我知道我可以这样打印:
EVP_PKEY *pkey = X509_get_pubkey(cert);
PEM_write_PUBKEY(stdout, pkey);
,但我需要将其保留为字符串(而不是将其发送到Stdout)。我该怎么做?
使用bio_new()创建一个由内部内存缓冲区支持的新BIO
(最初为空)。
然后使用PEM_write_bio_PUBKEY()
将公共密钥写入BIO,此时使用BIO
的手册页中记录的功能来检索公共密钥。
有关创建BIO
,写入并从中读取的简单示例,请参见引用的文档。用PEM_write_bio_PUBKEY()
替换样品写操作就足够了。