前言
谷歌提议将证书有效期缩短到13个月,被其他CA和浏览器厂商无情拒绝,但缩短有效期是人心所向
于是,CAB Forum第193号投票确定最长SSL证书有效期由原来的3年(39个月)改为2年(825天)
问题描述
这一个项目是物联网相关的,有app和硬件设备两种类型的client
因历史原来,两种client用的是一个域名,都使用了ssl证书
证书有效期可能很长,但最近到期了
因为设备没办法强制升级,一是设备可能没联网,二是有些设备还没销售出去,三是设备没有用ca对证书校验
于是解决方案是,app强制升级,升级后使用新域名,新证书
但到了域名过期那天,才发现这么一个问题:
1 2
| 之前宣传部门印制了许多二维码,用的是原来老域名 所以这些二维码现在不可用了
|
当然,以后二维码使用专门的短域名、app和设备域名不应该用同一个……
未来如何做是另一码事,现在要想如何解决问题
要想达到的结果是:
举例说明:
1 2 3
| 1.如有一个域名www.abc.com,给硬件设备用,也给app用 2.最近域名证书过期了,要换证书,但硬件设备没法保证用户升级,于是让app强制升级启用新域名 3.但有一批二维码,已经发出去了,请求地址为: www.abc.com/a/b/c
|
现在想有没有方法,让:
1 2
| 1.www.abc.com/a/b/c 使用新证书,或不用证书,只要在浏览器中打开就行 2.www.abc.com其他地址使用老证书,保证设备的可用
|
问题解决方案
方案1:双证书方案
原理:
1 2 3 4 5 6 7 8 9 10 11
| Nginx支持ECC、RSA双证书. ECC签个最新的,保障较新设备能够正常访问 RSA依旧保留过期的旧证书,给未更新的设备访问
1.设备使用的一般是乐鑫ESP8266或庆科EMW3162的板子实现ssl 而这些板子下的ssl库一般都不支持ECC 2. 除非很古老的浏览器,其他都支持ECC
所以使用Nginx判断: 如果支持ECC则使用新的ECC证书 如果不支持ECC则使用老的RSA证书
|
说明:
Windows XP 中,使用 ECC 证书的网站时需要浏览器自行 TLS
Android 平台中,也需要 Android 4+ 才支持 ECC 证书
如果此方案能生效,可以保证:
1.所有的请求都可以完美成功
2.甚至都不需要更换域名
方案2:使用openResty
原理:
1 2 3 4 5 6
| 1.所有的设备请求第1次失败后会再次请求 2.证书错误时,请求快速失败
所以在openResty中做一个k/v表 第一次请求给他返回新证书,并以ip为key插入一条数据,5秒失效 第二次请求过来,一查k/v表,有数据,返回老证书
|
说明:
此方案会有一定误杀的情况
结论
我们的设备中有一部分用带有OS的系统,是支持ECC的
这些设备对我们来说是很重要的,所以最后我们采用了方案2
双证书的一些简单操作
生成证书:
1 2 3 4 5
| openssl ecparam -genkey -name prime256v1 -out 证书名.key openssl req -new -key 证书名.key -nodes -out 证书名.csr 例: openssl ecparam -genkey -name prime256v1 -out www.zhaoweiguo.com.key openssl req -new -sha256 -key www.zhaoweiguo.com.key -nodes -out www.zhaoweiguo.com.csr
|
Nginx配置双证书rsa+ecc:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
server{ listen 443 ssl; server_name www.zhaoweiguo.com; root /var/www/zhaoweiguo.com/www.zhaoweiguo.com; index index.php index.html;
ssl_certificate /home/wei64/www.zhaoweiguo.com.crt; ssl_certificate_key /home/wei64/nginx/ca/www.zhaoweiguo.com.key;
ssl_certificate /home/wei64/nginx/ca/www.zhaoweiguo.com.ecc.crt; ssl_certificate_key /home/wei64/nginx/ca/www.zhaoweiguo.com.ecc.key;
ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES"; }
|