SSL/TLS 握手过程详解
在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐、经济、社会关系等都离不开互联网的帮助。在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的。幸运的是,在大牛们的努力下,很早以前就有一套安全体系来保障互联网信息的传递。下面我们一起来了解一下这套体系。
加密算法
首先我们需要了解一下加密相关的知识,加密可以分为对称加密和非对称加密。两者的主要区别就是是否使用同一个秘钥,对称加密需要用同一个秘钥。非对称加密不需要用同一个秘钥,而是需要两个秘钥:公开密钥(publickey)和私有密钥(privatekey),并且加密密钥和解密密钥是成对出现的。
对称加密
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。常见的对称加密有 DES、AES 等。
非对称加密
非对称加密使用一对“私钥-公钥”,用私钥加密的内容只有对应公钥才能解开,反之亦然。非对称加密有以下特性:
对于一个公钥,有且只有一个对应的私钥。
公钥是公开的,并且不能通过公钥反推出私钥。
通过私钥加密的密文只能通过公钥能解密,通过公钥加密的密文也只能通过私钥能解密。
非对称加密不需要共享同一份秘钥,安全性要比对称加密高,但由于算法强度比对称加密复杂,加解密的速度比对称加解密的速度要慢。常见的非对称加密有 RSA、ESA、ECC 等。
摘要算法
除了加密算法,摘要算法在互联网安全体系中也扮演了重要的角色。摘要算法有以下特性:
只要源文本不同,计算得到的结果,必然不同(或者说机会很少)。
无法从结果反推出源数据。
基于以上特性,我们一般使用摘要算法来校验原始内容是否被篡改。常见的摘要算法有 MD5、SHA 等。
Tips: 摘要算法不能算作加密算法,加密算法需要使用秘钥加解密,但摘要算法无法根据结果反推出内容。另外 MD5 目前也不算安全了,例如彩虹表攻击。
具体例子
假设甲公司要给乙公司发送一份机密的文件,那么这次传输需要确保以下几点:
文件内容不能被读取(加密)
文件内容不能被篡改(数字签名)
文件不能被掉包(数字证书)
加密
对称加密需要用同一份秘钥,这一份秘钥的约定就有被中途截获的可能。因此可以采用非对称加密算法加密对称秘钥的方式来加密内容,也就是用乙的公钥加密对称秘钥,并用这个对称秘钥加密文件内容。
假设这份文件被黑客截获,但是黑客没有乙的私钥无法解出对称秘钥,也就无法解密文件内容。但是这里有个风险,虽然黑客无法解密文件内容,但他可以自己生成一份秘钥并用乙的公钥加密,再用这份秘钥加密一份伪造的文件发给乙,这种情况下乙收到的就是被篡改的文件。
数字签名
上面提到乙有可能收到被篡改的文件,这个问题可以用数字签名的方式解决,数字签名就是用摘要算法提取出源文件的摘要并用私钥进行加密后的内容。针对上面那个问题,甲在发送文件时再附带上源文件的数字签名。如果被黑客截取到加密后的文件和数字签名,黑客即使使用甲的公钥解出了文件摘要,由于摘要算法的特性黑客也无法还原出原始内容。但乙可以解密出文件内容再用同样的摘要算法提取出摘要来和数字签名里的摘要进行比对,摘要一致则说明文件没有被篡改过。
到目前为止还有一个风险就是乙无法确定自己用的公钥就是甲提供的,如果黑客将乙手里的甲的公钥替换成自己的并用自己的私钥生成数字签名,那么乙还是会受到被篡改的文件。
数字证书
数字证书的出现就是为了解决上述提到的问题,数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。
数字证书里一般会包含公钥、公钥拥有者名称、CA 的数字签名、有效期、授权中心名称、证书序列号等信息。
数字证书如何确保列出的用户就是公钥的拥有者呢?关键点是 CA 的数字签名,CA会用自己的私钥将证书内容的摘要进行加密。因为 CA 的公钥是公开的,任何人都可以用公钥解密出 CA 的数字签名的摘要,再用同样的摘要算法提取出证书的摘要和解密 CA 数字签名后的摘要比对,一致则说明这个证书没有被篡改过,可以信任。
PKI
PKI(Public Key Infrastructure)翻译过来就是公钥基础设施,可以理解为利用公钥技术为网络应用提供加密和数字签名等密码服务以及必需的密钥和证书管理体系。它是一个提供安全服务的基础设施,PKI 技术是信息安全技术的核心,同时也是电子商务的关键和基础技术。
PKI 既不是一个协议,也不是一个软件,它是一个标准,在这个标准之下发展出的为了实现安全基础服务目的的技术统称为 PKI。
PKI是一个标准,它包括一些基本的组件,不同的组件提供不同的服务,主要由一下几个组件组成:
认证中心 CA(证书签发):CA 机构,又称为证书授证 (Certificate Authority) 中心,是 PKI 的”核心”,即数字证书的申请及签发机关,CA 必须具备权威性的特征,它负责管理 PKI 结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份,CA 还要负责用户证书的黑名单登记和黑名单发布。
X.500目录服务器(证书保存):X.500目录服务器用于”发布”用户的证书和黑名单信息,用户可通过标准的 LDAP 协议查询自己或其他人的证书和下载黑名单信息。
具有高强度密码算法(SSL)的安全 WWW 服务器(即配置了 HTTPS 的apache):Secure socket layer(SSL)协议最初由 Netscape 企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。
Web(安全通信平台):Web 有 Web Client 端和 Web Server 端两部分,分别安装在客户端和服务器端,通过具有高强度密码算法的 SSL 协议保证客户端和服务器端数据的机密性、完整性、身份验证。
自开发安全应用系统:自开发安全应用系统是指各行业自开发的各种具体应用系统,例如银行、证券的应用系统等。
总结
数字签名和数字证书是两个不同的概念,理解的关键点是数字签名是内容提供方用自己的私钥对内容摘要(MD5、SHA)非对称加密,而数字证书的关键是 CA 用自己的私钥对证书内容的摘要非对称加密从而确保证书内的用户合法拥有证书里列出的公钥。
SSL/TLS 握手过程详解:
http://www.jianshu.com/p/7158568e4867
SSL/TLS 握手过程详解的更多相关文章
- SSL/TSL握手过程详解
1. Client Hello 握手第一步是客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1.客户端支持的加密套件(Support Ciphe ...
- SSL/TLS 握手优化详解
随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer ...
- 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)
继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSocket服务端开发.完整源码 一.创建keystore文件 网上大多数是通过jdk命令创建秘 ...
- 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
SSL/TLS握手过程可以分成两种类型: 1)SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书.2)SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户 ...
- TLS握手优化详解
随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流.HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Laye ...
- 开源项目SMSS发开指南(四)——SSL/TLS加密通信详解
本文将详细介绍如何在Java端.C++端和NodeJs端实现基于SSL/TLS的加密通信,重点分析Java端利用SocketChannel和SSLEngine从握手到数据发送/接收的完整过程.本文也涵 ...
- SSL/TLS握手过程
----------------------------------专栏导航----------------------------------HTTPS协议详解(一):HTTPS基础知识 HTTPS ...
- TCP协议:三次握手过程详解
本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 上图主要包括三部分:建立连接.传输数 ...
- TCP/IP协议握手过程详解
1,建立连接 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示. (1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SE ...
随机推荐
- Time模块和datetime模块
Time模块和datetime模块 一. 调用 import time #调用time模块 二.使用方法 1.time.time 拿到时间戳.以Linux诞生年份1970年开始计算到程序执 ...
- OSW 快速安装部署
关于在运行Oracle的环境下部署OSW具体好处不再多说,只需要知晓,在日常Oracle定位各类故障,osw的数据可以协助诊断问题.MOS很多文档也多处提到需要osw的监控数据. 一.前期资料准备 1 ...
- 使用spark-streaming实时读取Kafka数据统计结果存入MySQL
在这篇文章里,我们模拟了一个场景,实时分析订单数据,统计实时收益. 场景模拟 我试图覆盖工程上最为常用的一个场景: 1)首先,向Kafka里实时的写入订单数据,JSON格式,包含订单ID-订单类型-订 ...
- 谈谈今年很火的区块链 CDN
2017 年初,区块链被越来越多的人知道.区块链的概念其实很早就被提出来,曾经有人说过"区块链技术被认为是继蒸汽机.电力.互联网之后,下一代颠覆性的核心技术. 如果说蒸汽机释放了人们的生产力 ...
- Android模拟器调试html5 app
主机:Linux x641.Android模拟器,模拟器设置--->打开Enable Usb Debug2.在主机上安装firefox,最低v36.菜单--->开发者--->WebI ...
- [转]Java - 集合框架完全解析
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作.Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构通常称为Java集合框架.在平常的学习开发中,灵 ...
- Flipper
Flipper Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- A Walk Through the Forest
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- SeaJS之shim插件:解决非cmd规范的插件与sea的区别
SeaJS 中的模块默认都遵守 CMD 规范,但现实中已存在大量普通 JavaScript 类库,比如 jQuery.Underscore 等.使用 shim 插件,可以将这些普通 JS 文件转换成 ...
- ContextLoaderListener - 运行原理
基本概念: servletContext:http://blog.csdn.net/yjw757174266/article/details/45072975 1. 使用ContextLoaderL ...