ZBLOG

openssl TLS 双向认证demo

下面是一个使用OpenSSL库进行TLS双向认证的简单示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/ssl.h>
#include <openssl/bio.h>

int main()
{
    SSL_CTX *ctx;
    BIO *sbio;
    SSL *ssl;

    // 初始化SSL库
    SSL_library_init();
    
    // 创建SSL上下文对象
    ctx = SSL_CTX_new(SSLv23_method());
    
    // 加载服务器端证书和私钥
    if (SSL_CTX_use_certificate_file(ctx, "server.crt", SSL_FILETYPE_PEM) != 1)
    {
        printf("Error loading server certificate.\n");
        return -1;
    }
    
    if (SSL_CTX_use_PrivateKey_file(ctx, "server.key", SSL_FILETYPE_PEM) != 1)
    {
        printf("Error loading server private key.\n");
        return -1;
    }

    // 创建BIO对象,绑定IP地址和端口号
    sbio = BIO_new_accept("127.0.0.1:4433");
    
     // 设置BIO监听状态
     if (BIO_do_accept(sbio) <= 0)
     {
         printf("Error setting up accept BIO.\n");
         return -1;
     }

     while (1)
     {
         // 接收连接请求
         if (BIO_do_accept(sbio) <= 0)
         {
             printf("Error accepting connection.\n");
             return -1;
         }

         // 获取连接信息并创建SSL对象
         ssl = SSL_new(ctx);
         SSL_set_bio(ssl, BIO_pop(sbio), BIO_pop(sbio));

         // 启动TLS握手过程
         if (SSL_accept(ssl) <= 0)
         {
             printf("Error performing SSL handshake.\n");
             SSL_free(ssl);
             continue;
         }

         // 双向认证成功,进行通信
         char buf[1024];
         int len = SSL_read(ssl, buf, sizeof(buf));
         if (len > 0)
         {
             printf("Received: %.*s\n", len, buf);
             SSL_write(ssl, "Hello from server.", strlen("Hello from server."));
         }
         
         // 关闭连接并释放资源
         SSL_shutdown(ssl);
         SSL_free(ssl);
     }

     // 清除上下文对象并释放资源
     BIO_free(sbio);
     SSL_CTX_free(ctx);

     return 0;
}

在此示例中,我们使用OpenSSL库创建了一个TLS服务器。我们加载了服务器端的证书和私钥,并将BIO绑定到IP地址和端口号。在循环中,我们等待客户端连接请求,然后使用SSL对象完成TLS握手过程。一旦双向认证成功,我们可以进行通信。请确保你已经生成了正确的证书和私钥文件,并将其替换为代码中相应的文件名。

注意:这只是一个简单示例,实际应用中可能需要更多的错误处理和安全性措施。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=4514

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?