SSL/TLS 加密怎么写
时间: 2024-01-09 10:03:36 浏览: 105
https-slides:关于SSLTLS的演示
SSL/TLS 是一种加密协议,可以保护网络通信的安全性。编写 SSL/TLS 加密代码需要使用加密库,例如 OpenSSL。
以下是一个简单的示例,展示了如何使用 OpenSSL 库来进行 SSL/TLS 加密:
```c
#include <openssl/ssl.h>
#include <openssl/err.h>
int main()
{
// 初始化 OpenSSL 库
SSL_library_init();
SSL_load_error_strings();
// 创建 SSL 上下文
SSL_CTX* ctx = SSL_CTX_new(SSLv23_client_method());
// 加载证书
SSL_CTX_use_certificate_file(ctx, "client.crt", SSL_FILETYPE_PEM);
// 加载私钥
SSL_CTX_use_PrivateKey_file(ctx, "client.key", SSL_FILETYPE_PEM);
// 创建 SSL 对象
SSL* ssl = SSL_new(ctx);
// 将 SSL 对象与套接字关联
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(443);
inet_pton(AF_INET, "www.example.com", &(addr.sin_addr));
connect(sockfd, (struct sockaddr*)&addr, sizeof(addr));
SSL_set_fd(ssl, sockfd);
// SSL 握手
SSL_connect(ssl);
// 发送数据
char* data = "hello, world";
SSL_write(ssl, data, strlen(data));
// 接收数据
char buf[1024];
int len = SSL_read(ssl, buf, sizeof(buf));
buf[len] = '\0';
printf("Received: %s\n", buf);
// 关闭 SSL 对象和套接字
SSL_shutdown(ssl);
SSL_free(ssl);
close(sockfd);
// 清理 SSL 上下文
SSL_CTX_free(ctx);
return 0;
}
```
以上代码使用 OpenSSL 库创建了一个 SSL 上下文,加载了客户端证书和私钥,创建了 SSL 对象,并将其与套接字关联。然后,它执行 SSL 握手,发送和接收数据,并最终关闭 SSL 对象和套接字。
阅读全文