您的位置:首页 > 理论基础 > 计算机网络

HTTPS 101

2015-10-27 18:25 302 查看

HTTPS通信

什么是HTTPS

HTTPS即 Hypertext Transport Protocol Sercure,超文本传输协议安全版。

HTTP vs. HTTPS

应用层协议:HTTP,HTTPS = HTTP + TSL/SSL(都是应用层协议)

内容是否加密:HTTP传输内容是明文,HTTPS是密文

都是基于客户端-服务器模型,因为二者都是HTTP协议的通信

TSL/SSL

TSL 即 Transport Secure Layer,传输安全层协议;SSL 即 Secure Sockets Layer,安全套接字协议。

最初网景公司为了解决隐私数据需要加密传输的问题,设计了 SSL,从而诞生了 HTTPS。最后一个版本是 3.0,记录在 RFC6101中。

之后 IEFT 对 SSL 3.0 升级,设计了 TSL 1.0,记录在 RFC 2246中。目前最新版是 1.2,记录在 RFC5246 中。

目前实际使用的大多数 HTTPS 都是 TSL 的,SSL 的存在是为了兼容某些老旧的系统。

TSL/SSL 都是基于非对称公钥加密体系的,该体系存在两个秘钥:

仅服务端保存和使用的私钥

服务端发送给所有请求者的公钥

公钥加密的信息只能私钥解密,私钥加密的信息也是能公钥解密

公钥仅用于下面的通信过程的前几个步骤,一旦安全通信建立,将不再使用公钥加密。

在建立安全连接的过程中,客户端发用公钥加密的信息,服务端用私钥解密。

HTTPS 通信过程(工作原理)

通信过程需要加密,采用三种加密算法

非对称加密算法,比如 RSA、DSA/DDS

对称加密算法,比如 AES、RC4、3DES

Hash算法,比如 MD5、SHA1、SHA256

通信过程如下

HTTPS通信过程中,如果出现任何的异常,通信将被终止,以保护敏感信息不被泄露。

下面的通信过程被称为 SSL Handshack,目的是建立服务端与客户端的唯一(随机数)受信通信。

第 0 次通信

-1. 客户端访问HTTP资源

0. 服务端重定向到HTTPS资源

第 1 次通信

客户端发送HTTPS请求,将支持的加密算法和 Hash 散发发送给服务端

服务端收到客户端的HTTPS请求后

服务端根据客户端支持的算法(加密算法和 Hash 算法)与自己支持的算法比对,选择二者都适用的算法

生成并返回证书给客户端。

证书包含:证书信息(证书颁发机构、服务端域名、有效期等)、公钥、Hash算法

第 2 次通信

客户端获得证书后

验证证书合法性:证书颁发机构是否合法、证书的服务器域名与客户端现在访问的是否一致、证书是否过期等

如果证书合法或用户接受了不受信的证书,浏览器生成一段随机数,用(服务端返回的)公钥对其加密

生成一段握手消息,使用(服务端返回的)Hash 算法计算其 Hash,使用随机数对握手消息加密

发送如下信息:(a)发送使用公钥加密了的随机数、(b)使用随机数加密了的握手消息、(c)握手消息的 Hash

服务端收到信息后

使用私钥对(a)解密获得随机数,使用随机数对(b)解密获得握手消息,使用 Hash 算法对握手消息计算 Hash,验证是否与(c)一致

生成一段握手消息,使用 Hash 算法计算握手消息的 Hash,使用随机数对握手消息加密

发送(d)使用随机数加密了的握手消息和(e)计算出的 Hash

第 3 次通信

客户端收到信息后

使用随机数对(d)解密,获取服务端发送的握手消息,使用 Hash 算法计算握手消息 Hash,验证是否与(e)一致

如果一致,则正式进入真正传出内容的传输阶段;客户端使用随机数对真正传输的内容加密,然后发送。

看完通信过程,再看看三种加密算法是如何参与到通信过程的

非对称加密算法,用于第 2 次通信过程的加解密

对称加密算法,用于第 2 次和第 3 次通信过程中对握手消息的加解密

Hash 算法,用于第 2 次和第 3 次通信过程中对随机数的验证

三次通信过程中C/S间的对话

C:”我们开始通话吧!”

S:”好的,不过为了保证我们的通话不被窃听,我们对通话加密吧。这是我的身份信息,给你。”

C:”我来看看,恩,我能够相信你或者我选择相信你(客户端选择受信)。我用你发给我的加密方式,发送一段密文给你,你看对吗?”

S:”恩,对的。我要告诉你,你是对的”

C:”恩,好的,我知道啦。恩,加密是对的,我们开始通话吧”

证书

如果没有证书,攻击者可以拦截通信,在第 2 步,攻击者获取公钥并替换为自己的公钥,然后返回给客户端。

客户端使用攻击者的公钥加密信息,攻击者就可以获取用户加密所用的随机数。这样,攻击者就可以伪装成客户端。

证书要到证书机构认证才能获取或者自己制作(自己信任自己),这种人为的确认保证了加密的可靠——如果客户端对不被认证的证书不信任,那么攻击者就无法实现攻击。

证书按用途分类

SSL证书,用于 HTTPS 通信

代码签名证书,用于软件签名(可扩展主题)

客户端证书,用于加密邮件

双因素证书,网银的USB Key使用的

获取证书

企业可以向某个认证机构 Cetificate Authority(CA)申请,个人用户处于开发目的也可以个人制作。

向 CA 申请

证书按认证级别分类

域名证书(Domain Validate Certifcation),CA需要验证申请人是否对其提供的域名有完全的控制权

除了单个域名与证书的绑定,还可以申请通配符域名认证(比如 *.baidu.com),不过收费更高

组织证书(Organization Validate Certifaction),域名证书验证 + 组织背景验证

扩展验证证书(Extend Validate Cterfication),最为安全,费用最高

使用该证书的特点是,整个浏览器地址栏变绿同时会显示被认证的组织名称



个人制作

参考《HTTPS(2)-keytool》

证书的验证过程

证书按证书链的方式组织,最顶层是根 CA 机构,其下是根 CA 机构颁发的中级 CA 机构,最后就是中级 CA 机构颁发的特定公司或组织的 CA 证书。验证证书的过程就是依次验证整个证书链的每个证书是否受信,如果根 CA 机构不受信,那么其颁发的所有证书都不受信。证书受信的条件是整个证书链的证书都是受信的。



证书按认证有效期长分类

根认证有效期最长

中级其次

组织公司认证有效期最短

HTTPS攻击

SSL劫持:发往客户端的证书被中间人拦截,中间人发送自己的证书给用户

SSL Strip:用户由HTTP到HTTPS的重定向被中间人拦截,中间人是用户继续与服务端通信,但是使用HTTP

HTTPS站点

https://www.baidu.com

https://en.wikipedia.org/wiki/Transport_Layer_Security

https://login.live.com/

https://kyfw.12306.cn/otn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HTTPS