《openssl 编程入门(含完整示例).pdf》由会员分享,可在线阅读,更多相关《openssl 编程入门(含完整示例).pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、opensslopensslopensslopenssl 编程入门编程入门(含完整示例)(含完整示例)易剑1.1.1.1.编写目的编写目的第一次跑起 openssl 示例并不太简单,本文的目的是为了让这个过程变得非常简单。在开始之前,要非常感谢周立发周立发同学,正是通过他共享的示例,较轻松的入了门。本文档对他共享的示例中的一个小错误进行了修正,并提供了傻瓜式的“编译-生成-KEY 运行”一条龙脚本(方法请参见压缩包中的 readme 文件),让跑第一个 openssl 程序变得轻轻松松。2.2.2.2.示例包示例包ssl_test.tar.gzopenssl-0.9.8h-SuSE10.tar
2、.gzssl_test.tar.gz 为示例源代码包,openssl-0.9.8h-SuSE10.tar.gz 为 openssl 二进制包,测试时是安装在/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
3、.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-
4、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.cppreadme 为包内容说明,run_server.sh 用来运行服务端,run_client.sh 用来运行客户端,mk_server.sh 用来编译服务端,mk_client.sh 用来编译客户端,make_key.sh 用来生成钥匙 KEY。openssl 编程入门23.3.3.3.什么
5、是什么是 SSLSSLSSLSSL?在学习 openssl 编程之前,先了解一下什么是 SSL,有助于后续的学习。SSL 是一个缩写,代表的是 Secure Sockets Layer。它是支持在 Internet 上进行安全通信的标准,并且将数据密码术集成到了协议之中。数据在离开您的计算机之前就已经被加密,然后只有到达它预定的目标后才被解密。证书和密码学算法支持了这一切的运转,使用 OpenSSL,您将有机会切身体会它们。理论上,如果加密的数据在到达目标之前被截取或窃听,那些数据是不可能被破解的。不过,由于计算机的变化一年比一年快,而且密码翻译方法有了新的发展,因此,SSL 中使用的加密协议
6、被破解的可能性也在增大。可以将 SSL 和安全连接用于 Internet 上任何类型的协议,不管是 HTTP、POP3,还是 FTP。还可以用 SSL 来保护 Telnet 会话。虽然可以用 SSL 保护任何连接,但是不必对每一类连接都使用 SSL。如果连接传输敏感信息,则应使用 SSL。4.4.4.4.什么是什么是 opensslopensslopensslopenssl?openSSL 不仅仅是 SSL。它可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字。关于 OpenSSL 库的内容非常多,远不是一篇文章可以容纳的。OpenSSL 不只是 API,它还是一个命令行工具。命
7、令行工具可以完成与 API 同样的工作,而且更进一步,可以测试 SSL 服务器和客户机。5.5.5.5.示例程序示例程序示例的说明请参见下面这篇周立发周立发共享的文章。加密通讯协议SSL编程.pdfopenssl 编程入门36.6.6.6.服务端编写步骤服务端编写步骤开 始开 始S S L_library_init()SSL 库 初 始 化OpenSSL_a dd_all_algorithms载 入 所 有SSL 算 法S S L_load_error_strings()载 入 所 有 SSL 错 误 消 息S S L_C T X_n e w(SSLv2 3_server_method()产
8、生 一 个S S L_C T XS S L_C T X_use_certificate_file载入用户的数字证书S S L_C T X_use_PrivateKey_file载入用户私钥S S L_C T X_check_private_ke y检查用户私钥是否正确servfd=socket(AF_IN ET,SO CK_STREAM,0)bind(servfd)newfd=accept(servfd)S S L_n e w(c tx)产生一个新的S S LS S L_set_f d(ssl,newfd)socket 加 入 到S S LS S L_accept(ssl)建 立SSL 连 接
9、S S L_write(ssl,buf,strlen(buf)发消息给客户端S S L_read(ssl,buf,MAXBUF)接收客户端的消息S S L_shutdown(ssl)关 闭SSL 连 接S S L_free(ssl)释 放S S Lclose(newfd)结 束结 束茶 色 为 普 通茶 色 为 普 通socketsocketsocketsocket操 作操 作,其 它 为其 它 为sslsslsslssl增 加 的 操 作增 加 的 操 作openssl 编程入门47.7.7.7.客户端编写步骤客户端编写步骤开 始开 始S S L_library_init()SSL 库 初
10、始 化OpenSSL_a dd_all_algorithms载 入 所 有SSL 算 法S S L_load_error_strings()载 入 所 有 SSL 错 误 消 息S S L_C T X_n e w(SSLv2 3_server_method()产 生 一 个S S L_C T Xsockfd=socket(AF_IN ET,SO CK_STREAM,0)connect(sockfd)S S L_n e w(c tx)产生一个新的S S LS S L_set_f d(ssl,newfd)socket 加 入 到S S LS S L_connect(ssl)建 立SSL 连 接S
11、S L_read(ssl,buffer,MAXBUF)接收服务器来的消息S S L_write(ssl,buffer,strlen(buffer)发消息给服务器S S L_shutdown(ssl)关 闭SSL 连 接S S L_free(ssl)释 放S S Lclose(sockfd)S L_C T X_free(c tx)释 放S S L结 束结 束茶 色 为 普 通茶 色 为 普 通socketsocketsocketsocket操 作操 作,其 它 为其 它 为sslsslsslssl增 加 的 操 作增 加 的 操 作8.8.8.8.相关头文件相关头文件8.1.8.1.8.1.8.1.socketsocketsocketsocket 头文件头文件#include#include#include#include openssl 编程入门58.2.8.2.8.2.8.2.SSLSSLSSLSSL 头文件头文件#include#include 9.9.9.9.结尾结尾上面步骤应当画得比较清楚了,结合图再对照 ssl_test.tar.gz 和加密通讯协议 SSL编程.pdf就可以非常快地上手了。