ToB企服应用市场:ToB评测及商务社交产业平台

标题: 20.7 OpenSSL 套接字SSL加密传输 [打印本页]

作者: 反转基因福娃    时间: 2023-12-5 17:22
标题: 20.7 OpenSSL 套接字SSL加密传输
OpenSSL 中的 SSL 加密是通过 SSL/TLS 协议来实现的。SSL/TLS 是一种安全通信协议,可以保障通信双方之间的通信安全性和数据完整性。在 SSL/TLS 协议中,加密算法是其中最核心的组成部分之一,SSL可以使用各类加密算法进行密钥协商,一般来说会使用RSA等加密算法,使用TLS加密针对服务端来说则需要同时载入公钥与私钥文件,当传输被建立后客户端会自行下载公钥并与服务端完成握手,读者可将这个流程理解为上一章中RSA的分发密钥环节,只是SSL将这个过程简化了,当使用时无需关注传输密钥对的问题。
与RSA实现加密传输一致,使用SSL实现加密传输读者同样需要自行生成对应的密钥对,密钥对的生成可以使用如下命令实现;
执行如上两条命令,读者可得到两个文件首先生成2048位的privkey.pem也就是私钥,接着利用私钥文件生成cacert.pem证书文件,该文件的有效期为1095天也就是三年,当然此处由于是测试可以使用自定义生成,如果在实际环境中还是需要购买正规签名来使用的。

服务端实现代码与原生套接字通信保持高度一致,在连接方式上同样采用了标准API实现,唯一的不同在于当accept函数接收到用于请求时,我们需要通过SSL_new产生一个SSL对象,当需要发送数据时使用SSL_write,而当需要接收数据时则使用SSL_read函数,通过使用这两个函数即可保证中间的传输流程是安全的,其他流程与标准套接字编程保持一致,如下是服务端完整代码实现。
[code]#include #include #include #include #include #include #include #include #include #include extern "C"{#include }#pragma comment(lib, "WS2_32.lib")#pragma comment(lib,"libssl.lib")#pragma comment(lib,"libcrypto.lib")#define MAXBUF 1024int main(int argc, char** argv){  SOCKET sockfd, new_fd;  struct sockaddr_in socket_ptr, their_addr;  char buf[MAXBUF + 1] = {0};  SSL_CTX* ctx;  // SSL库初始化  SSL_library_init();  // 载入所有SSL算法  OpenSSL_add_all_algorithms();  // 载入所有SSL错误消息  SSL_load_error_strings();  // 以SSLV2和V3标准兼容方式产生一个SSL_CTX即SSLContentText  ctx = SSL_CTX_new(SSLv23_server_method());  if (ctx == NULL)  {    std::cout




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4