美文网首页
https部署的成本

https部署的成本

作者: hanpfei | 来源:发表于2018-06-19 13:51 被阅读93次

经济成本

  • 购买证书(对安全性要求不高时,也可以申请免费的证书)
  • 部署HTTPS之后,计算资源,包括内存、CPU、网络带宽的消耗都会更大,在相关硬件设备上需要更多投入。加解密比较耗cpu,大站一般都会有专门的服务器完成加解密工作,https请求经过ssl卸载到应用服务器就只是http请求了。有专用的SSL解密卡。

技术方面的成本

  • 服务器的配置与优化
  • HTTPS给资源的CDN缓存带来了障碍。完全符合SSL要求的页面资源没法像HTTP的那样很方便地做资源分布式缓冲。
  • 加密方法的兼容性,老式的平台对一些有用的特性支持不够好。如Windows XP不支持SNI,使得一个IP上只能部署一个证书,一个HTTPS Web server。一些旧平台对加密套件支持不够好。

访问性能

  • 流程上,TLS初次连接握手阶段需要在TCP三次握手一个RTT的基础上增加两个RTT。会话恢复的连接握手需要额外增加一个RTT,增加延时。
  • 证书验证时,非对称加密相关运算需要消耗比较多的CPU资源。
  • 证书验证时,可能需要访问CA的网站,访问CRL或OCSP检查证书的状态,这需要额外的延时。
  • 密钥交换过程中的非对称加密相关运算需要消耗比较多的CPU资源。
  • 数据交换过程中,对数据的对称加密/解密需要消耗计算资源,带来额外的性能负担。
  • 数据交换过程中,为了数据完整性校验,需额外携带MAC,会更多地占用带宽资源。
    https访问,对服务器资源消耗最厉害的是SSL连接握手阶段的非对称解密(目前主要是RSA)对CPU的消耗。并且现在新申请的证书只颁发RSA2048 bit证书,在同等硬件条件下,2048bit https比http并发性能要弱5-10倍,甚至更多。

为nginx做如下的cipher suites配置,可以用浏览器访问http2资源:

                # https://github.com/cloudflare/sslconfig/blob/master/conf
                ssl_ciphers                EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
                ssl_prefer_server_ciphers  on;

对上面的cipher suites配置做一点点改动:

                # https://github.com/cloudflare/sslconfig/blob/master/conf
                ssl_ciphers                EECDH+CHACHA20:EECDH+CHACHA20-draft:RSA+AES128:EECDH+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
                ssl_prefer_server_ciphers  on;

仅有的改动是对调了RSA+AES128EECDH+AES128的位置。再次通过浏览器访问http2资源是会报出如下图所示的错误:

cipher_suite_config_error_for_http2.png

仔细看的话,可以看到ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY

这是由于在TLS协商阶段,服务器优先选择了RSA+AES128加密套件,而这个加密套件在HTTP/2的加密套件黑名单中。

然而,使用curl访问资源则并没有这样的限制:

curl --http2 -v https://www.wolfcstech.com/

curl的http2实现似乎并没有估计规范中定义的加密套件黑名单。

来看看上述配置指定的 CipherSuite 具体有哪些(注:以下命令中的 openssl 版本是 OpenSSL 1.0.2g):

$ openssl ciphers -V 'EECDH+CHACHA20:EECDH+CHACHA20-draft:RSA+AES128:EECDH+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5'
          0x00,0x9C - AES128-GCM-SHA256       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(128) Mac=AEAD
          0x00,0x3C - AES128-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA256
          0x00,0x2F - AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
          0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
          0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
          0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
          0xC0,0x23 - ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
          0xC0,0x13 - ECDHE-RSA-AES128-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
          0xC0,0x09 - ECDHE-ECDSA-AES128-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
          0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
          0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
          0xC0,0x28 - ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
          0xC0,0x24 - ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
          0xC0,0x14 - ECDHE-RSA-AES256-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
          0xC0,0x0A - ECDHE-ECDSA-AES256-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
          0x00,0x9D - AES256-GCM-SHA384       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(256) Mac=AEAD
          0x00,0x3D - AES256-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA256
          0x00,0x35 - AES256-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA1
          0xC0,0x12 - ECDHE-RSA-DES-CBC3-SHA  SSLv3 Kx=ECDH     Au=RSA  Enc=3DES(168) Mac=SHA1
          0xC0,0x08 - ECDHE-ECDSA-DES-CBC3-SHA SSLv3 Kx=ECDH     Au=ECDSA Enc=3DES(168) Mac=SHA1
          0x00,0x0A - DES-CBC3-SHA            SSLv3 Kx=RSA      Au=RSA  Enc=3DES(168) Mac=SHA1

再通过 Wireshark 获得 Chrome 在 Client Hello 中发送的 CipherSuite 列表,如下:

client_cipher_list.png

也就是如下这些:

Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
Cipher Suite: Unknown (0xcca9)
Cipher Suite: Unknown (0xcca8)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (0xcc14)
Cipher Suite: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcc13)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
Cipher Suite: TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)
Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)
密码套件名称构成

参考文档:

Stackoverflow.com: the road to SSL

Everything you need to know about cryptography in 1 hour

Is TLS Fast Yet?

Is TLS Fast Yet?

Security/Server Side TLS

HTTPS 要比 HTTP 多用多少服务器资源?

为什么更安全的 HTTPS 协议没有在互联网上全面采用?

大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响

配置HTTPS服务器

相关文章

  • https部署的成本

    经济成本 购买证书(对安全性要求不高时,也可以申请免费的证书) 部署HTTPS之后,计算资源,包括内存、CPU、网...

  • https部署

    对于https部署那是不难,但是我从网上搜索,配置,结果都是出现不行的情况,下面我在这总结几点,让以后部署恩人能少...

  • HTTPS部署

    前言 考虑到HTTP的安全性问题,现在很多网站已经将HTTP升级到了HTTP + SSL(HTTPS)。但也并不是...

  • Serverless

    serverless 1、可以降低服务器部署成本和部署复杂度; 2、可以降低中长尾应用的运营成本; Serverf...

  • Django部署https

    Django版本小于1.8 + Nginx对于我们这种新手,刚入手就要部署https,刚开始是有点闷,后面查资料和...

  • Django部署HTTPS

    原文地址:https://blogof33.com/post/10/ 前言 Chrome 新版本已经会自动跳转 H...

  • nginx部署https

    目前很多web应用都有https的需求,或者作为小程序的服务端,也必须使用https,接下来以nginx为例,讲解...

  • 部署https网站

    一、环境准备 安装nginx程序时,需要开启ssl模块功能() --with-http_ssl_module 二、...

  • Docker基础

    一、软件部署的发展 1.1 直接部署 在物理服务器上直接安装系统,部署应用缺点 部署慢 成本高 资源浪费 可移植...

  • cdh5.15.1离线搭建说明

    由于使用apache hadoop进行部署,部署步骤繁多,管理运维成本较高,于是使用Cloudera Mana...

网友评论

      本文标题:https部署的成本

      本文链接:https://www.haomeiwen.com/subject/jeqlpttx.html