HTTPS原理详解

本文最后更新于2017年1月1日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

想深入了解一下HTTPS的原理,方便以后给别人讲解。

正文:

参考解答:

主要内容是参考的「图解HTTPS」这一篇文章,虽然讲的比较简单,但大部分的知识点都已经提到了,作为一般科普性的了解已经完全够了;如果想要进一步了解的话,推荐阅读Bugly社区的文章「全站HTTPS来了」;如果想要了解HTTPS对性能的影响,可以参考百度运维的文章「大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响」;可以参考一下imququ的「关于启用 HTTPS 的经验分享」系列文章进行学习。

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3097.html

《HTTPS原理详解》上有7条评论

  1. 聊聊 HSTS 下的 HTTPS 降级问题
    http://www.barretlee.com/blog/2017/04/01/hsts-downgrade/

    HSTS 的作用是为了在用户通过 HTTP 访问网站时不需要服务器做 301/302 跳转,直接一个 307 本地强制使用 HTTPS 访问网站,这可以防止用户在第一次发出请求时被劫持,也减少了一次请求。
    HSTS 是服务器(如 Nginx)通过一个 Strict-Transport-Security 请求响应头写入到客户端的,所以用户至少要访问一次这个网站,HSTS 才会生效。HSTS 还可以申请内置到浏览器中,Chrome 维护了 HSTS Preload List 名单,允许用户在从未访问某网站的情况下,第一次访问时就自动使用 HTTPS。安全性就更强了。

  2. 三种解密 HTTPS 流量的方法介绍
    https://imququ.com/post/how-to-decrypt-https.html

    Man-in-the-middle
    RSA Private Key
    SSLKEYLOGFILE
    # 总结
    Fiddler 这类工具通过往系统导入根证书来实现 HTTPS 流量解密,充当中间人角色。要防范真正的 HTTPS 中间人攻击,网站方需要保管好自己的证书私钥和域名认证信息,为了防范不良 CA 非法向第三方签发自己的网站证书,还要尽可能启用 Certificate Transparency、HTTP Public Key Pinning 等策略;用户方不要随便信任来历不明的证书,更不要随意导入证书到根证书列表,还要养成经常检查常用网站证书链的习惯。

    RSA 密钥交换没有前向安全性,这意味着一旦私钥泄漏,之前所有加密流量都可以解开。为此,网站方需要启用使用 ECDHE 作为密钥交换的 CipherSuite,或者直接使用 ECC 证书;用户方需要弃用不支持 ECDHE 的古董操作系统及浏览器。

    对于浏览器而言,HTTPS 毫无秘密,通过浏览器生成的 SSLKEYLOGFILE 文件,Wireshark 可以轻松解密 HTTPS 流量。另外,如果浏览器被安装恶意扩展,即使访问安全的 HTTPS 网站,提交的数据一样可以被截获。这种客户端被攻击者控制引发的安全问题,无法通过 HTTPS 来解决。

  3. 通过HSTS实现浏览器自动跳转https(非服务器响应跳转)
    http://www.rootop.org/pages/4514.html
    https://www.nginx.com/blog/http-strict-transport-security-hsts-and-nginx/

    全称 HTTP Strict Transport Security

    HSTS目的是让浏览器在访问网站的时候浏览器内部自动实现https协议访问(不需要服务器告诉浏览器跳转https)。
    在没有hsts功能时,需要自己在nginx里配置http跳转https。
    但是这样每个请求(可能)都需要nginx告诉浏览器你访问的地址需要跳转到https,这样就浪费了时间。

    hsts需要在第一次访问https时,服务器返回一个指定的响应头,用于告诉浏览器你可以用hsts功能。
    然后后续的访问都会自动走https,而不需要跳转了(浏览器内部自己跳转)。

    nginx配置:
    # 首先配置 http跳转https
    if ($scheme = http) {
    return 301 https://$host$request_uri;
    }

    # 添加hsts响应头,可以在server{}段,或者location中。
    add_header Strict-Transport-Security "max-age=86400; includeSubdomains; preload";

    chrome浏览器里可以通过访问: chrome://net-internals/#hsts 搜索支持的域名。

发表评论

电子邮件地址不会被公开。 必填项已用*标注