首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用openssl库将我的证书链和私钥包含在tls服务器中?

如何使用openssl库将我的证书链和私钥包含在tls服务器中?
EN

Stack Overflow用户
提问于 2022-04-23 22:31:58
回答 1查看 340关注 0票数 0

我试图编写一个c代码来使用openssl实现一个tls套接字。服务器有一个包含4个证书的证书链:叶证书- intermediate1证书、-intermediate2证书-根证书i,按顺序排列:

代码语言:javascript
复制
SSL_library_init()
SSL_load_error_strings()         
OpenSSL_add_ssl_algorithms()

当ctx配置为:

代码语言:javascript
复制
SSL_ctx_set_cipher_list()
SSL_ctx_use_certificate_chain("",pem)
SSL_ctx_use_certificate_file("",pem)      (1)
SSL_ctx_use_PrivateKey(".key",pem)

我得到错误“未知ca”,这是猜测,因为调用SSL_ctx_use_certificate_file放弃了SL_ctx_use_certificate_chain,因此,客户端无法验证服务器证书。当ctx配置为:

代码语言:javascript
复制
SSL_ctx_set_cipher_list()
SSL_ctx_use_certificate_chain("",pem)  (2)
SSL_ctx_use_PrivateKey(".key",pem)

我得到了一个证书-密钥错配错误。我用以下方法组成了链:

代码语言:javascript
复制
cat server.pem intermediate1.pem intermediate2.pem > chain.pem

所以我没有将根证书包含在链中,因为客户机已经拥有它了。我希望(2)能够工作,因为私钥是与位于链顶端的server.pem证书对应的密钥。

-How应该在c代码中包含链,但不能获得密钥证书。错配错误?我找到了一个函数:

代码语言:javascript
复制
SSL_CTX_add_extra_chain_cert()

但我不知道怎么用它。这个函数的第二个参数是X 509*,所以我应该如何加载并输入到这个函数中。-Is在openssl中有一个函数从内存中加载证书?请注意,我的证书都是pem格式的,这个X509使我感到困惑,因为我对证书并不十分熟悉。数据类型。我需要使用-Do

代码语言:javascript
复制
SSL_CTX_load_verify_locations()

如果我不要求客户端提供它的证书,则在服务器端运行?

编辑:

代码语言:javascript
复制
SSL *ssl;
SSL_CTX *ctx;

void configure_context(SSL_CTX *ctx)
{
   if(SSL_CTX_set_cipher_list(ctx,CIPHER_LIST) <= 0)
   {
    ERR_print_errors_fp(stderr);
   }
   
   if(SSL_CTX_use_certificate_chain_file(ctx,"/var/lib/certs/chain.pem") <= 0)
   {
    ERR_print_errors_fp(stderr);
   }

   if (SSL_CTX_use_PrivateKey_file(ctx, "/var/lib/certs/private.key", X509_FILETYPE_PEM) <= 0 ) {
        ERR_print_errors_fp(stderr);
   }
}

bool sslAcceptSocket()
{
    SSL_library_init();
    init_openssl();
    ctx = create_context();

    configure_context(ctx);
    ssl = SSL_new(ctx);

    SSL_set_fd(ssl, acceptedSocket);
    static int err = 0;
    err = SSL_accept(ssl);
    if(err < 1)
    {
    DEBUG_PRINT("SSL Error: %d\n",err);
    ERR_print_errors_fp(stderr);
    return false;
    }
    return true;
}

acceptedSocket是TCP套接字,工作正常。但是,我在tls部分中得到了键证书不匹配错误。顶替

代码语言:javascript
复制
SSL_CTX_use_certificate_chain_file(ctx,"/var/lib/certs/chain.pem")

使用

代码语言:javascript
复制
SSL_CTX_use_certificate_file(ctx,"/var/lib/certs/leaf.pem")

解决了钥匙证书。错配问题,但我得到“未知的ca”错误(如预期)。

EN

回答 1

Stack Overflow用户

发布于 2022-04-29 11:03:40

问题在于证书和密钥,所以问题的“编辑”部分中的代码实际上与正确的证书一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71984092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档