前景:

概述 

SHA-1在许多安全协议中广泛使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec。在2005年,密码学家就证明SHA-1的破解速度比预期提高了2000倍,虽然破解仍然是极其困难和昂贵的,但随着计算机变得越来越快和越来越廉价,SHA-1算法的安全性也逐年降低,已被密码学家严重质疑,希望由安全强度更高的SHA-2替代它。

 

各浏览器的响应

微软第一个宣布了SHA-1弃用计划,对于SSL证书和代码签名证书,微软设定了不同的替换时间表:

1、所有Windows受信任的根证书颁发机构(CA)从2016年1月1日起必须停止签发新的SHA-1签名算法SSL证书和代码签名证书;

2、对于SSL证书,Windows将于2017年1月1日起停止支持SHA1证书。也就是说:任何在之前签发的SHA-1证书必须替换成SHA-2证书;

3、对于代码签名证书,Windows将于2016年1月1日停止接受没有时间戳的SHA-1签名的代码和SHA-1证书。也就是说,Windows仍然接受在2016年1月1日之前使用SAH-1签名的已经加上RFC3161时间戳的代码,直到微软认为有可能出现SHA-1攻击时。

 

Google官方博客宣布,将在Chrome浏览器中逐渐降低SHA-1证书的安全指示,逐步停止对使用SHA-1散列算法证书的支持。近日,Chrome 39新版本 PC 端发布,在部分操作系统下,该版本浏览器中已开始出现“该网站使用的安全设置已过期” 提示,在接下来的6个月内会变得越来越严格。最终,使用了有效期至2016年的SHA-1证书的站点可能会被给予黄色警告。

 

Mozilla也做了同样的决定,在其对外公布近期更新计划中表示:“……现在依然有不少网站使用基于 SHA-1签名的 SSL 证书,所以我们决定加入微软和谷歌的阵营,认为应在 2016 年 1 月 1 日前停止发放 SHA-1 证书,在 2017 年 1 月1 日后不再信任此证书。” 

 

Opera 表示支持谷歌的计划。Safari团队正在观望并未表态。

 

 

 

现状:

         赛门铁克的对sha2证书的策略

         赛门铁克开始从2014年冬季开始,默认签发sha2算法的证书,直至2015年年底不再签发任何一张sha1的证书,这样保证新签发的证书在2017年前都是sha2的证书。详细可见http://www.symantec.com/zh/cn/page.jsp?id=sha2-transition

        

         Sha1与sha2并存的年代

         可以说是现在到2017年,是一个sha1和sha2并存的年代。

 

 

问题

         sha2的兼容性

         sha1淘汰让很多设备猝不及防,较早时期的设备支持率更是低的可怕。这里可以查看sha2的兼容性。https://www.trustasia.com/faq/sha2-Compatibility.htm

        

带来的影响

服务器不支持的话,还可以通过升级或者更新设备来支持sha2,浏览器这边无法要求每个终端用户去升级他们的浏览器或者他们的系统,所以对于一些大型网站,不得不从用户量的角度来权衡,求安全性较高的sha2证书,亦或是兼容性更广的sha1证书。

 

 

解决方案

         解决目标

         为大用户网站提升兼容性(保证用户量),又不失安全性(能使用sha2的用户使用sha2证书,不能使用的才选择sha1)。

 

基于SNI来解决

SNI,Server Name Indication,服务器名称指示是TLS协议的扩展,用于指示和哪些主机名服务端来握手连接。这使得一台服务器上相同的IP地址和端口允许使用多张证书,从而允许多个安全的站点(https站点)在相同的IP地址上,不需要使用相同的SSL证书。这相当于允许虚拟主机用于https.详细可以见http://baike.baidu.com/link?url=JitcRJ8bujMK56ypAbQJW_Kg_AVDkoxo0zrqjLJDFGyWHYjSAP0IExBqX1Vxco9GVEIZSygVHrSLRUspzGiQDq

我们可以把不支持SNI的用户指向默认的sha1虚拟主机(通常不支持SNI的也不支持sha2),把支持SNI的指向带主机名的虚拟主机。

        

        

实例

         Nginx上的部署

        

配置两个虚拟主机,一个默认server_name为default,此站点配置sha1的,另一个则是server_name为证书对应的域名,此站点配置sha2的

 

Apache上实例

  1. 开启443 的多名称支持,到httpd.conf里配置NameVirtualHost:443

 

  1. 创建sha1的443虚拟主机和sha2用的443虚拟主机

分别配置为


ServerName default

 


ServerName www.trustasia.com

    

 

实际效果:

在不支持SNI的xp的IE6上,访问是sha1证书

在支持SNI的chrome下,获取的是sha2证书。