IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    https简介及常见问题

    夜行人发表于 2016-05-06 08:33:44
    love 0

    没有太多情怀,本文主要是解决问题的

    https安全的2大部分

    • 身份证明:主要证明server就是该域名的所有者,这里需要一个CA作中间人
    • 数据传输加密:非对称,对称加密

    PKI架构

    这里是身份证明部分

    User, Server, CA,这三者是PKI中的三个角色。User方接收到Server发出的证书,并通过User自身客户端(浏览器或者其他APP等程序)内含的已信任CA(根证书)列表来做校验,只有证实该Server提供的https证书是已信任CA签发的,https通信才可以继续。

    假设一个买电脑的情景:A要买电脑,A不熟悉,怕被骗,A知道朋友B对电脑这些很熟,所以他找了B,让B帮忙介绍靠谱的商家,于是B就介绍了商家C给A,后面的交易就是A和C之间(好像有点装…的感觉)进行。

    上述A就是User,B就是CA,C就是Server

    证书申请

    申请证书时候,需要给CA机构提供证书签发申请CSR文件(certificate sigining request)。大部分支持https的web服务程序都可以生成CSR文件。步骤如下:

    1. 根据RSA算法生成公钥私钥对。私钥即需要机密保管的以.key为后缀名的文件,公钥则在.csr文件中。csr文件中还包括生成CSR过程中输入的组织名、域名、联系人邮箱等信息。
    2. 发送CSR文件给证书供应商,比如verisign。供应商对CSR文件做处理,设置有效期限等,并做最为关键的动作:用供应商自己的私钥对证书进行签名。这样就生成了一张有效的SSL证书。
    3. 用户收到证书后,在web服务器(或负载均衡等设备)上,以此前的私钥文件和收到的公钥证书为密钥对,生成SSL配置文件,并绑定到对应的web站点上

    也可以让证书供应商直接生成私钥和签过名的证书

    可以自建CA

    原理和抓包分析

    原理

    HTTPS工作原理

    知识点:

    • 前面协商阶段是非对称加密,后面数据通信的是对称加密

    抓包分析

    • 上几个抓包的文件
    • 浏览器查看证书
    • 证书链:证书、中级证书、根证书
    • Record Layer
    • SSL vs TLS

    他山之石

    来到这里,发现我的表达是多么苍白无力

    • 关于启用 HTTPS 的一些经验分享(一)
    • 关于启用 HTTPS 的一些经验分享(二)
    • 大型互联网站点HTTPS实践(三):基于协议和配置的优化

    Nginx配置解析

    # 1m可以处理4000个session
    ssl_session_cache shared:SSL:20m;
    # 缓存
    ssl_session_timeout 10m;
    # 设置HSTS
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    # Online Certificate Status Protocol,在线证书状态协议
    ssl_stapling on
    # openssl dhparam -out /data/conf/nginx/cert/dhparam.pem 2048
    ssl_dhparam /data/conf/nginx/cert/dhparam.pem;

    工具

    命令行

    # 检测远程服务器的证书
    openssl s_client -connect google.com:443 | openssl x509 -text
    nmap --script ssl-enum-ciphers -p 443 www.example.com
    # 快速生成自签名的ssl证书,10年有效期
    openssl req -new -x509 -nodes -out www.example.com.crt -keyout www.example.com.key -days 3650 -subj "/C=CN/ST=Guangdong/L=Guangzhou/O=Microhard/CN=wwww.example.com"
    # 获取证书指纹
    openssl x509 -fingerprint -in xxx.crt

    web工具

    检查网站https的安全性并打分,同时会提供建议

    ssllabs_https_check

    三种解密 HTTPS 流量的方法介绍

    三种解密 HTTPS 流量的方法介绍

    其他

    • DV SSL,证书信息里没有“组织”,或者“组织”显示的是域名
    • OV SSL,OV SSL证书是 Organization Validation SSL 的缩写,指需要验证网站所有单位的真实身份的标准型SSL证书,此类证书也就是正常的SSL证书,不仅能起到网站机密信息加密的作用,而且能向用户证明网站的真实身份。在证书信息里,可以看“组织”部分,显示的是公司名
    • EV SSL,EV SSL证书是Extended Validation SSL的缩写,指遵循全球统一的严格身份验证标准颁发的SSL证书,是目前业界最高安全级别的SSL证书。用户访问部署了EV SSL证书的网站,不仅浏览器地址栏会显示安全锁标志,而且浏览器地址栏会变成绿色。
    • openssl 0.9.8版本,不支持SNI,所以,如果一台机有多个443虚拟主机,则会有问题
    • Android从2.3开始支持SNI
    • 免费证书
      • StartSSL
      • WoSign,国内的公司
      • Let’s Encrypt,3个月有效期,但有人写了个工具自动申请
    • OCSP Stapling
    • 来自Mozilla的指南:Server Side TLS
    • ssl加速卡,可以在淘宝上搜索「silicom ssl」
    • 证书的签名算法,主要是SHA1/SHA2,下面的命令,看「Signature Algorithm」,sha256代表是SHA2,老旧的浏览器会不支持SHA2
    openssl s_client -connect www.example.com:443| openssl x509 -text
    • nginx实现SSL卸载,某些场景中,我们需要保证业务的安全可靠,因此难免需要使用HTTPS加密保护数据,但是除了在公网做SSL加密之外,内网之间的传输加密倒是意义不大,因此nginx的SSL加密负载就可以派上用场了

    常见问题

    证书链不完整

    大部分同学可以打开,但有个同学就打不开,chrome也是最新版,最后发现是证书不完整,缺了个中级根证书

    如果我们用ssllabs检查,它会直接给出提示

    This server's certificate chain is incomplete. Grade capped to B.
    # 证书路径里也有提示
    Extra download

    解决,当然是下载中级根证书添加了,可以去证书供应商,但更方便的方法是直接在测试页面下载,在页面右边,有个下载按钮,可以直接下载完整的证书

    完整Nginx配置参考

    server {
        listen 443 ssl;
    
        ssl_certificate /etc/nginx/cert/bjornjohansen.no.certchain.crt;
        ssl_certificate_key /etc/nginx/cert/bjornjohansen.no.key;
    
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout 60m;
    
        ssl_prefer_server_ciphers on;
    
        ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GC
    M-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:EC
    DHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-
    RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
    
        ssl_dhparam /etc/nginx/cert/dhparam.pem;
    
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;
        # resolver 8.8.8.8 8.8.4.4;
    
        #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
        add_header Strict-Transport-Security "max-age=31536000" always;
    }


沪ICP备19023445号-2号
友情链接