HTTPS证书校验

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTPS证书校验相关的知识,希望对你有一定的参考价值。

参考技术A HTTP协议传输数据是明文传输,任意的人抓包就能看到传输的数据,这显然不安全。1994年,Netscape公司用加密协议增加了HTTP,开始在HTTP的基础上加入SSL(Secure Socket Layer)。称为"HTTP over SSL"或者"HTTP Secure",也就是我们现在熟知的HTTPS。
TLS(Transport Layer Security,传输层安全协议)是IETF制定的一种新的协议,TLS1.0是建立在SSL3.0协议规范之上,是SSL3.0协议的后续版本,可以理解为SSL3.1。

SSL/TLS分为对称加密和非对称加密两种方式。
对称加密是指加密和解密都用同一份密钥(只有一个KEY),常见的有:AES-128,AES-192,AES-256。
非对称加密对应于一对密钥,称为私钥和公钥,用私钥加密后需要用公钥解密,用公钥加密后需要用私钥解密,常见的有:RSA、DSA/DSS。
对称加密的优点是运算速度快,缺点是互联网环境下无法将密钥安全的传送给对方。非对称加密的优点是可以安全的将公钥传递给对方,但是运算速度慢。
https先采用非对称加密传输协商对称加密的密钥,然后用对称加密通信。

HTTPS的非对称和对称加解密过程:

客户端通过发送Client Hello消息给服务器初始化Session连接,Client Hello 消息包含以下字段:
SSL/TLS 版本号。version 2 表示的是SSL 2.0,version 3 表示的是SSL 3.0,version 3.1表示的是TLS 1.0。
随机数Random_C。一共32个字节。前面4个字节是当前时间戳,后面28个字节是一个随机数。后面协商对称加密的Session Key会用到。
Session ID。如果是之前已经存在的连接重连,那么Session ID会是一串数字,否则是None。
Cipher Suite。支持的加密组件列表。例如TLS_RSA_WITH_DES_CBC_SHA, TLS 是TLS协议版本,TLS表示TLS1.0,RSA是密钥交换算法,DES_CBC是加密算法,SHA是摘要算法。
压缩算法。表示建议选用的是哪种压缩算法。
Server Hello. 服务器收到客户端的Client Hello 消息会响应一个Server Hello 消息,包括以下字段:
SSL/TLS 版本,客户端和服务器都支持的SSL/TLS最高版本。
随机数Random_S,一共32个字节,前面4个字节是当前时间戳,后面28个字节是一个随机数。后面协商对称加密的Session Key会用到。
Session ID,这里会有三种情况。1.产生一个新的Session ID,表示没有找到之前的Session ID或者之前没有这个Session ID。2. 返回客户端带上的之前的Session ID。(断链重连)3.Null,服务器没有办法产生新的Session ID。
Cipher Suite,服务器从刚才Client Hello消息的Cipher Suite加密列表中选中的加密组件。
压缩算法,表示选中的是哪种压缩算法。

服务器发完Sever Hello 后还会发送下面几条消息:
Server Certificate.服务器发给客户端的证书,包含公钥。客户端后面会用该密钥加密premaster secret。客户端也会校验证书的合法性,比如证书包含的域名是否就是客户端正在访问的域名。
Server Key Exchange.[可选]当服务器的证书不包含公钥时,客户端会用它来加密后面的Client Key Exchange消息。
Client Certificate Request.[可选]用于服务器需要验证客户端身份的情况,例如银行系统通常用U盾来证明客户端的身份。
Server Hello Done.表示Server已经发送消息完毕并且在登陆客户端回复。
客户端紧接着响应给服务器的消息:
Client Certificate.[可选]客户端证书,包括客户端的公钥。响应上面的Client Certificate Request。
Client Key Exchange.该消息包括premaster secret,TLS的版本号,再次带上版本号是因为之前的版本号是明文传输的,攻击者可能会恶意修改为较低的版本号,从而降低连接的安全系数方便发起攻击。该消息字段会用公钥加密。现在一共有Random_C,Random_S, premaster secret三个随机数,客户端和服务器端会用相同的算法,用这三个随机数作为参数,从而计算得到另外的一个随机数,即后面对称加密的密钥Session Key。
Certificate Verify.[可选]该消息只针对有Client Certificate的情况。会计算出该消息字段的HASH,然后用客户端的私钥加密该HASH作为签名。服务器端会使用Client Certificate消息中得到的客户端公钥解密并验证这条消息的合法性。
Change Cipher Suite.该消息通知服务器接下来的Client Finish消息将会用刚才协商的密钥Session Key来加密。
Client Finished.该消息会列举客户端上面用到的所有加密字段,并且算出他们的HASH值,然后用Session Key加密。
服务器在握手阶段最后回应给客户端的消息:
Change Cipher Suite Message.该消息通知客户端接下来的消息会用Session Key来加密。
Sever Finished Message. 对整个协商阶段用到的字段算一个HASH,然后用Session Key加密。

在握手过程中,网站会向浏览器发送SSL证书,SSL证书和我们日常用的身份证类似,是一个支持HTTPS网站的身份证明,SSL证书里面包含了网站的域名,证书有效期,证书的颁发机构以及用于加密传输密码的公钥等信息,由于公钥加密的密码只能被在申请证书时生成的私钥解密,因此浏览器在生成密码之前需要先核对当前访问的域名与证书上绑定的域名是否一致,同时还要对证书的颁发机构进行验证,如果验证失败浏览器会给出证书错误的提示。
如上图所示,公钥内容的后面是会跟上一个数字签名,该数字签名是将公钥内容的HASH用私钥加密后的密文。客户端拿到公钥后,会用相同的HASH算法重新算一遍,得到一个HASH值hash1。然后用公钥解密数字签名得到HASH值hash2,如果hash1等于hash2就证明这个公钥是没有被中间人修改的。即使中间人修改了公钥的内容,他也没有私钥可以重新生成数字签名,用户拿到修改后的公钥一算发现HASH不对就会报错。

对HTTPS最常见的攻击手段就是SSL证书欺骗或者叫SSL劫持,是一种典型的中间人攻击。不过SSL劫持并非只是用于攻击目的,在一些特殊情况下利用SSL劫持我们可以更顺畅的访问网络,我会在后文提到。
以攻击为目的的SSL劫持如果不注意浏览器安全提示的话,很容易就中招。当网络中有中间人发起SSL劫持攻击时,攻击者需要伪造一个SSL证书发给浏览器,这个时候由于伪造的SSL证书不受信任,浏览器会给出提示。

为了解决单个文件大,延迟性高等问题,迎来了新的解决方案Onlie Certificate Status Protocol(以下简称OCSP)。

在RFC2560 X.509 Internet Public Key Infrastructure Online Certificate Status Protocol – OCSP 的描述中,浏览器从在线OCSP服务器(也称为OCSP Response Server)请求证书的撤销状态,OCSP Server予以响应。这种方法避免CRL更新延迟问题。同样的,X.509 v3证书的OCSP信息也是存储在拓展信息中。

浏览器在获得Web服务器的公钥证书后,开始验证公钥的合法性,这里会向该公钥的扩展信息中提供的OCSP Server地址发送OCSP Response,获得响应后,确认证书有效,再继续跟Web服务器通信。

OCSP优点:相对于CRL方式,证书吊销后,CA Server可以立刻将吊销信息发送给浏览器,生效时间快。响应包内容短,不像CRL的响应包,都将近1M以上。
OCSP缺点:
浏览器的每次HTTPS请求创建,都需要连接CA OCSP Server进行验证,有的浏览器所在IP与CA OCSP Server的网络并不是通畅的。而且,OCSP的验证有网络IO,花费了很长的时间,严重影响了浏览器访问服务器的用户体验。
在浏览器发送服务器HTTPS证书序号到CA OCSP Server时,也将暴露了用户的隐私,将用户访问的网址透漏给了CA OCSP Server。

《你不在意的HTTPS证书吊销机制》( https://zhuanlan.zhihu.com/p/75475419 )

《HTTPS与SSL证书概要》( https://zhuanlan.zhihu.com/p/75475419 )

《HTTPS详解》( https://www.cnblogs.com/makelu/p/11140824.html

移动端HTTPS证书校验过程是怎样的

写了几篇关于HTTPS证书的文章之后,让我对HTTPS证书的内容以及证书的申请下载等问题,有了一定的了解。今天在这篇里咱再了解一下关于移动端HTTPS证书校验的相关问题,HTTPS证书购买和HTTPS证书校验都是在申请下载HTTPS证书的时候要关注的问题。先说一下HTTPS,说起HTTPS应该说HTTPS是HTTP的升级版,它是在HTTP的基础上加了SSLTLS。

为什么要这样说呢,因为原来的HTTP本身存在着缺陷,归纳一下应该有三点,通信使用的明文可能被窃听,对通信方的身份不验证可能会伪装,对报文的完整性不验证可能会被篡改。所以升级之后成为HTTPS,就有效解决了这三个问题。

一、HTTPS证书购买

HTTPS证书其实就是一种数字证书,还被称为SSL证书,它是由授信机构CA颁发的,带有身份的验证和数据的传送加密功能。那么,在HTTPS证书购买的时候呢,要注意几个问题才好。第一步呢,就是要统计域名的数量。因为证书要保护的域名数量越多,证书价格也就会越高的,所以按照域名的数量来分的话,可以分为单域名、多域名和通配符等类型供客户选择;ssl证书申请

第二步呢,就是要确定认证级别的。根据自己的申请情况和需要的特点,HTTPS证书分为三个等级,从低到高就是DVOVEV,等级越高验证审核也是最严格的,安全性能也就越高。第三步呢,就是选择证书的品牌了。现在全球有多家的CA机构,在HTTPS证书购买的时候要了解这些机构,选择授信好、性价比高的CA机构。

二、HTTPS证书校验

在目前有很多手机银行使用了HTTPS通信方式,但是并没有针对有效性进行验证,也就是没有通过移动端HTTPS证书效验,这是在实际项目代码的审计中发现的。这个也不用紧张,不会影响银行客户的使用。并且还有防护办法,因为手机银行服务器是固定的,所以证书其实也是固定的,这样可以使用证书公钥锁定的办法,对证书未验证的问题进行防护。具体事项就请查阅相关资料吧,在里就不细说了。

以上是关于HTTPS证书校验的主要内容,如果未能解决你的问题,请参考以下文章

移动端HTTPS证书校验过程是怎样的

iOS内置证书,校验https请求

在okhttp3,WebView中忽略HTTPS证书校验

我们来一起说说HTTPS中间人攻击与证书校验

Android合规问题引起的https证书校验

Android合规问题引起的https证书校验