2024年3月9日发(作者:)
openssl
编程入门(含完整示例)
易剑
1.
编写目的
第一次跑起openssl示例并不太简单,本文的目的是为了让这个过程变得非常简单。在
开始之前,要非常感谢周立发同学,正是通过他共享的示例,较轻松的入了门。本文档对他
共享的示例中的一个小错误进行了修正,并提供了傻瓜式的“编译-生成-KEY运行”一条龙
脚本(方法请参见压缩包中的readme文件),让跑第一个openssl程序变得轻轻松松。
2.
示例包
ssl_ssl-0.9.8h-Su
ssl_为示例源代码包,为openssl二进制包,
测试时是安装在/usr/local/ssl。
ssl_中的示例在SuSE10中测试通过,使用的是openssl-0.9.8h,它包括如
下文件:
-rw-r--r--1rootroot1346Dec518:
-rwxr-xr-x1rootroot114Dec518:11make_
-rwxr-xr-x1rootroot172Dec518:37mk_
-rwxr-xr-x1rootroot172Dec518:37mk_
-rw-r--r--1rootroot1679Dec518:
-rw-r--r--1rootroot167Dec518:39readme
-rwxr-xr-x1rootroot38Dec518:38run_
-rwxr-xr-x1rootroot64Dec518:38run_
-rwxr-xr-x1rootroot1140142Dec518:38ssl_client
-rw-r--r--1rootroot3928Dec517:31ssl_
-rwxr-xr-x1rootroot1139667Dec518:38ssl_server
-rw-r--r--1rootroot4882Dec517:31ssl_
readme为包内容说明,run_用来运行服务端,run_用来运行客户端,
mk_用来编译服务端,mk_用来编译客户端,make_用来生成钥
匙KEY。
openssl编程入门
3.什么是SSL?
在学习openssl编程之前,先了解一下什么是SSL,有助于后续的学习。SSL是一个
缩写,代表的是SecureSocketsLayer。它是支持在Internet上进行安全通信的标准,并
且将数据密码术集成到了协议之中。数据在离开您的计算机之前就已经被加密,然后只有到
达它预定的目标后才被解密。证书和密码学算法支持了这一切的运转,使用OpenSSL,您
将有机会切身体会它们。
理论上,如果加密的数据在到达目标之前被截取或窃听,那些数据是不可能被破解的。
不过,由于计算机的变化一年比一年快,而且密码翻译方法有了新的发展,因此,SSL中
使用的加密协议被破解的可能性也在增大。可以将SSL和安全连接用于Internet上任何
类型的协议,不管是HTTP、POP3,还是FTP。还可以用SSL来保护Telnet会话。虽
然可以用SSL保护任何连接,但是不必对每一类连接都使用SSL。如果连接传输敏感信
息,则应使用SSL。
4.什么是openssl?
openSSL不仅仅是SSL。它可以实现消息摘要、文件的加密和解密、数字证书、数字
签名和随机数字。关于OpenSSL库的内容非常多,远不是一篇文章可以容纳的。
OpenSSL不只是API,它还是一个命令行工具。命令行工具可以完成与API同样的工作,
而且更进一步,可以测试SSL服务器和客户机。
5.示例程序
示例的说明请参见下面这篇周立发共享的文章。
加密通讯协议SSL
编程.pdf
2
openssl编程入门
6.服务端编写步骤
开始
SSL_library_init()SSL_set_fd(ssl, newfd)
SSL 库初始化socket 加入到SSL
OpenSSL_add_all_algorithmsSSL_new(ctx)
载入所有SSL 算法产生一个新的SSL
SSL_load_error_strings()
载入所有 SSL 错误消息
newfd = accept(servfd)
SSL_CTX_new(SSLv23_server
_method())
bind(servfd)
产生一个SSL_CTX
SSL_CTX_use_certificate_file
servfd = socket((AF_INET,
载入用户的数字证书SOCK_STREAM, 0))
SSL_CTX_use_PrivateKey_file
SSL_CTX_check_private_k
载入用户私钥
ey
检查用户私钥是否正确
茶色为普通socket操作,其它为ssl增加的操作
SSL_accept(ssl)
建立SSL 连接
SSL_write(ssl, buf,
strlen(buf))
发消息给客户端
SSL_read(ssl, buf,
MAXBUF)
接收客户端的消息
SSL_shutdown(ssl)
关闭SSL 连接
SSL_free(ssl)
释放SSL
close(newfd)
结束
3
openssl编程入门
7.客户端编写步骤
开始
SSL_library_init()
SSL_read(ssl, buffer,
SSL 库初始化
MAXBUF)
接收服务器来的消息
OpenSSL_add_all_algorithmsSSL_connect(ssl)
载入所有SSL 算法建立SSL 连接
SSL_load_error_strings()SSL_set_fd(ssl, newfd)
载入所有 SSL 错误消息socket 加入到SSL
SSL_CTX_new(SSLv23_server
_method())
SSL_new(ctx)
产生一个SSL_CTX
产生一个新的SSL
sockfd = socket((AF_INET,
SOCK_STREAM, 0))
connect(sockfd)
茶色为普通socket操作,其它为ssl增加的操作
8.
相关头文件
头文件
#include
#include
#include
#include
SSL_write(ssl, buffer,
strlen(buffer))
发消息给服务器
SSL_shutdown(ssl)
关闭SSL 连接
SSL_free(ssl)
释放SSL
close(sockfd)
SL_CTX_free(ctx)
释放SSL
结束
4
openssl编程入门
头文件
#include
#include
9.结尾
上面步骤应当画得比较清楚了,结合图再对照ssl_和《加密通讯协议SSL
编程.pdf》就可以非常快地上手了。
5


发布评论