[开源项目之一]
开源世界的第一信息安全系统—OpenSSL
在Open Source的世界,除了家喻户晓的linux及Mysql,PHP等外,恐怕要数OPenSSL最有名气了。近年,对OpenSSL进行研究和开发的人不在少数,就连很多公司也开始“吸”开源软件的血了。我也是在一个公司做安全项目时第一次遇到了SSL,于视线不由得转向了OpenSSL。以下是我对OpenSSL的一些看法和认识。
OpenSSL项目是一个合作安全项目,它的目标是开发一个健壮的、商业级的、完整的开放源代码的工具包,用强大的加密算法来实现安全的Socket层(Secure Sockets Layer,SSL v2/v3)和传输层的安全性(Transport Layer Security,TLS v1)。它包含了完整的加密算法,数字签名算法及证书算法等。可以很好地保证数据的完整,保密和正确性。
OpenSSL可以和于商业用途,但是使用者应该考虑自己所使用的算法有没有受到本国专利的限制。例如:
RSA Data Security在美国和日本拥有RSA和RC5算法的专利。必须和RSA Data Security联系以得到许可条例。其主页是:http://www.rsa.com/。
RC4是RSA Data Security的商标,使用这个标志必须得到RSA Data Security的许可。
IDEA算法在澳大利亚、法国、德国、意大利、日本、荷兰、西班牙、瑞典、瑞士、英国和美国受专利保护。如果要使用这个算法必须得到许可,其主页是:http://www.ascom.ch/。
OpenSSL是一个库,它目前的版本是0.96你可以从http://www.openssl.org 下载最近的安装程序及源代码。它为类似安全web服务器这样的应用提供加密功能。OpenSSL带有较完整的文档及参考手册(在openssl(1)手册页 里有描述.给开发人员使用的文档正在写.有几个手册页已经可以用了;libcrypto 和libssl库的概述在crypto(3)和ssl(3)的手册页里描述.OpenSSL手册页安装在/usr/local/ssl/man)。如果你在Linux下进行安全开发的话,你可能很容易就能将它安装成功。如果你在windows下用vc,c++builder进行开发,配置相对烦一些,参考资料也相对少一些。使用时请仔细阅读它提供的应用文档.INSTALL文件解释了如何安装这个库的问题.
OpenSSL包含一个可以用于执行加密功能的命令行工具.并且包含了大量的示例程序,这些示例很好地为初学者提供了帮助。在 OpenSSL 库中,相似的 API 模仿传统的套接字调用,使用 SSL 上下文对象代替文件描述符。例如,传统的写入套接字的调用具有以下特征:
size_t write(int file_descriptor, void *buf, size_t len)
OpenSSL 更改每个参数的类型,但每个参数的语义不变:
int SSL_write(SSL *socket_info, char *buf, int len)
实际上,除 SSL 对象之外,其它所有的类型与初始调用都是兼容的。理想情况下,开发者能够对程序进行较小的修改,只需添加一些代码从文件描述符初始化 SSL 上下文就可以了。
当然,OpenSSL还是存在一些问题就,比如:开发者要写许多附加代码才能使 OpenSSL 在多线程环境下工作。实际上,为将这个库集成到代码中去,大多数开发组织花费的精力都比他们预计的要多的多,而结果有可能是一片混乱。
幸运的是Stunnel出现了。它可以将加密功能无缝添加到网络连接中,而不会将您原来的代码段基址搞乱。Stunnel 是一个程序,可以使用 OpenSSL 库对任意 TCP 会话进行加密。它可以作为服务器运行在程序外部。当然,Stunnel要求已经安装了 OpenSSL。如今,Stuunel已被移植到了 Windows操作系统以及大多数 UNIX 平台。
参考资料
OpenSSL官方网站:www.openssl.org
可从 http://www.stunnel.org/ 获取 Stunnel
中国UNIX:www.chinaunix.net
Openssl专业论坛:openssl.126.com