c - 使用 OpenSSL 从内存中读取证书文件而不是文件

标签 c openssl certificate

我有一台使用 OpenSSL 监听 HTTPS 的服务器。为此,我必须提供要使用的证书。但是,当前的实现使用一个文件名来提供给 OpenSSL API。

我希望从内存中读取证书信息,这样我就不必发送证书文件打开了。我试着用谷歌搜索,但没有找到任何选项。

有可能吗?如果是这样,我如何从内存中读取证书文件而不是使用 OpenSSL 的文件?


编辑:以下内容已从评论移至问题。

// CURRENT
void start_server()
{
    const char *fileName = "cert_and_key.pem";
    set_server_ssl_file(fileName);
}
set_server_ssl_file(const char *fileName)
{
    //initialize context
    SSL_CTX_use_certificate_file(CTX, pem, SSL_FILETYPE_PEM); 
    SSL_CTX_use_PrivateKey_file(CTX, pem, SSL_FILETYPE_PEM);
}

//REQUIRED
void start_server()
{
    const char *cert = "--BEGIN CERTIFICATE--............";
    const char *key = "--BEGIN RSA PRIVATE KEY--.......";
    set_server_ssl_options(cert, key);
}
set_server_ssl_options(const char *cert, const char *key)
{
    //IMPLEMENTATION REQUIRED
}

最佳答案

以下代码为我完成了这项工作:

 
SSL_CTX *CTX;
X509 *cert = NULL;
RSA *rsa = NULL;
BIO *cbio, *kbio;
const char *cert_buffer = "";
const char *key_buffer = "";

cbio = BIO_new_mem_buf((void*)cert_buffer, -1);
cert = PEM_read_bio_X509(cbio, NULL, 0, NULL);
assert(cert != NULL);
SSL_CTX_use_certificate(CTX, cert);

kbio = BIO_new_mem_buf((void*)key_buffer, -1);
rsa = PEM_read_bio_RSAPrivateKey(kbio, NULL, 0, NULL);
assert(rsa != NULL);
SSL_CTX_use_RSAPrivateKey(CTX, rsa);

关于c - 使用 OpenSSL 从内存中读取证书文件而不是文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3810058/

相关文章:

c - 用于计数位集的内核宏

c - 使用 Make 编译 C

ruby - 如何使用公钥字符串创建 OpenSSL::PKey?

security - 了解服务器安全证书

ssl - gRPC 是否在 TLS 握手期间检查 CRL/OCSP 响应程序?

c++ - eclipse cdt - 如何在 C/C++ 编辑器窗口中设置工具提示窗口的背景颜色?

c - C 中变量和函数的区别?

perl - 如何在 Perl 进程之间共享 OpenSSL session ?

c++ - SSL_CTX_new 返回 NULL 后获取错误描述的问题

objective-c - 为 Web 浏览器到 native 应用程序切换设置 apple-app-site-association (iOS 8)