目录
网络的出现使得系统之间的交互更为便捷。随着其应用范围的不断扩展,网络已经不局限于内部、局部区域使用,这也随即引入新的安全问题: 在不可信的信道上,两个先前并不熟悉的主体如何进行可信通信? 这也是网络安全最基本的问题之一,进一步细化表述为两个问题,即:
- 两个先前并不熟悉的主体如何确认对方的身份?
- 两个主体之间如何开展保密通信?
一、SSL
为解决HTTP安全通信问题,网景公司(netscape)率先提出了SSL协议。经过若干年的发展,SSL协议也不断升级改善,目前统称为SSL/TLS协议。
1. SSL的运作过程
- 基本过程
密码学是安全通信的基础,SSL则是密码学技术应用的典型实例。它结合使用了对称加密算法和非对称加密算法,充分发挥了每种加密算法的特点。其核心工作是利用非对称加密算法(公钥算法)认证身份、协商通信(会话)密钥,利用对称加密算法完成通信主体信息的加密。其基本过程是这样的:
1. 客户端向服务器端索要并验证公钥; 2. 双方协商生成"会话密钥"; 3. 双方采用"会话密钥"进行加密通信。 其中,步骤(1)、(2)统称为“握手阶段”。
- 具体过程
SSL的具体握手过程如下所示:
SSL协议握手过程值得注意的几点是:
- SSL的“握手过程” 最重要的任务是通信双方通过握手产生真正用于传输加密的“会话密钥”。SSL协议生成“会话密钥”一共需要三个随机数。前两个随机数都是通过明文传递,第三个随机数利用服务器公钥加密后才进行传输。故而,整个“会话”的安全,取决于第三个随机数(pre-master secret)能否被破解。
- 因为SSL协议涉及多个版本,每个版本又可以支持多种加密算法,客户端(如浏览器)对一些加解密算法的支持程度不一样。为顺利实现可信通信,两个通信主体之间必须首先沟通协商通讯中使用哪个协议(协议版本),协议中使用哪种加密方法等信息,这些任务在“握手阶段”的初期完成。
二、OpenSSL
SSL本身是一个协议,协议定义了一组标准接口和规范,具体应用上还依赖对协议的具体实现。Openssl 就是众多实现中最著名的一个。
OpenSSL最初名为SSLeay,由 Eric A.Young 和 Tim J.Hudson 个人开发,随着二位仁兄加盟密码学老店 RSA,OpenSSL转为由社区志愿者维护。由于与生俱来的开源特性及其在Unix平台的良好表现,目前,OpenSSL已广泛应用于各种服务器和客户端工具中。
OpenSSL,顾名思义,是一套开源的SSL实现,除此之外,它提供了一个工具集,支持一个通用的密码学算法库,支持各种强度的密码学操作。对用户而言,OpenSSL提供了:
- 一套命令行工具集;
利用OpenSSL命令,可进行各种 key 和 certificate 管理,各种密码学加密/解密等操作。
-
一个支持 SSL 和各种密码学算法的开源开发库;
可在OpenSSL开源代码的基础上,进一步根据实际需求进行定制化开发。
1、OpenSSL命令行工具集
1)OpenSSL命令使用方式
OpenSSL命令的使用有两种使用方式。一种在操作系统 shell 下使用,一种在 OpenSSL 的 shell 下使用。
- 在操作系统 shell 下使用
OpenSSL 可视为由主命令、辅命令、操作参数及操作对象组成。主命令为通用命令,即 openssl;辅命令为特定命令,与具体的操作相关的命令;其通用形式如图:
- 在 OpenSSL 的 shell 下使用
首先要在操作系统 shell 环境下直接执行 openssl 指令进入 openssl 特定 shell 环境,然后在该环境下执行 openssl 特定命令即可。
特别值得注意的是,整个 OpenSSL 命令体系的 input/output 都是以文件为基本操作单元的,*OpenSSL 是不能在命令中直接操作字符串的(如加密、解密操作)。
2、OpenSSL的常用命令
1)基本信息查看
- version
版本查看命令。
利用该命令(尤其加上参数 -a)可以直接查看 OpenSSL 的版本相关信息,版本相关信息内容众多,其中 OPENSSLDIR 较为重要,其标识了 OpenSSL 配置信息和证书的存储路径。而这通常是在使用 OpenSSL 时需要首先明确的信息。
2)加解密算法相关指令
-
genpkey
密钥生成的通用指令。
-
genrsa
生成 RSA 私钥的专有指令。
-
rsa
处理 RSA 密钥(包括私钥和公钥)的专有指令。这个指令可对 RSA 相关密钥进行全方位的处理,如密钥存储格式转换(DER与PEM)、对密钥设置保护密码(即 passphrase)、查看密钥(公/私钥)等。
-
enc
专门处理对称加密算法的指令。可利用该指令进行 des、rc2 加解密,base64 编解码等操作。
-
dgst
专门处理摘要算法的指令。
3)证书管理相关指令
-
req
证书请求相关指令。
一个服务器想要提供对 SSL 的支持,一定要有签名证书。机构想要获得某个 CA 签名的证书,一般包括三个主要步骤:
- x509
证书处理相关指令。一个功能很丰富的证书处理工具。可以用来显示证书的内容,转换其格式,给CSR签名等等。
-
verify
证书验证工具。获得一个新的证书,对其验证工作必不可少,该工具可进行证书真伪进行检验。
计算获取证书的摘要,用 issuer 的公钥解密证书的摘要签名,并与本地计算的证书摘要进行比对。由于证书签署的层次化结构,证书检验过程也可视为层次化检验。
有用参考: