OpenSSL 使用指南 linfb@sdu.edu.cn
1. 介绍
OpenSSL 是使用非常广泛的 SSL 的开源实现。由于其中实现了为 SSL 所用的各种加密算
法,因此 OpenSSL 也是被广泛使用的加密函数库。
1.1 SSL
SSL(Secure Socket Layer)安全协议是由 Netscape 公司首先提出,最初用在保护
Navigator 浏览器和 Web 服务器之间的 HTTP 通信(即 HTTPS)。后来 SSL 协议成为传输层安
全通信事实上的标准,并被 IETF 吸收改进为 TLS(Transport Layer Security)协议。
SSL/TLS 协议位于 TCP 协议和应用层协议之间,为传输双方提供认证、加密和完整性保
护等安全服务。SSL 作为一个协议框架,通信双方可以选用合适的对称算法、公钥算法、MAC
算法等密码算法实现安全服务。
1.2 SSL 的工作原理
参见 http://developer.netscape.com/tech/security/ssl/howitworks.html 。
1.3 OpenSSL
OpenSSL 是著名的 SSL 的开源实现,是用 C 语言实现的。
OpenSSL 的前身是 SSLeay,一个由 Eric Young 开发的 SSL 的开源实现,支持 SSLv2/v3
和 TLSv1。
伴随着 SSL 协议的普及应用,OpenSSL 被广泛应用在基于 TCP/Socket 的网络程序中,
尤其是 OpenSSL 和 Apache 相结合,是很多电子商务网站服务器的典型配置。
OpenSSL 使用指南 linfb@sdu.edu.cn
2. 编译和安装 OpenSSL
OpenSSL 开放源代码,这对学习、分析 SSL 和各种密码算法提供了机会,也便于在上面
进一步开发。
2.1 获得 OpenSSL
到 OpenSSL 的网站即可下载当前版本的 OpenSSL 源代码压缩包。
当前版本 openssl-0.9.8.tar.gz,只有 3M 多,比较精简。解压缩后得到一个目录
openssl-0.9.8,共有约 1800 个文件,15M。其中 crypto 子目录中是众多密码算法实现,
ssl 子目录中是 SSL 协议的实现。
在 Linux 中解压缩:
$tar zxf openssl-0.9.8.tar.gz
在 Windows 中可以使用 winzip 或 winrar。
2.2 编译工具
编译 OpenSSL 需要 Perl 和 C 编译器。在 Windows 下如果要用加密算法的汇编代码实现,
还需要 masm 或 nasm 汇编器。(汇编代码可以比 C 代码显著提高密码运算速度)
Perl 在 Windows 下推荐使用 Active Perl。
C 编译器可以使用 gcc。在 Windows 下可以使用 Visual C++ 编译器。
汇编器推荐使用 nasm。
这些工具所在目录必须加入到 PATH 环境变量中去。
2.3 编译和安装步骤
查看./readme 是个好习惯。从 readme 了解到需要进一步查看 INSTALL 和 INSTALL.W32
文件。
在 Windows 中:
>perl Configure VC-WIN32
>ms\do_nasm (如果不使用汇编代码实现,则可>ms\do_ms)
>nmake -f ms\ntdll.mak
>cd out32dll
>..\ms\test
or
>nmake -f ms\ntdll.mak test // after 0.9.8b
编译结果得到头文件、链接库、运行库和 openssl.exe 工具。头文件位于./inc32 或
者./inculde 目录,有一个 openssl 子目录,内有几十个.h 文件。链接库即./out32dll 目
录中的 libeay32.lib 和 ssleay32.lib,分别是密码算法相关的和 ssl 协议相关的。运行
库是./out32dll 目录中的 libeay32.dll 和 ssleay32.dll,和链接库相对应。在./out32dll
中还有一个工具 openssl.exe,可以直接用来测试性能、产生 RSA 密钥、加解密文件,甚至
OpenSSL 使用指南 linfb@sdu.edu.cn
可以用来维护一个测试用的 CA。
在 Linux 中的编译和安装步骤较简单:
$./config
$make
$make test
$make install
在 Linux 下,头文件、库文件、工具都已被安装放到了合适的位置。库文件是.a 或.so
格式。
OpenSSL 使用指南 linfb@sdu.edu.cn
3. 使用 OpenSSL.exe
使用 OpenSSL.exe(Linux 中可执行文件名是 openssl)可以做很多工作,是一个很好的测
试或调试工具。
3.1 版本和编译参数
显示版本和编译参数: >openssl version -a
3.2 支持的子命令、密码算法
查看支持的子命令: >openssl ?
SSL 密码组合列表: >openssl ciphers
3.3 测试密码算法速度
测试所有算法速度: >openssl speed
测试 RSA 速度: >openssl speed rsa
测试 DES 速度: >openssl speed des
3.4 RSA 密钥操作
产生 RSA 密钥对: >openssl genrsa -out 1.key 1024
取出 RSA 公钥: >openssl rsa -in 1.key -pubout -out 1.pubkey
3.5 加密文件
加密文件: >openssl enc -e -rc4 -in 1.key -out 1.key.enc
解密文件: >openssl enc -d -rc4 -in 1.key.enc -out 1.key.dec
3.6 计算 Hash 值
计算文件的 MD5 值: >openssl md5 < 1.key
计算文件的 SHA1 值: >openssl sha1 < 1.key