openssl编程轻松入门(含完整示例)

摘要:
编译-生成-KEY运行”一站式脚本(方法见压缩包中的自述文件),2。示例包ssl_test.zip ssl_test.tar.gz是示例源代码包,openssl-0.9.8h-SuSE10.tar.gz是openssl二进制包(因为它超过2M,所以ssl_test.tar.gif中的示例通过了SuSE10中的测试,run_server.sh用于运行服务器。

common.gif openssl编程入门(含完整示例).pdf   

 


openssl编程轻松入门(含完整示例)

一见

1. 编写目的

第一次跑起openssl示例并不太简单,本文的目的是为了让这个过程变得非常简单。在开始之前,要非常感谢周立发同学,正是通过他共享的示例,较轻松的入了门。本文档对他共享的示例中的一个小错误进行了修正,并提供了傻瓜式的“编译-生成-KEY运行”一条龙脚本(方法请参见压缩包中的readme文件),让跑第一个openssl程序变得轻轻松松。


2. 示例包

zip.gif ssl_test.zip   

ssl_test.tar.gz为示例源代码包,openssl-0.9.8h-SuSE10.tar.gzopenssl二进制包(因超过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 上任何类型的协议,不管是 HTTPPOP3,还是 FTP。还可以用 SSL 来保护 Telnet 会话。虽然可以用 SSL 保护任何连接,但是不必对每一类连接都使用 SSL。如果连接传输敏感信息,则应使用 SSL


4. 什么是openssl

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

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


5. 示例程序

示例的说明请参见下面这篇周立发共享的文章。

common.gif 加密通讯协议SSL编程.pdf   



6. 服务端编写步骤


20682147_13387933624ge4.jpg

7. 客户端编写步骤
20682147_1338793373J208.jpg


8. 相关头文件
8.1. socket头文件

#include <sys/types.h>

#include <arpa/inet.h>

#include <netinet/in.h>

#include <sys/socket.h>

8.2. SSL头文件

#include <openssl/ssl.h>

#include <openssl/err.h>


9. 结尾

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

免责声明:文章转载自《openssl编程轻松入门(含完整示例)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RocketMQ集群平滑下线或重启某个节点GAN量化评估方法——IS(Inception Score)和FID(Frechet Inception Distance score)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Beaglebone Black教程BeagleBone Black安装最新系统映像

Beaglebone Black教程BeagleBone Black安装最新系统映像 BeagleBone Black安装最新系统映像 Beaglebone Black虽然已经预装了Debian操作系统,但是有时候你想要一个纯净的系统或者想要使用最新的系统。当然,笔者非常推荐你将系统和软件都更新到最新版。所以,下面将分别介绍更新旧系统和全新安装系统的方式。...

Android Studio手动下载配置Gradle的方法

1 问题 (1) android sutdio第一次打开一个工程巨慢怎么办? (2) 手动配置Gradle Home为什么总是无效? (3) 明明已经下载了Gradle,配置了gradle home,为什么打开工程还是去自动下载Gradle? 2 简介 (1) Android Studio怎么知道该用哪个Gradle呢? AS一个项目所用的Gradle是由...

wpa_supplicant 的编译

1. wpa_supplicant的编译需要用到的3个源码包, 分别是wpa_supplicant, openssl, libnl wpa_supplicant的下载地址:http://w1.fi/releases/ openssl的下载地址:https://www.openssl.org/so libnl的下载地址:http://www.infradea...

Android Studio 多渠道打包

什么是Gradle  Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的领域特定(DSL)语言。Android Studio中新建项目成功后自动下载Gradle。 Gradle有几个基本组件: 1.整个项目的gradle配置文件build.gradle // T...

17.U-boot的工作流程分析-6410

17.U-boot的工作流程分析-6410 6410开发板: 1.uboot的入口: 要看uboot工程的入口,首先打开顶层目录的Makefile: Uboot所支持的开发板,在顶层的Makefile中都会有一个配置选项。比如6410,在Makefile中的配置选项是make forlinx_nand_ram256_config:在vim的命令模式按...

mysql的log_output参数

log_output背景 log_output参数是什么意思?表示慢日志输出到文件还是表中。 show global variables like 'log_output'; 默认参数,log_output='FILE',表示慢日志输出到了文件中。 set global log_output='TABLE'; 此时慢日志就输出到了mysql数据库的系统表...