openssl编程easy demo

目录

目录 1

1. 编写目的 1

2. 示例包 1

3. 什么是SSL? 2

4. 什么是openssl? 2

5. 示例程序 2

6. 服务端编写步骤 3

7. 客户端编写步骤 4

8. 相关头文件 4

8.1. socket头文件 4

8.2. SSL头文件 4

9. 结尾 5

 

1. 编写目的

第一次跑起openssl示例并不太简单,本文的目的是为了让这个过程变得非常简单。在开始之前,要非常感谢周立发同学,正是通过他共享的示例,较轻松的入了门。

本文档对他共享的示例中的一个小错误进行了修正,并提供了傻瓜式的“编译-生成-KEY运行”一条龙脚本(方法请参见压缩包中的readme文件),让跑第一个openssl程序变得轻轻松松。

2. 示例包

ssl_test.tar.gz为示例源代码包,openssl-0.9.8h-SuSE10.tar.gz为openssl二进制包(因超过2M,不能作为附件下载,请上官网下载),测试时是安装在/usr/local/ssl。

ssl_test.tar.gz中的示例在SuSE10中测试通过,使用的是openssl-0.9.8h,它包括如下文件:

-rw-r--r-- 1 root root 1346 Dec 5 18:11 cacert.pem

-rwxr-xr-x 1 root root 114 Dec 5 18:11 make_key.sh

-rwxr-xr-x 1 root root 172 Dec 5 18:37 mk_client.sh

-rwxr-xr-x 1 root root 172 Dec 5 18:37 mk_server.sh

-rw-r--r-- 1 root root 1679 Dec 5 18:11 privkey.pem

-rw-r--r-- 1 root root 167 Dec 5 18:39 readme

-rwxr-xr-x 1 root root 38 Dec 5 18:38 run_client.sh

-rwxr-xr-x 1 root root 64 Dec 5 18:38 run_server.sh

-rwxr-xr-x 1 root root 1140142 Dec 5 18:38 ssl_client

-rw-r--r-- 1 root root 3928 Dec 5 17:31 ssl_client.cpp

-rwxr-xr-x 1 root root 1139667 Dec 5 18:38 ssl_server

-rw-r--r-- 1 root root 4882 Dec 5 17:31 ssl_server.cpp

readme为包内容说明,run_server.sh用来运行服务端,run_client.sh用来运行客户端,mk_server.sh用来编译服务端,mk_client.sh用来编译客户端,make_key.sh用来生成钥匙KEY。

3. 什么是SSL?

在学习openssl编程之前,先了解一下什么是SSL,有助于后续的学习。SSL 是一个缩写,代表的是 Secure Sockets Layer。它是支持在 Internet 上进行安全通信的标准,并且将数据密码术集成到了协议之中。数据在离开您的计算机之前就已经被加密,然后只有到达它预定的目标后才被解密。证书和密码学算法支持了这一切的运转,使用 OpenSSL,您将有机会切身体会它们。

理论上,如果加密的数据在到达目标之前被截取或窃听,那些数据是不可能被破解的。不过,由于计算机的变化一年比一年快,而且密码翻译方法有了新的发展,因此,SSL 中使用的加密协议被破解的可能性也在增大。可以将 SSL 和安全连接用于 Internet 上任何类型的协议,不管是 HTTP、POP3,还是 FTP。还可以用 SSL 来保护 Telnet 会话。虽然可以用 SSL 保护任何连接,但是不必对每一类连接都使用 SSL。如果连接传输敏感信息,则应使用 SSL。

4. 什么是openssl?

OpenSSL 不仅仅是 SSL。它可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字。关于 OpenSSL 库的内容非常多,远不是一篇文章可以容纳的。

OpenSSL 不只是 API,它还是一个命令行工具。命令行工具可以完成与 API 同样的工作,而且更进一步,可以测试 SSL 服务器和客户机。

6. 服务端编写步骤

7. 客户端编写步骤 

8. 相关头文件

8.1. socket头文件

#include 

#include 

#include 

#include 

8.2. SSL头文件

#include 

#include 

9. 结尾

上面步骤应当画得比较清楚了,结合图再对照ssl_test.tar.gz和《加密通讯协议SSL编程.pdf》就可以非常快地上手了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenSSL是一个开放源代码的加密工具包,支持多种密码算法和协议。它可以用于开发安全的通信应用程序,包括UDP编程。 下面是一个简单的OpenSSL UDP编程的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <openssl/ssl.h> #include <openssl/err.h> #define SERVER_IP "127.0.0.1" #define SERVER_PORT 12345 #define BUFFER_SIZE 1024 int main() { int sockfd; struct sockaddr_in server_addr; socklen_t addr_len; SSL_CTX *ssl_ctx; SSL *ssl; char buffer[BUFFER_SIZE]; // 初始化OpenSSL库 SSL_library_init(); SSL_load_error_strings(); ssl_ctx = SSL_CTX_new(SSLv23_client_method()); // 创建socket if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); } // 设置服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); if (inet_pton(AF_INET, SERVER_IP, &(server_addr.sin_addr)) <= 0) { perror("inet_pton failed"); exit(EXIT_FAILURE); } // 创建SSL连接 if (!(ssl = SSL_new(ssl_ctx))) { perror("ssl creation failed"); exit(EXIT_FAILURE); } // 将SSL连接绑定到socket if (SSL_set_fd(ssl, sockfd) == 0) { perror("ssl set fd failed"); exit(EXIT_FAILURE); } // 连接服务器 if (connect(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) { perror("connect failed"); exit(EXIT_FAILURE); } // SSL握手 if (SSL_connect(ssl) != 1) { perror("ssl connect failed"); exit(EXIT_FAILURE); } printf("Connected to server. Enter 'quit' to exit.\n"); while (1) { // 从用户输入中读取数据 fgets(buffer, BUFFER_SIZE, stdin); buffer[strlen(buffer) - 1] = '\0'; // 发送数据到服务器 SSL_write(ssl, buffer, strlen(buffer)); // 从服务器接收数据 int len = SSL_read(ssl, buffer, BUFFER_SIZE - 1); buffer[len] = '\0'; printf("Received: %s\n", buffer); // 退出循环 if (strcmp(buffer, "quit") == 0) { break; } } // 关闭SSL连接和socket SSL_shutdown(ssl); SSL_free(ssl); SSL_CTX_free(ssl_ctx); close(sockfd); return 0; } ``` 以上代码创建了一个UDP客户端,连接到指定的服务器,并进行了SSL握手。用户可以通过命令行输入数据并发送到服务器,然后接收服务器返回的数据。当用户输入"quit"时,程序会退出。 注意,编译以上代码需要链接OpenSSL库,可以使用以下命令进行编译: ```shell gcc -o openssl_udp_demo openssl_udp_demo.c -lssl -lcrypto ``` 以上就是一个简单的OpenSSL UDP编程的示例。通过使用OpenSSL库,我们可以使用UDP协议进行安全的通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值