SSL/TLS协议及Openssl工具的实现

2016-03-07  本文已影响3209人  魏镇坪

前言

早期互联网数据传输是基于TCP/IP模型完成数据交换,其各层对传输的数据包进行各协议的封装,从数据的发送方到接收方进行的数据交换都是基于明文传输。在传输的过程中数据的可以被中间人进行拦截或抓取,威胁了数据的保密性(窃听、通信量分析)、数据的完整性(更改、伪装、重放、否认)、数据的可用性攻击(拒绝服务DOS及DDOS)。为了了达到安全,出现了技术的解决方案:加密和解密来抵御攻击。

加密和解密算法和协议

1、对称加密:

2、非对称加密(公钥加密)

数字签名及密钥交换过程说明:

身份验证机制的实现:发送方使用自己的私钥加密数据后,接收方拿对方发布的公钥解密其数据,这个过程被称之为身份验证

密钥交换机制的实现: 发送方使用对方的公钥加密其密码,接收方使用自己的私钥解密后可以得到其密码,这个过程被称之为密钥交换

3、单向加密

密钥交换机制(IKE ,Internet Key Exchange)

为什么会有CA机构的出现

由于基于公钥和私钥机制进行密钥交换时,会有中间人攻击的情况发生。故我们需要有一个第三方机构帮忙认证证书的真实性,不会被第三方利用。这个情况下,出现了签证机构,即CA。

CA颁发证书的机制

PKI(Public infrastructure,公钥基础设施)

加密通信的实现协议

由网景公司研发,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可选的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上, 用于在实际的数据传输之前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
* ######协议版本
* V1.0
* V1.2
* V3.0

TLS是开源SSL的实现,由IETF公司于1999年发布,其支持多种算法。TLS彩分层设计:
* 最底层:基础算法原语的实现,AES,RSA,MD5
* 向上一层: 各种算法的实现
* 再向上一层: 组合算法实现的半成品
* 再向上:用于各种组件拼装而成的各种成品密码学协议软件

    * 协议版本:
        * V1.0 
        * V1.1
        * V1.2(目前主流版本)
        * V1.3

Handshake握手过程(无需验证客户端证书)

动作 发送方
Client hello Client
(2)Server Hello Server
(3)Certificate Server
(4)Server hello done Server
(5)Client Key Exchange Client
(6)Change cipher spec Client
(7)Finished Client
(8)Change cipher spec Server
(9)Finished Server

Handshake握手过程(验证客户端的证书过程)

动作 发送方
Client hello Client
(2)Server Hello Server
(3)Certificate Server
(4)Certificate Request Server
(5)Server hello done Server
(6)Certificate Client
(7)Client Key Exchange Client
(8)Certificate Verify Client
(9)Change cipher spec Client
(10)Finished Client
(11)Change cipher spec Server
(12)Finished Server

客户端的身份验证是可选的, 由服务器决定是否验证客户端的身份(银行网银类似是需要验证客户端的身份)

说明:change cipher spec消息属于SSL密码变化协议,其他握手过程交互的消息均属于SSL握手协议,统称为SSL握手消息。计算Hash值,指的是利用Hash算法(MD5或SHA)将任意长度的数据转换为固定长度的数据

OpenSSL开源软件

1、简介

Openssl是开源软件,各应用程序可以使用openssl进行安全通讯,避免窃听、同时确认另一端连线者的身份,openssl被广泛应用在网页服务器之上。其是C语言所写,实现了基本的加密功能,也是SSL/TLS协议的应用实现。此软件是以Eric Young以及Tim Hudson两人所写的SSLeay的分支,于1998年12月发布第一个版本

2、Openssl的版本
3、OpenSSL的组成部分:
openssl加密工具
对称加密工具:openssl enc
单向加密工具:openssl dgst
生成用户密码:openssl passwd
生成随机数:openssl rand
生成私钥:openssl genrsa
提取公钥:openssl rsa
查看证书:opensll x509
Openssl CA的工作目录
Openssl配置文件

构建CA及签发证书的步骤

########自建CA########
1、生成私钥
    (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2、生成自签证书
    openssl req -x509 -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
3、为CA提供所需的目录及文件
    mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
4、建立证书索引序列号
    echo 01 > /etc/pki/CA/serial
    
########客户端生成私钥及生成签发证书请求########
1、到客户端相应的目录中,生成私钥 
    mkdir /etc/httpd/ssl
    (umask 077; openssl genrsa -out httpd.key 2048)
2、生成签署请求文件(实为导出公钥信息)
    openssl req -new -key httpd.key -out httpd.csr -days 365

########服务器端签署证书########
1、openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

#######拷贝签署的文件至客户端指定目录#######
1、cp /tmp/httpd/csr /etc/httpd/ssl

CA吊销证书

1、客户端获取要吊销证书的serial
2、CA端主机执行吊销操作
    openssl ca -revoke /etc/pki/CA/newcert/SERIAL_ID(证书的真正序列号)
3、生成吊销证书的吊销编号(只是第一次吊销证书时执行)
    echo 01 > /etc/pki/CA/crlnumber
4、更新证书吊销列表
    openssl ca -gencrl -out thisca.crl
    
#####查看crl文件
openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
上一篇 下一篇

猜你喜欢

热点阅读