关于HTTPS的理解

219 阅读3分钟

为什么HTTPS比HTTP安全?

因为加入了tls/ssl安全层,所有应用层和传输层的数据都会经过安全层加密解密来保证数据安全

tls和ssl有什么关联和区别?

ssl是tls的前身,目前已经废弃,1999年IETF将SSL进行标准化,推出TLS 1.0

什么是https中间人攻击,如何防止?

中间人攻击就是中间人通过劫持本地请求,在客户端和服务器之间窃取及伪造数据。解决方法就是引入CA证书认证

安全层握手如何进行?

  1. 客户端检测到是https请求,生成随机数client_random,向服务器发送client_random和加密套件列表(client_hello请求)
  2. 服务器接收到client_hello请求后,保存client_random,向客户端发送选择的加密套件,service_random,服务器证书、CA证书(CA证书可以不返回,如果不返回客户端会单独从网络上下载)
  3. 客户端验证证书合法性、保存service_random,发送证书公钥加密的随机数pre_master及浏览器确认。利用client_random,service_random和pre_master生成master_secret主密钥。
  4. 浏览器使用自己的私钥解密得到pre_master,利用client_random,service_random和pre_master生成master_secret主密钥,并发送服务器确认,安全层握手结束,后续传输数据阶段使用master_secret对数据进行对称加密传输。

https如何验证证书合法性?

首先拿到服务器证书后

  1. 验证证书是否到期,这个通过证书明文信息即可判断
  2. 验证证书是否被吊销,主流有两种方式:维护已吊销证书表或者在线验证
  3. 验证数字签名,取出证书的基本信息,利用证书提供的hash函数算出信息摘要A。利用证书提供商提供的公钥解密数字签名得到信息摘要B,如果A等于B,则信息没有被篡改。但是这个证书提供商可能比较小众不够权威,那么还需要对CA证书提供商进行验证,直到能在操作系统中找到为中间CA提供商签名的根证书提供商。找不到则判断证书非法,这条查找验证链路成为数字证书链。

如何强制开启https

可以使用HSTS(HTTP严格传输安全 HTTP Strict Transport Security) 开启方法:当客户端通过HTTPS发出请求时,在服务器返回HTTP响应头中设置Strict-Transport-Security字段来开启。

非加密传输时设置的HSTS字段无效。

比如这样设置Strict-Transport-Security: max-age=31536000; includeSubDomains表示:

  1. 在接下来的31536000秒(即一年)中,浏览器向example.com或其子域名发送HTTP请求时,必须采用HTTPS来发起连接。比如,用户点击超链接或在地址栏输入http://www.example.com ,浏览器应当自动将 http 转写成 https,然后直接向https://www.example.com 发送请求。
  2. 在接下来的一年中,如果 example.com 服务器发送的TLS证书无效,用户不能忽略浏览器警告继续访问网站。