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

标签 c++ openssl x509certificate tls1.2 pem

我有一个客户端/服务器架构,我在其中使用 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/

相关文章:

c++ - 在 C++ 中使用链表处理文件

c++ - 更改/设置 DeskBand 的名称

c++ - 如何像 python 语法一样在 C++ 中使用 "cut" vector

go - 使用三重 DES 加密创建 RSA 私钥

c# - System.Net.CertificatePolicy 到 ServerCertificateValidationCallback 接受所有证书策略

java - 如何在 Java 中提取 X509 证书字段

c++ - lambda 表达式的可变参数模板

Python OpenSSL 生成公钥和私钥对

java - 将受信任的证书(加上私钥/链)从 Java keystore (jks) 传输到 Windows 证书管理器

ruby - Ubuntu 的 rvm ruby​​ 和 openssl