传统的 SSL 认证身份的过程可能存在着受信任 CA 错误或某些不负责任行为、抑或是自身域名被别人冒充申请颁发证书的潜在危险,这是 SSL 认证环节中容易被利用的一环。由 Google 主导的 Certificate Transparency (CT)希望解决这些问题。任何证书持有人、CA 都可以向 CT 服务器提交证书,并接受审计和监控,使得当前的 CA 能够更加安全公开和透明。
启用 Certificate Transparency 与否的不同
如果 HTTPS 网站没有部署 Certificate Transparency,会有什么不同呢?
首先,Google Chrome 浏览器取消了对没有 CT 记录 Extended Validation(EV)证书绿条(Green Address bar)的显示。
其次,如果你有 iOS 开发的需要,你会了解到 iOS 9 新增了一个叫做 App Transport Security (ATS)的特性,开始默认强制所有请求为 HTTPS 请求。如果你的网站不支持Certificate Transparency,那么将不能通过 NSRequiresCertificateTransparency 的情况。
除此之外,对于大多数中小型网站 CT 的启用与否,还没有太大的区别。在 Chrome 上点击证书绿锁可以看到,未启用 CT 的网站和启用 CT 的网站存在着下面这一句话的细微区别。
Nginx 下为 SSL 站点启用 Certificate Transparency
一般地,要启用 CT,一般有 X.509v3 extension、TLS extension、Online Certificate Status Protocol (OCSP) 三种方法。下面介绍支持支持所有证书的 TLS 扩展方法。
获得 ct-submit 提交程序
首先需要获得用于提交证书的 ct-submit。
它的编译亦需要 Go 语言。
cd ~
apt-get install golang
wget https://github.com/grahamedgecombe/ct-submit/archive/v1.0.0.zip
mv v1.0.0.zip ct-submit.zip
unzip ct-submit.zip
cd ct-submit-1.0.0
go build
在这个文件夹下,向任意的 CT 服务器提交你的证书。
./ct-submit-1.0.0 ct.googleapis.com/aviator < /etc/nginx/ssl/server.pem > ./google-aviator.sct
./ct-submit-1.0.0 ct1.digicert-ct.com/log < /etc/nginx/ssl/server.pem > ./digicert-ct.sct
这里的 /etc/nginx/ssl/server.pem 是你的网站证书,它的名字也有可能是 server.crt。如果提交错误,将会显示错误。
现在把这些证书移动到统一的地方管理。
sudo mv ./google-aviator.sct /etc/nginx/ssl/scts/
sudo mv ./digicert-ct /etc/nginx/ssl/scts/
获取 CT 模块、OpenSSL 模块
Nginx-CT 需要与 OpenSSL 1.0.2 以上的版本。下面使用 CloudFlare Patch OpenSSL。
cd ~
git clone https://github.com/cloudflare/sslconfig
wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2g.zip
unzip OpenSSL_1_0_2g.zip
mv openssl-OpenSSL_1_0_2g/ openssl
cd openssl
patch -p1 < ../sslconfig/patches/openssl__chacha20_poly1305_draft_and_rfc_ossl102g.patch
欲使 Nginx 支持 CT,还需要在它编译之时加入这个模块。
cd~
wget -O nginx-ct.zip -c https://github.com/grahamedgecombe/nginx-ct/archive/v1.0.0.zip
unzip nginx-ct.zip
无缝升级当前的 Nginx
我们需要为现行的 Nginx 加入新的 CT 模块。如果你没有安装 Nginx,请先按照这里的方法安装。
首先运行
nginx -V
并拷贝得到的现行的安装参数。下面编译 Nginx。
cd ~
wget -c http://nginx.org/download/nginx-1.9.12.tar.gz
tar zxf nginx-1.9.12.tar.gz
cd nginx-1.9.12/
./configure 粘贴既有安装参数 --add-module=../nginx-ct-1.0.0 --with-openssl=../openssl --with-http_v2_module --with-http_ssl_modulemake
完成之后,我们就可以无缝升级 nginx 了。
先来看看它在哪里。
which nginx
例如 nginx 被安装在 /usr/sbin/nginx。
sudo service nginx stop
mv /usr/sbin/nginx /usr/sbin/nginx.old
cp objs/nginx /usr/sbin/nginx
让我们测试一下 Nginx 是否可用。
sudo nginx -t
如果成功,则升级完成了。
现在就可以重启 Nginx 程序。
sudo service nginx start
加入 Certificate Transparency 规则
要使 CT 生效,还需要修改对应的 server.conf 里的参数。
server{
...
ssl_ct on;
ssl_ct_static_scts /etc/nginx/ssl/scts;
...
}
修改完成之后,重载 Nginx 配置。
sudo nginx -s reload
如果不出意外的话,刷新网站,现在网站就会提示已经提供有效 Certificate Transparency。
最新评论