学习如何使用 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 就不具备这一支持。

先决条件

要充分理解并利用本文,您应该:

  • 精通 C 编程。
  • 熟悉 Internet 通信和支持 Internet 的应用程式的编写。

并不绝对需要您熟悉 SSL ,因为稍后将给出对 SLL 的简短说明;但是,假如您希望得到周详论述 SSL 的文章的链接,请参阅 参考资料部分。拥有密码学方面的知识固然好,但这并不是必需的。

什么是 SSL?

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

理论上,假如加密的数据在到达目标之前被截取或窃听,那些数据是不可能被破解的。但是,由于电脑的变化一年比一年快,而且密码翻译方法有了新的发展,因此,SSL 中使用的加密协议被破解的可能性也在增大。

能够将 SSL 和安全连接用于 Internet 上任何类型的协议,不管是 HTTP、POP3,还是 FTP。还能够用 SSL 来保护 Telnet 会话。虽然能够用 SSL 保护任何连接,但是不必对每一类连接都使用 SSL。假如连接传输敏感信息,则应使用 SSL。

什么是 OpenSSL?

OpenSSL 不但仅是 SSL。他能够实现消息摘要、文档的加密和解密、数字证书、数字签名和随机数字。关于 OpenSSL 库的内容很多,远不是一篇文章能够容纳的。

OpenSSL 不只是 API,他还是个命令行工具。命令行工具能够完成和 API 同样的工作,而且更进一步,能够测试 SSL 服务器和客户机。他还让研发人员对 OpenSSL 的能力有一个认识。要获得关于如何使用 OpenSSL 命令行工具的资料,请参阅 参考资料部分。

您需要什么

首先需要的是最新版本的 OpenSSL。查阅参考资料部分,以确定从哪里能够获得最新的能够自己编译的源代码,或最新版本的二进制文档(假如您不希望花费时间来编译的话)。但是,为了安全起见,我建议您下载最新的源代码并自己编译他。二进制版本通常是由第三方而不是由 OpenSSL 的研发人员来编译和发行的。

一些 Linux 的发行版本附带了 OpenSSL 的二进制版本,对于学习如何使用 OpenSSL 库来说,这足够了;但是,假如您打算去做一些实际的事情,那么一定要得到最新的版本,并保持该版本一直是最新的。

对于以 RPM 形式安装的 Linux 发行版本(Red Hat、Mandrake 等),建议您通过从发行版本制造商那里获得 RPM 程式包来更新您的 OpenSSL 发行版本。出于安全面的原因,建议您使用最新版本的发行版本。假如您的发行版本不能使用最新版本的 OpenSSL,那么建议您只覆盖库文档,不要覆盖可执行文档。OpenSSL 附带的 FAQ 文档中包含了有关这方面的细节。

还要注意的是,OpenSSL 并没有在任何的平台上都获得官方支持。虽然制造商已尽力使其能够跨平台兼容,但仍然存在 OpenSSL 不能用于您的电脑 和/或 操作系统的可能。请参阅 OpenSSL 的 Web 站点( 参考资料 中的链接),以获得关于哪些平台能够得到支持的信息。

假如想使用 OpenSSL 来生成证书请求和数字证书,那么必须创建一个配置文档。在 OpenSSL 程式包的 apps 文档夹中,有一个名为 openssl.cnf 的可用模板文档。我不会对该文档进行讨论,因为这不在本文需要范围之内。但是,该模板文档有一些很好的注释,而且假如在 Internet 上搜索,您能够找到很多讨论修改该文档的教程。

头文档和初始化

本教程所使用的头文档只有三个:ssl.h、bio.h 和 err.h。他们都位于 openssl 子目录中,而且都是研发您的项目所必需的。要初始化 OpenSSL 库,只需要三个代码行即可。清单 1 中列出了任何内容。其他的头文档 和/或 初始化函数可能是其他一些功能所必需的。


清单 1. 必需的头文档

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!