NGINX简单配置 让SHA256证书支持XP SP1/SP2

SHA256 support IE6/7

因为技术更新迭代的原因, XP的电脑上的IE6/IE7不支持sha256签名算法. 而XP用户在国内尚有约10%的市场占有率, 我们应该怎样才能让我们的网站https业务支持到XP呢?

原理

在介绍方法之前, 给大家介绍下另外一个概念: SNI(https://en.wikipedia.org/wiki/ServerNameIndication): 是用于让单个IP支持多个SSL证书配置的TLS协议扩展. 原理就是浏览器在TCP握手时将域名哈希信息和随机种子一起发送给服务器, 服务器根据域名去配置中寻找不同的SSL配置实现同IP多证书.
SNI并不是所有浏览器都支持的. SNI是05年以后陆续被各大系统和浏览器厂商加入到特性中的. 主流操作系统及浏览器市场兼容性如下:

浏览器 特性(SNI 支持)
IE 7+ (Windows Vista+), (Windows XP/03及更早系统上任何版本IE浏览器均不支持SNI).
Firefox 2.0+
Opera 8.0+
Opera Mobile 10.1+ (Android)
Chrome 6+ (XP)
Chrome 5.0.342.1+ (OS X)
Safari 3.0+ (Mac OS X 10.5.6+, Windows Vista+)
Safari (iOS 4.0+)
Android 默认浏览器 (Android 3.0+)
BlackBerry 默认浏览器 (BlackBerry 10+)
Windows Phone 7+

可以看出, 已流行起来的现在代浏览器(Firefox, Chrome, Safari和Android/iOS浏览器)均早已支持SNI, 而XP上的IE6/IE7不支持SNI, IE6/IE7不认SHA256证书只认SHA1证书, 而且不会对SHA1证书出任何警告. 那么我们就可以用是否支持SNI来认定浏览器是否支持SHA256. 默认给SHA1证书, 支持SNI时给SHA256证书就行了.

我们正好可以利用SNI的此特性, 对支持SNI的现代化浏览器/系统提供SHA256以支持更安全的加密通信, 对不支持SNI的浏览器做SHA1证书以向下兼容. 即可达到SHA256+SHA1证书实现100%的浏览器市场占有率.

成本

你需要多申请一份sha1算法的证书. 推荐使用WoSign提供的免费SSL证书. 申请时一定选择英文+sha1的.

开始干

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
http{
...
server {
server_name xxx; #这儿不能写我网站的域名, 也就是www.it68.com.cn, 原因请自己想象
listen 443 ssl;
ssl on;
ssl_certificate /home/ssl/it68_sha1.crt;
ssl_certificate_key /home/ssl/it68_sha1.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; #IE6只支持SSLv3, 若要用此方式必需启用...
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
...
}
}
server {
server_name *.it68.com.cn;
listen 443 ssl spdy;
ssl on;
ssl_certificate /home/ssl/it68_sha256.crt;
ssl_certificate_key /home/ssl/it68_sha256.pem;
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;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
spdy_headers_comp 9;
location / {
...
}
}
}

运行效果

IE6/IE7
ie

现代浏览器
new

后话

如果您不懂技术又想占有更全的浏览器市场, 欢迎联系我帮您配置, 收费100元/台服务器. 微信: xiaohuilam1992.