阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 4833阅读
  • 1回复

[解决方案]Nginx 开启 Certificate Transparency 保障证书安全

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 不靠谱贝贝 设置为精华(2017-01-13) —
前言 zA+ ^4/M  
?np` RA  
像米饭这样一个域名签过一坨证书的人恐怕不在少数吧(如下图),然而没有好好保管 crt、key 文件也有的吧,如果被坏人拿去干坏事,就算是有 HTTPS 还是依旧会瞎~ R0m}I5Frs  
举个栗子: T.K$a\/{,  
Ex<-<tY  
kM9E)uT>(<  
DrB=   
解释 5gEUE{S  
*/Y@:Sjf  
j~L{=ojz%  
Certificate Transparency 是什么? 贼烦,一看真的是文言文的赶脚,所以我们这里换个思路看看。 v,2{Vr  
首先,我们的证书是从 CA 那里签出来的,不过
_{ ?1+  
CA 也会有坏银(在 XXX 没有申请的情况下,某 CA 内部不当给 XXX 签了证书) KH[%HN5v  
证书下载方式不完善(证书下载链接应该下载一次后就不能下载,或者说只有十分钟的时效性,但是没有做到这点) .c BJA&/  
CA 被骗了(拿伪造的信息来骗取证书) dc:|)bK M  
拥有高级权限的软件(病毒)签证书后,然后让系统信任。
?(R6}ab>K7  
为了规避这些问题,IETF 在2013年启动了一个叫做Certificate Transparency的开源项目,把所有已知的合法证书做了一个白名单,浏览器在验证证书的时候同时也会去查看这个证书是不是在白名单里面。 如果不在的话,就会告知用户这个证书找不到记录,于是,有可能是假或者是被盗的证书。 A\ LTAp(I  
总之呢,CT 就是为了规避上面的几个“不过”,并让你的 HTTPS 更加安全的一个措施。 KU$.m3A>  
FTk!Mn88  
表现 ;=_KLG <  
.Mm8\].  
]Oe#S"-Oo  
首先呢,截止发文也就只有基于 Chrome 内核的浏览器支持 Certificate Transparency。所以有没有设置 CT 也就只有哪些浏览器才会有表现。 Ai /a y# E  
一、非 EV 证书的 HTTPS,会提供有这么点提示,并不容易察觉,而且这个截图的版本是 Chrome 49 的,到了 50 以上的版本没有设置 CT 的不会有一点提示,就和没有一样: r$0" Y-a  
#n0P'@d,r  
#V~r@,  
二、EV 证书,在 Chrome 浏览器上就会没有高大上的绿色框框了,因为不会有购买了 EV 证书还不开 CT 的网站,所以我举不出栗子。 不过当贵司大价钱买了 EV 证书,结果没出现绿色框框,而你被领导问到的时候,就会尴尬了。 嗯,总之就是会带来一个尴尬加成。 !".@Wg$  
R%b,RH#  
.|_+>){$w  
三、非 EV 证书,设置好了 HTTPS 的样子: P$w0.XZa  
因为米饭粑设置了双证书,所以在两个证书也都设置了 CT。 uTn(fs) D  
非 ECC 证书效果: *<BasP  
>. zk-`>-  
~ZL}j+L/  
ECC 证书效果: zvD$N-#`p  
Imi_}NB+  
r@iGM Jx$  
GyT{p#l  
设置 L,\ Yj  
R$cg\DD  
Cee?%NaTS  
其实呢,CT 目前有三种设置方法:X.509v3 扩展、TLS 扩展 和通 过OCSP Stapling 目前,TLS 扩展是最好方案了,并且任何 CA 签的证书都适用。 DBVe69/S  
8th G-  
Nginx-CT Tb~(?nY5  
+ PGfQN  
5\qoZs*e  
Nginx-CT 模块可以让 Nginx 支持通过 TLS 扩展的方式实现 CT。 hPhN7E03  
注: Nginx-CT 只兼容 BoringSSL 和 OpenSSL 1.0.2 +,不支持 LibreSSL。 推荐 OpenSSL。 +D$\^ <#  
  1. #下载 Nginx-CT
  2. wget https://github.com/grahamedgecombe/nginx-ct/archive/v1.3.2.tar.gz
  3. tar xzf v1.3.2.tar.gz
  4. #下载 OpenSSL 1.1.0
  5. https://www.openssl.org/source/openssl-1.1.0c.tar.gz
  6. tar xzf openssl-1.1.0c.tar.gz
  7. #编译 Nginx,根据原本的参数修改:
  8. ./configure --add-module=/path/to/nginx-ct --with-openssl=/path/to/openssl
.GkH^9THP  
+&Sf$t 1  
获取 SCT !^B`7  
?hsOhUs(5  
`O0v2?/f0  
利用 ct-submit 工具(需要 go 支持),它会讲证书提交给谷歌和几大证书厂商的 CT LOG 服务,并获得一个受 Nginx-ct 和 mod_ssl_ct 支持的 sct 格式。 o;-)84Aa  
:DQHb"(  
k\1q Jr  
  1. #安装 golang
  2. yum install golang -y  // CentOS、RHEL
  3. apt-get install golang -y // Ubuntu、Debian
  4. wget https://github.com/grahamedgecombe/ct-submit/archive/v1.1.2.zip
  5. unzip v1.1.2.zip
  6. cd ct-submit-1.1.2
  7. go build
KxK$Y.y]  
_s<eqCBV  
编译成功后会获得一个 ct-submit-1.1.2 文件,我们就开始提交: v0\2%PC  
我这里是 ECC + RSA 双证书,所以我要申请两个,每个证书我都申请了两个: Q4q3M=0  
  1. ./ct-submit-1.1.2 ct.googleapis.com/rocketeer <mf8.biz.ecc.crt >rocketeer-1.sct
  2. ./ct-submit-1.1.2 ct.googleapis.com/icarus <mf8.biz.ecc.crt >icarus-1.sct
  3. ./ct-submit-1.1.2 ct1.digicert-ct.com/log <www.mf8.biz.crt >digicert-2.sct
  4. ./ct-submit-1.1.2 ct.googleapis.com/pilot <www.mf8.biz.crt >pilot-2.sct
 t\u0\l>  
YVqhX]/   
=f=MtH?0y  
注1: ct.googleapis.com 国内服务器无法访问,需要到境外服务器提交获取到 sct 文件再传到国内。 B9Y "J  
注2: 更多 CT LOG 服务器可以在 这里 看到。 9LzQp`In  
n%W~+  
配置 Cc/?-0a2!  
zVJ wmp^  
5\RKT)%X  
然后就只要在虚拟机的 conf 配置文件中加入: Gl`Yyw@84  
  1. ssl_ct on; #开启 nginx-ct
  2. ssl_ct_static_scts /path/to/scts/; #这里填写 sct 文件的目录路径,而不是文件路径。
9`QWqu[  
RcMW%q$dG  
本帖最近评分记录: 1 条评分 云币 +6
鬼才神兵 云币 +6 您的帖子很精彩!希望很快能再分享您的下一帖! 2017-01-04
级别: 论坛版主
发帖
1784
云币
3327

只看该作者 沙发  发表于: 2017-01-04
您的帖子很精彩!希望很快能再分享您的下一帖!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)