openssl websockets

1. HTTPS通信的C++实现 - 知乎

GitHub - Bwar/Nebula: Nebula is a powerful framwork for building highly concurrent, distributed, and resilient message-driven applications for C++.

SSL_do_handshake()SSL_connect()SSL_accept()SSL_write()时的情况, SSL_read() 或 SSL_shutdown() 返回 0,调用 SSL_get_error() 后返回 SSL_ERROR_SYSCALL 和一个实际的 errno 为 0 表示对端已关闭 TCP 连接,例如通过在没有正确关闭 SSL 的情况下调用 close()。 这是一种完全正常和常见的情况,但就 TLS/SSL 而言,这不是正常的断开连接。因此,违反 SSL 协议(protocol)的是 EOF。

1初始化 OpenSSL 库:调用 SSL_library_init() 和 SSL_load_error_strings() 来初始化 SSL 库和错误信息。

2创建 SSL 上下文:使用 SSL_CTX_new() 函数创建 SSL 上下文对象,该对象将保存 SSL 相关的配置信息,如加密算法、证书等。

3加载证书和私钥:使用 SSL_CTX_use_certificate_file() 和 SSL_CTX_use_PrivateKey_file() 函数加载服务器的证书和私钥。证书用于验证服务器身份,私钥用于进行加密和解密操作。

4创建监听套接字:创建一个监听套接字,并绑定到服务器的 IP 地址和端口上。

5等待客户端连接:使用 accept() 函数等待客户端的连接请求,并返回一个新的套接字用于与客户端通信。

6创建 SSL 对象:使用 SSL_new() 函数创建一个 SSL 对象,并将其与刚刚建立的套接字关联起来。

7设置 SSL 握手:使用 SSL_set_accept_state() 将 SSL 对象设置为接受状态,表示准备进行 SSL 握手过程。

8执行 SSL 握手:通过 SSL_accept() 函数执行 SSL 握手过程,该过程涉及到协商加密算法、验证证书等步骤。

9处理加密通信:一旦握手成功,可以使用 SSL_read() 和 SSL_write() 函数进行加密的读写操作,实现安全的数据传输。

10关闭 SSL 连接:使用 SSL_shutdown() 函数关闭 SSL 连接,确保安全地关闭连接。

11清理资源:释放 SSL 对象和 SSL 上下文,并关闭套接字。
1.初始化 MbedTLS 库:调用 mbedtls_ssl_init() 来初始化 MbedTLS 库,并设置随机数生成器。

2.创建 SSL 上下文:使用 mbedtls_ssl_config_init() 和 mbedtls_ssl_config_defaults() 函数来创建和配置 SSL 上下文对象,包括选择加密算法、证书验证方式等。

3.加载证书和私钥:使用 mbedtls_x509_crt_parse_file() 和 mbedtls_pk_parse_keyfile() 函数加载服务器的证书和私钥。

4.创建监听套接字:创建一个监听套接字,并绑定到服务器的 IP 地址和端口上。

5.等待客户端连接:使用 accept() 函数等待客户端的连接请求,并返回一个新的套接字用于与客户端通信。

6.创建 SSL 对象:使用 mbedtls_ssl_init() 函数创建一个 SSL 对象,并将其与刚刚建立的套接字关联起来。

7.设置 SSL 握手:使用 mbedtls_ssl_setup() 将 SSL 对象与 SSL 上下文关联起来,并设置握手状态为服务器模式。

8.执行 SSL 握手:通过 mbedtls_ssl_handshake() 函数执行 SSL 握手过程,该过程涉及到协商加密算法、验证证书等步骤。

9.处理加密通信:一旦握手成功,可以使用 mbedtls_ssl_read() 和 mbedtls_ssl_write() 函数进行加密的读写操作,实现安全的数据传输。

10关闭 SSL 连接:使用 mbedtls_ssl_close_notify() 函数关闭 SSL 连接,确保安全地关闭连接。

11 清理资源:释放 SSL 对象和 SSL 上下文,并关闭套接字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值