读书人

使用 OpenSSL API 进展安全编程

发布时间: 2013-10-11 14:52:39 作者: rapoo

使用 OpenSSL API 进行安全编程

创建基本的安全连接和非安全连接

Kenneth 是 Peru State College(位于 Peru, Nebraska)计算机科学专业的大四学生。他还是学生报The Peru State Times 的职业作者。他拥有 Southwestern Community College (位于 Creston, Iowa)计算机编程专业的理学副学士(Associate of Science)学位,在这所大学里,他是一名半工半读的 PC 技术员。他的研究领域包括 Java、C++、COBOL、 Visual Basic 和网络。

简介: 学习如何使用 OpenSSL —— 用于安全通信的最著名的开放库 —— 的 API 有些强人所难,因为其文档并不完全。您可以通过本文中的提示补充这方面的知识,并驾驭该 API。在建立基本的连接之后,就可以查看如何使用 OpenSSL 的 BIO 库来建立安全连接和非安全连接。与此同时,您还会学到一些关于错误检测的知识。

OpenSSL API 的文档有些含糊不清。因为还没有多少关于 OpenSSL 使用的教程,所以对初学者来说,在应用程序中使用它可能会有一些困难。那么怎样才能使用 OpenSSL 实现一个基本的安全连接呢?本教程将帮助您解决这个问题。

学习如何实现 OpenSSL 的困难部分在于其文档的不完全。不完全的 API 文档通常会妨碍开发人员使用该 API,而这通常意味着它注定要失败。但 OpenSSL 仍然很活跃,而且正逐渐变得强大。这是为什么?

OpenSSL 是用于安全通信的最著名的开放库。在 google 中搜索“SSL library”得到的返回结果中,列表最上方就是 OpenSSL。它诞生于 1998 年,源自 Eric Young 和 Tim Hudson 开发的 SSLeay 库。其他 SSL 工具包包括遵循 GNU General Public License 发行的 GNU TLS,以及 Mozilla Network Security Services(NSS)(请参阅本文后面的参考资料 ,以获得其他信息)。

那么,是什么使得 OpenSSL 比 GNU TLS、Mozilla NSS 或其他所有的库都优越呢?许可是一方面因素(请参阅 参考资料)。此外,GNS TLS(迄今为止)只支持 TLS v1.0 和 SSL v3.0 协议,仅此而已。

Mozilla NSS 的发行既遵循 Mozilla Public License 又遵循 GNU GPL,它允许开发人员进行选择。不过,Mozilla NSS 比 OpenSSL 大,并且需要其他外部库来对库进行编译,而 OpenSSL 是完全自包含的。与 OpenSSL 相同,大部分 NSS API 也没有文档资料。Mozilla NSS 获得了 PKCS #11 支持,该支持可以用于诸如智能卡这样的加密标志。OpenSSL 就不具备这一支持。

ERR_reason_error_string返回一个静态字符串的指针,然后可以将字符串显示在屏幕上、写入文件,或者以任何您希望的方式进行处理ERR_lib_error_string指出错误发生在哪个库中ERR_func_error_string返回导致错误的 OpenSSL 函数


清单 14. 打印出最后一个错误
ERR_print_errors_fp(FILE *);ERR_print_errors(BIO *);

开始做吧

使用 OpenSSL 创建基本的连接并不困难,但是,当试着确定该如何去做时,文档可能是一个小障碍。本文向您介绍了一些基本概念,但 OpenSSL 还有很多灵活之处有待发掘,而且您还可能需要一些高级设置,以便项目能够充分利用 SSL 的功能。

本文中有两个样例。一个样例展示了到 http://www.verisign.com/ 的非安全连接,另一个则展示了到 http://www.verisign.com/ 的安全 SSL 连接。两者都是连接到服务器并下载其主页。它们没有进行任何安全检查,而且库中的所有设置都是默认值 —— 作为本文的一部分,应该只将这些用于教学目的。

在任何支持的平台上,源代码的编译都应该是非常容易的,不过我建议您使用最新版本的 OpenSSL。在撰写本文时,OpenSSL 的最新版本是 0.9.7d。


参考资料

您可以参阅本文在 developerWorks 全球站点上的 英文原文.

下载本文中用到的 源代码。

您可以从 OpenSSL Project 下载 OpenSSL 源文件;一定要去查看一下文档 的当前状态。您还可以从 邮件列表(滚动到底部,以获得到存档文件的链接)中学到很多知识,而且应该——当然,如往常一样——花一些时间去 阅读 FAQ!

OpenSSL 源自 SSLeay (它甚至有非常 完善的文档)。

此外,请参阅由两部分构成的文章“ An Introduction to OpenSSL Programming”( Linux Journal,2001 年)(以及 第二部分),而且可以通过( informIT, 2001 年)获得的另一篇来自 Sams 的文章 “ Securing Sockets with OpenSSL”和它的 第二部分,该文章也是由两部分构成的。

在线阅读 BIO library documentation 和Network Security with OpenSSL (O'Reilly & Associates,2002 年)的样例章节。 Linux Socket Programming (Sams,2001 年)摘自 Sams 的书。

OpenSSL 的发布遵循 BSD/Apache-type 许可。如果您是自由软件(Free Software)的支持者(或者是 good documentation 的支持者),您可能还希望查看 The GNU Transport Layer Security Library (注意,如果没有异常子句,GPL 的软件不能针对 OpenSSL 进行链接)。 MozillaNetwork Security Services(NSS) 是双许可的,它既遵循 Mozilla Public License(MPL)又遵循 GNU General Public License (GNU GPL),而且有相当好的文档。要深入了解 TLS,请阅读 Wikipedia 的文章 Transport Layer Security。

可以在 RFC 2246 中找到关于 Transport Layer Security 的备忘录和技术细节,RFC 2246 定义了标准,并且它被RFC 3546 更新,后者定义了对 TLS 协议的扩展。

“ 使用 Twisted 框架进行网络编程, 第 4 部分”( developerWorks,2003 年 9 月)中 David Mertz 讨论了使用 Python twisted 框架进行 SSL 编程。

要深入学习套接字编程,请参阅 Linux Socket 编程,第一部分( developerWorks,2003 年 10 月)和 Linux Socket 编程,第二部分,这也是 David Mertz 的一个教程系列( developerWorks,2004 年 1 月)。对那些刚开始进行套接字编程的人来说,Beej's Guide to Network Programming Using Internet Sockets 也是一个不错的参考资料。

如果您是 刚刚 开始接触套接字,那么请先阅读 “ Understanding Sockets in Unix, NT, and Java”( developerWorks,1998 年 6 月),那篇文章提供了什么是套接字以及它们适用于何处的极好的入门级概述。

此外,还可以参阅来自 Communications Programming Concepts Sockets 的关于 Sockets 的 IBM 文档,以及来自 Technical Reference: Communications, Volume 2 的Programming sockets on AIX。

可以通过“ Encryption using OpenSSL's crypto libraries” (Linux Gazette,2003 年)初步了解加密,并通过 “ Introduction to Cryptography” ( PGP Corporation,2003 年 5 月 —— XPDF 格式) 或 “Introduction to cryptography” ( developerWorks,2001 年 3 月)获得对加密的总体上的深入理解。可以以 Postscript 和 PDF 格式在线获得Handbook of Appplied Cryptography(CRC Press,1996 年)(可以通过订购获得更新后的 2001 版本)。

在 developerWorks Linux 专区 可以找到更多为 Linux 开发人员准备的参考资料。

可以在 Developer Bookstore Linux 区中定购 打折出售的 Linux 书籍。

从 developerWorks 的 Speed-start your Linux app 专区下载可以运行于 Linux 之上的精选的 developerWorks Subscription 产品免费测试版本,其中包括 WebSphere Studio Site Developer、WebSphere SDK for Web services、WebSphere Application Server、DB2 Universal Database Personal Developers Edition、Tivoli Access Manager 和 Lotus Domino Server。想更快地开始上手,请参阅针对各个产品的 how-to 文章和技术支持。

关于作者

Kenneth 是 Peru State College(位于 Peru, Nebraska)计算机科学专业的大四学生。他还是学生报The Peru State Times 的职业作者。他拥有 Southwestern Community College (位于 Creston, Iowa)计算机编程专业的理学副学士(Associate of Science)学位,在这所大学里,他是一名半工半读的 PC 技术员。他的研究领域包括 Java、C++、COBOL、 Visual Basic 和网络。

读书人网 >编程

热点推荐