我有一个客户端/服务器架构,我在其中使用 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);
但我需要将它保存为一个字符串(而不是将它发送到标准输出)。我该怎么做?
最佳答案
使用BIO_new()创建一个由内部内存缓冲区(最初为空)支持的新 BIO
。
然后使用PEM_write_bio_PUBKEY()
将公钥写入BIO,此时使用BIO
手册页中记录的函数来检索公钥.
有关创建 BIO
、写入并从中读取的简单示例,请参阅引用的文档。用 PEM_write_bio_PUBKEY()
替换示例写入操作应该就足够了。
关于c++ - Openssl X509 cert 获取人类可读的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46216722/