Openssl X509 cert 获取人类可读的字符串

Openssl X509 cert get string human readable

我有一个 client/server 架构,我在其中使用 openssl 库来实现加密通信 (TLSv1.2)。 由于我使用的是 "self signed" 证书,为了验证服务器的身份,我的想法是在客户端放置服务器 public 密钥 (server_public_key.pem) 的物理副本,然后验证如果它等于在 TLS 的握手阶段接收到的。

在客户端,我可以通过以下方式检索后者:

X509 *cert = SSL_get_peer_certificate(ssl);

现在,我将提取此对象 中包含的 public 键的人类可读字符串。

我知道可以这样打印:

EVP_PKEY *pkey = X509_get_pubkey(cert);
PEM_write_PUBKEY(stdout, pkey);

但我需要将其保存为字符串(而不是将其发送到标准输出)。我该怎么做?

使用 BIO_new() 创建一个由内部内存缓冲区(最初为空)支持的新 BIO

然后使用PEM_write_bio_PUBKEY()将public键写入BIO,此时使用BIO手册页中记录的函数检索public键。

有关创建 BIO、写入并从中读取的简单示例,请参见引用的文档。将示例写入操作替换为 PEM_write_bio_PUBKEY() 应该就足够了。