SSL/TLS与密码通信工具

1.先说一下密码通信的工具:对称加密,非对称加密,单向散列函数,消息认证码,数字签名.

这里使用openssl进行举例:(使用openssl -help参看介绍)
主要有三部分:
a)标准命令:
这里写图片描述

  • ca:CA管理
  • ciphers:列出加密套件
  • crl:证书吊销列表管理
  • dgst:生成消息摘要
  • enc:对称加密解密
  • genrsa:生成RSA私钥
  • rand:生成伪随机数
  • rsa:RSA密码处理工具
  • req:生成证书请求
  • speed:测试速度
  • x509:x509证书管理(签署与自签署)

b)消息摘要命令:
这里写图片描述
c)密码命令:
这里写图片描述
可以参考教程:http://www.cnblogs.com/f-ck-need-u/p/7048359.html#blogopenssl
1)对称加密:使用相同的密钥进行加密解密
openssl enc -des -e -a -in a.txt -out b.txt //加密a.txt,将加密后的输出到b.txt
openssl enc -des -d -a -in b.txt -out b2.txt//解密b.txt,将解密后的输出到b2.txt
openssl enc -des -e -a -pass pass:123456 -in a.txt //加密a.txt,显示输入密码,输出到stdout

  • -des:使用DES算法
  • -e:加密
  • -d:解密
  • -a:(等价与-base64)在加密后和解密前进行base64编码或解密
  • -in filename:输入文件
  • -out filename:输出文件

2)非对称加密:使用公钥加密,私钥解密
openssl genrsa -out key.private 1024 //生成私钥到key.private文件中
1024指定密钥长度,默认1024
openssl rsa -in key.private -pubout -out key.public //从key.private中提取公钥,输出到key.public
openssl rsautl -encrypt -in a.txt -out a_encrypt.txt -inkey a_key.pubilc -pubin//使用公钥加密文件

  • -encrypy:加密
  • -in filename:输入文件
  • -out filename:输出文件
  • -inkey filename:密钥输入文件
  • -pubin: -inkey filename 中的filename是公钥

openssl rsautl -decrypt -in a_encrypt.txt -out a_decrypt.txt -inkey a_key.private//使用私钥解密文件

  • -decrypt:解密

3)单向散列函数:获取消息的指纹,判断消息是否被篡改
openssl dgst -md5 -out a_md5.txt a.txt //使用MD5计算a.txt消息摘要,输入到a_md5.txt中
4)消息认证码:与生成消息摘要类似,只是消息认证码要使用密码(发送与接受方共享一个密钥)计算散列值
openssl dgst -hmac 123456 -out a_mac.txt a.txt //生成a.txt的消息认证码

  • -hmac key:使用key创建mac

5)数字签名:使用私钥对消息进行加密,使用公钥对消息进行解密,可以防止否认,消息认证码无法防止否认
openssl genrsa -out a_key.private //生成私钥

  • -out filename:输出文件

openssl dgst -md5 -out a.sign -sign a_key.private a.txt//使用私钥对消息进行签字

  • -md5:使用MD5算法
  • -sign filename:使用该filename中的私钥对文件进行数字签名

openssl rsa -in a_key.private -pubout -out a_key.pubilc//从私钥中获取公钥

  • -in filename:输入文件
  • -pubout:指定输出文件是公钥
  • -out filename:输出文件

openssl dgst -md5 -verify a_key.pubilc -signature a.sign a.txt//用公钥验证数字签名

  • -verify filanema:使用filename中的公钥验证数字签名
  • -signature filename:待验证的签名文件

2.SSL/TLS(SSL[Secure Sockets Layer 安全套接层],TLS[Transport Layer Security传输层安全协议]):SSL与TLS基本可以等价,TLS相当于SSL的升级版,这里将SSL与TLS当作一个整体,SSL/TLS相当于一个密码通信的框架.
TLS协议包括TLS记录协议(主要负责使用对称密码对消息进行加密通信)TLS握手协议(负责客户端与服务端之间协商决定密码算法和共享密钥),主要结构如图:
这里写图片描述

握手协议的过程:
1)ClientHello(client->server):客户端向服务端发送协议版本,可用密码套件,客户端随机数等
2)ServerHello(client<-server):服务端向客户端返回协议版本,使用的密码套件,服务端随机数等
3)Certificate(client<-server):服务端向客户端发送证书清单(非匿名通信时)
4)ServerKeyExchange(client<-server):如果证书信息不够,发送必要信息(例如:Diffie-Hellman的公开值)
5)CertificateRequest(client<-server):服务器向客户端请求证书验证,如果是单向认证就没有这一步
6)ServerHelloDone(client<-server):问候结束
7)Certificate(client->server):客户端向服务端发送证书,单向认证没有该步骤
8)ClientKeyExchange(client->server):加密发送预备主密码(RSA:使用公钥加密发送;DH:发送公开值,两端分别计算)
9)CertificateVerify(client->server):发送数字签名证明客户端有私钥
10)ChangeCipherSpec(client->server):密码变更(密码变更协议)
11)Finished(client->server):结束
12)ChangeCipherSpec(client<-server):密码变更
13)Finished(client<-server):结束

展开阅读全文

没有更多推荐了,返回首页