OpenSSL

SSL

Secure Sockets Layer 安全套接层,及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密

服务功能

  • 认证用户和服务器,确保数据发送到正确的客户机和服务器
  • 保证数据的机密性,防止数据中途被窃取
  • 维护数据的完整性,确保数据在传输过程中不被篡改

服务器类型

  • Tomcat 5.x
  • Nginx
  • IIS
  • Apache 2.x
  • IBM HTTP SERVER 6.0[1]

工作流程

服务器认证阶段

  • 客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接

  • 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息

  • 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器

  • 服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器

用户认证阶段

  • 在此之前,服务器已经通过了客户认证

  • 经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证

OpenSSL

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。他是SSL的开源实现

库文件

  • libcrypto:通用加密库
  • libssl:TLS/SSL的实现,基于回话的实现了身份认证,数据机密性和回话完整性的库文件

命令和选项

openssl 是 Linux 下一个多功能命令行工具,可以实现私有证书颁发机构

常用选项

1
2
3
4
5
-a      # 对加密后的数据进行base64编码,或解密前先对数据进行base64解码
-des3 # 加密算法,自己根据需要来指定
-salt # 加盐,加盐后相同的明文可以得到不同的密文
-in # 要读取的文件
-out # 要输出的文件

常用子命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
openssl ?           # 获得子命令
openssl version # 获得版本号
openssl speed # 测试所有算法在本机的加密速度
openssl speed des # 测试des加密在本机的性能

openssl enc -des3 -salt -a -in install.log -out install.des3
# 使用des3加密文件

openssl enc -des3 -salt -d -in a.des3 -out a.t
# 使用des3解密文件

openssl dgst -sha1 a.t
# 计算文件的校验码

md5sum a.t # 计算文件的校验码
sha1sum a.t # 计算文件的校验码

openssl passwd -1 -salt QAZXsw2
# 为用户生成密码串

openssl rand -base64 100
# 生成随机字符

openssl genrsa
# 生成一个私钥,默认为512位

openssl genrsa 2048
# 生成一个2048位的私钥
有钱任性,请我吃包辣条
0%