HTTPS与SSL证书

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,也被称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种网路安全传输协议。在计算机网路上,HTTPS经由超文本传输协议进行通讯,但利用SSL/TLS来对封包进行加密。HTTPS开发的主要目的,是提供对网路伺服器的身份认证,保护交换资料的隐私与完整性。——维基百科

通过百科的介绍我们知道想要启用HTTPS就必须用到SSL证书,而SSL证书需要向CA机构申请。在过去,SSL证书的价格往往比较昂贵,如果选择廉价的证书又无法续期,这令许多站长十分头疼。幸运的是,为了推进HTTP向HTTPS过渡,Mozilla, Cisco, Akamai等厂商发起了Let's Encrypt CA项目,向网站自动签发和管理免费的证书。

HTTP/2与HTTPS

HTTP 2.0 即超文本传输协议2.0,是下一代HTTP协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (HTTPBis)工作小组进行开发。是自1999年HTTP/1.1发布后的首个更新。它从谷歌力推的SPDY演变而来,目前Nginx,Apache已全面支持HTTP/2。

虽然HTTP/2本身支持非加密通道传输,但是目前主流浏览器支持较少,所以仍然推荐部署加密即HTTPS。

在HTTP/1.1时代,HTTPS由于其需要加密的原因,网站的访问速度会受到影响,现在,由于HTTP/2具有的优势,这将不再成为网站启用更安全的HTTPS的阻碍。

HTTP/2比HTTP/1.1高在哪里

  1. 每个服务器只用一个连接。HTTP/2对每个服务器只使用一个连接,而不是每个文件一个连接。这样,就省掉了多次建立连接的时间,这个时间对TLS尤其明显,因为TLS连接费时间。
  2. 加速TLS交付。HTTP/2只需一次耗时的TLS握手,并且通过一个连接上的多路利用实现最佳性能。HTTP/2还会压缩首部数据,省掉HTTP/1.1时代所需的一些优化工作,比如拼接文件,从而提高缓存利用率。
  3. 简化Web应用。使用HTTP/2可以让Web开发者省很多事,因为不用再做那些针对HTTP/1.1的优化工作了。适合内容混杂的页面。HTTP/2特别适合混合了HTML、CSS、JavaScript、图片和有限多媒体的传统页面。浏览器可以优先安排那些重要的文件请求,让页面的关键部分先出现,快出现。
  4. 更安全。通过减少TLS的性能损失,可以让更多应用使用TLS,从而让用户信息更安全。

微小的工作

本文所有操作基于Nginx完成,Apache或其他httpd服务请自行查阅教程。

准备篇

  • Nginx 版本1.9.5及以上,编译参数应含有--with-http_v2_module和--with-http_ssl_module(可通过nginx -V查看)
  • OpenSSL 版本1.0.2及以上,因为要启用ALPN,而OpenSSL从1.0.2起支持ALPN
  • 如果你已安装Nginx但OpenSSL版本过低,需要下载OpenSSL新版源码并在Nginx的编译参数中指定--with-openssl=OpenSSL源码目录
  • git环境

申请证书

执行以下命令(需要先停止Nginx):

!!!bash

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly --standalone

填写需要使用HTTPS的所有域名,以英文逗号或空格分割。
QQ截图20160817115651.jpg
输出的信息中含有证书路径和过期日期,记下路径,马上要用到。

配置HTTPS和HTTP/2

!!!nginx
listen 443 ssl http2 fastopen=3 reuseport;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4';
  1. 打开你的虚拟主机配置文件,添加或修改以上配置;
  2. 保存并重启Nginx;
  3. 使用HTTPS访问你的站点;
  4. 在Chrome中打开chrome://net-internals/#http2,列表中如果有你的站点,说明HTTP/2已启用。

尾巴

                                                                                     
                                                                                     
                                                                                     
                                                                                     
                                                                                     
                                                                                     
                                                                                     
                    ....,..                                                          
             ,2356788888887776431.                                                   
         .25789999876667899999999863,                 .,123444544431,.               
       ,4899899731.     .13689888899861           ,2467899999999999988652,           
     ,589888972             169888888996,      ,3689999987766776678899999874.        
    289888896.                389888888983   15899986432,.        .,1478989981       
   299888888,                  18888888898.,5998874.                   17988981      
  1888888894                    298888895.28988887                      ,798897,     
  5988888882                     6988894 4998888885                      ,788892     
 .7888888882                     188894 49888888897.                      598892     
 ,8888888894                     .7897 398888888895...                    488881     
 .7888888896                      5981.888888888888865443,.    ...,,,,.,. 39897.     
  59888888893                     496 398888888888884,111,24,,565421,..,2469982      
  ,89888888881                    395 69888888888888865465489965876541.  18786       
   189888888883                   494 6988888888884,,   .698136...       .6.,2       
    ,699888888972.           ..   594 698888888871      .794  35         13          
      168998888998531,,.,,13574  .796 3988888888873111137892   143111,1111           
        ,368899999999999998741   1888,.898888888883,,,38989851231232211,.            
           .,2344555544321.      59896 39888888888731,46566651,,.   .,             2.
                                1888894 5988888888899993             ..          .42 
                                69888894.598888888889888665541,,11,             163  
                               4988888991 3898888888688963211,,,..            ,571   
                              3988888982   ,6998888812872,.                 ,574.    
                             388888897,      15899888254                .,3674.      
                            388888984.         ,36899978741 ..   .1244357762.        
                           598888971              ,2468899988887789887641.           
                         ,79888973                    .,123444444321.                
                        38988984.                                                    
                      27989973.                                                      
                    16999962.                                                        
                  26999741                                                           
               .3799852.                                                             
            .2699741.                                                                
           ,7863,                                                                    
            .