前言
目前网络上比较流行的服务类协议如http,ftp,smtp,pop3等本身是不具备加密解密功能的都明文传输的,在早期网络设计的初期由于服务器的数量非常少,当然网络的安全也是不会被重视的。但随着互联网的不断发展,安全方面也成为人们比较关心的问题之一,后来网警公司先为http研发了一种可被调用的公共功能的库,这个库就被放在了TCP/IP模型的传输层与应用层之间,是一个半层的库,任何不具备加解密的程序在研发时可调用这个库也可以不用调这个库,用与不用都可以实现传输功能,这个库就叫做SSL;正如我们现在网站上付款的时候会自动转换成https,这种机制就使用了SSL协议;
加密算法和协议:
对称加密:加密和解密使用同一个密钥;
常用算法:
DES、3DES、AES
特性:
1、加密、解密使用同一个密钥;
2、将原始数据分割成为固定大小的块,逐个进行加密;
缺陷:
1、密钥过多;
2、密钥分发困难;
公钥加密:密钥是成对儿出现
公钥:公开给所有人;pubkey(公钥从私钥中提取产生)
私钥: 通过公钥加密解密工具创建,使用者自己留存,必须保证其私密性;secret key;
特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
用途:
数字签名:主要在于让接收方确认发送方的身份;
密钥交换: 发送方用对方的公钥加密一个对称密钥,并发送给对方;以实现密钥交换;
数据加密
常用算法:RSA:加密、签名
DSA:只能签名,不能加密解密
单向加密:即提取数据指纹(特征码)只能加密,不能解密;
特性:定长输出、雪崩效应;
功能:完整性验证;
算法:md5、sha1、sha2、sha3、sha4、sha5
密钥交换:自己生成一个密码,但用对方的公钥去加密;
公钥加密
DH(Deffie-Heilman)
CA的公钥是使用者通过购买并通过U盘等可靠的方式得到的;
PKI: Public Key Infrastructure(CA、CA信任关系及吊销列表)
公钥基础设施:
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509v3: 定义证书结构及认证协议标准;
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者的唯一标识
主体的唯一标识
扩展
发行者的签名
SSL会话主要三步:
客户端向服务器端索要并验证证书;
双方协商生成“会话密钥”;
双方采用“会话密钥”进行加密通信;
最后断开握手;
SSL Handshake Protocol:
第一阶段:ClientHello:
向服务器发送自己支持的协议版本,比如tls1.2;
客户端生成一个随机数,稍后用户生成“会话密钥”
支持的加密算法,比如AES、3DES、RSA;
包括支持的压缩算法;
第二阶段:ServerHello
确认使用的加密通信协议版本,比如tls1.2;
服务器端生成一个随机数,稍后用于生成“会话密钥”;
确认使用的加密方法;
发送服务器证书;
第三阶段:
验证服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)
发送以下信息给服务器端:
一个随机数(用于服务器上的公钥加密);
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
客户端握手结束通知;
第四阶段:
收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所用到的“会话密钥”;
向客户端发送如下信息:
编码变更通知;表示随后的信息都将用双方商定的加密方法和密钥发送;
服务端握手结束通知;
自建CA
由于CA价格不菲,如果是在不联网通信的情况下在局域网中使用,完全可以自己创建一个CA,下面来看一下如何自建CA;
构建私有CA:
在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可;
步骤:
1、 CA服务器上生成私钥;/etc/pki/CA/private/
CA服务器上生成自签证书:
生成证书后一定要创建三个目录与两个文件:
certs crl newcerts index.txt serial
并向serial文件中写入1,在证书授权时会以此为起始号码;
2、 要用到证书进行安全通信的服务器,需要向CA请求签署证书;
以httpd为例:(没有则安装)
首先在/etc/httpd/建立一个目录ssl,然后去用到证书的主机生成证书签署请求;
生成证书签署请求;
注意:前三段输入的信息一定要与CA自签证书的前三段信息一定要一致,不然会签不了的(亲试);到这步就可以把自己生成的http.csr以安全的方式发给CA,然后再到CA上面去签完,再发回来就大功告成了;
在CA主机上签署证书;
到此证书签署成功;可以发回要签署证书的主机做测试了;
原文地址:http://519137.blog.51cto.com/509137/1733508