目录
1.相关名词
1.1 公钥证书PKC
公钥证书(public-key certificate)是使用证书机构CA的私钥对个人公钥进行数字签名后生成的文件,一般简称证书。
1.2.公钥基础设置PKI
公钥基础设施(Public-Key infrastructure)是为了能够更有效地运用公钥而制定的一系列规范和规格的总称。
1.3 SSL和TLS
SSL(Secure Socket Layer,安全套接层)是NetScape利用数据加密(Encryption)技术所研发的,用以保障在Internet上数据传输之安全、确保数据在网络上之传输过程中不会被截取及窃听的技术。
TLS(Transport Layer Security,传输层安全性协议)是SSL技术的升级版本,目的也是为互联网中的通信提供数据的机密性和完整性保障,目前TLS已经成为互联网中保密通信的工业标准。
ps:SSL最大版本为3.0版本,而TLS1.0则相当于SSL3.0之后的一个版本,并且TLS 1.0包括了可以降级到SSL 3.0的实现。
2.SSL和TLS工作原理
感谢http://www.cnblogs.com/bhlsheji/p/4586597.html对SSL工作原理的细致介绍,本文中一些内容也借鉴了其博客内的相关知识。在这里细节部分就不再赘述来班门弄斧,详细内容可以去上述博客中查看。在这里主要说明SSL和TLS的双向认证过程,即三次握手认证工作原理。
2.1 握手准备
客户端与服务端如果想要进行SSL或TLS通信(以下简称ST通信),那么必须双端都预先在CA中进行公钥认证操作从而获得公钥证书,这证书是后续的握手操作中用来验明双端身份的重要标识。当然这个操作并不是在开始握手通信之前才能执行,而是可以在预备通信之前预先准备好。例如:双端预先生成密钥对,然后私钥留存,公钥则交付给CA来注册双端公钥证书留待校验使用。
2.2 第一次握手
所谓的握手,其实就是客户端和服务器之间的一次“来回”数据传递。第一次握手通常是客户端向服务器首先发送数据,因为从客观上来说客户端一般都作为用户使用者的身份,用户总是希望获得某些服务,那么对用户而言享受服务之前先确认对方是自己需要的服务的提供者这个确认操作必然是用户身份先发起。所以:
(1)客户端会首先向服务器通过url地址发送消息(message),发送客户端的SSL/TLS规格、能够支持的加密算法(也就是稍后完成身份验证之后,用于通信的密钥长度,说白了就是对称加密密钥的长度)等信息。
(2)服务器接收到客户端通过url地址发来的消息(message),此时消息并不是加密处理的(还没开始通信,怎么可能加密)。服务器此时需要将客户端发来的SSL/TLS版本等信息与自己支持的进行校验,如果能够匹配则通信继续,否则直接断开链接(客户端会得到通信失败之类的信息)即可。
(3)当服务器对客户端发来的消息校验完毕后,将如下内容打包作为刚刚请求的响应反馈给客户端,至此SSL/TLS的第一次握手完毕。
- 双方用于通信的加密算法信息
- 服务器经过CA公正的服务器公钥证书
- 服务器向客户端发起客户端经过CA公正的客户端公钥证书
- 附带回应:刚刚的从客户端发来的消息接收成功
2.3 第二次握手
第二次握手的发起人仍然是客户端,因为在第一次握手完毕后服务器将SSL/TLS加密通信的必要信息全都发送到了客户端。那么是否继续进行握手就必然还是由客户端来发起。所以:
(1)客户端收到服务器第一次回应后应当首先执行VSC(Verify Server CA Certification,对服务器身份进行校验),而不是立即给出回应。由于刚才服务器已经将它经过CA公正过的公钥证书发送过来,所以通过去CA信任链中的机构认证这份证书是否的确是由客户端想要访问的url地址发出,就能够确认服务器真实身份(核验并不是只核验url,比如服务器证书颁发机构的可信度、证书的有效期之类的)。当然,如果CA给出了你这个证书并不是想要访问的服务器发送给你的,那