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

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

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 不靠谱贝贝 设置为精华(2017-01-13) —
前言 ?n+\T'f!  
F{+`F<r  
像米饭这样一个域名签过一坨证书的人恐怕不在少数吧(如下图),然而没有好好保管 crt、key 文件也有的吧,如果被坏人拿去干坏事,就算是有 HTTPS 还是依旧会瞎~ z~5'p(|@f  
举个栗子: A~>=l=  
cOgtBEhn  
/{va<CL  
19t*THgq  
解释 QMY4%uyY!  
`y#C%9#  
y^rg%RV  
Certificate Transparency 是什么? 贼烦,一看真的是文言文的赶脚,所以我们这里换个思路看看。 "LWuN>   
首先,我们的证书是从 CA 那里签出来的,不过
yw<xv-Q=i  
CA 也会有坏银(在 XXX 没有申请的情况下,某 CA 内部不当给 XXX 签了证书) R2s>;V.:  
证书下载方式不完善(证书下载链接应该下载一次后就不能下载,或者说只有十分钟的时效性,但是没有做到这点) n}?G!ySg  
CA 被骗了(拿伪造的信息来骗取证书) y<b0z\  
拥有高级权限的软件(病毒)签证书后,然后让系统信任。
+bn w,B><  
为了规避这些问题,IETF 在2013年启动了一个叫做Certificate Transparency的开源项目,把所有已知的合法证书做了一个白名单,浏览器在验证证书的时候同时也会去查看这个证书是不是在白名单里面。 如果不在的话,就会告知用户这个证书找不到记录,于是,有可能是假或者是被盗的证书。 ' ^^K#f8  
总之呢,CT 就是为了规避上面的几个“不过”,并让你的 HTTPS 更加安全的一个措施。 pAuwSn#i  
F! e`i-xt  
表现 ,gc#N  
#VE$C3<  
"-?Y UY`  
首先呢,截止发文也就只有基于 Chrome 内核的浏览器支持 Certificate Transparency。所以有没有设置 CT 也就只有哪些浏览器才会有表现。 gEsR-A!m  
一、非 EV 证书的 HTTPS,会提供有这么点提示,并不容易察觉,而且这个截图的版本是 Chrome 49 的,到了 50 以上的版本没有设置 CT 的不会有一点提示,就和没有一样: $ZO<8|bW  
B vc=gW  
Qknc.Z}  
二、EV 证书,在 Chrome 浏览器上就会没有高大上的绿色框框了,因为不会有购买了 EV 证书还不开 CT 的网站,所以我举不出栗子。 不过当贵司大价钱买了 EV 证书,结果没出现绿色框框,而你被领导问到的时候,就会尴尬了。 嗯,总之就是会带来一个尴尬加成。 Z B&Uhi  
v!xrUyN~m  
rg}kxvu  
三、非 EV 证书,设置好了 HTTPS 的样子: :nUsC+oBS  
因为米饭粑设置了双证书,所以在两个证书也都设置了 CT。 9A(K_d-!H  
非 ECC 证书效果: I+t38 un%  
C>dJ:.K%H  
s= fKAxH  
ECC 证书效果: 2v1&%x:y#  
:<8V2  
o7XRa]O  
MA# !<b('  
设置 dRa<,@1"  
J*X.0&Toc  
s.)w A`&&  
其实呢,CT 目前有三种设置方法:X.509v3 扩展、TLS 扩展 和通 过OCSP Stapling 目前,TLS 扩展是最好方案了,并且任何 CA 签的证书都适用。 qXGLv4c`Q  
m0\}Cc  
Nginx-CT MToQ8qKs  
*8H;KGe=  
KB*=a   
Nginx-CT 模块可以让 Nginx 支持通过 TLS 扩展的方式实现 CT。 *+4iBpyiB  
注: Nginx-CT 只兼容 BoringSSL 和 OpenSSL 1.0.2 +,不支持 LibreSSL。 推荐 OpenSSL。 0\nhg5]?  
  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
)#~fS28j  
i bs "Iv34  
获取 SCT K0=E4>z,`q  
SfSEA^@|  
<# r.}T.l  
利用 ct-submit 工具(需要 go 支持),它会讲证书提交给谷歌和几大证书厂商的 CT LOG 服务,并获得一个受 Nginx-ct 和 mod_ssl_ct 支持的 sct 格式。 r~_ /Jj  
`f+g A  
=e-aZ0P  
  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
6XK`=ss?  
p Y>-N  
编译成功后会获得一个 ct-submit-1.1.2 文件,我们就开始提交: 6_K#,_oZ  
我这里是 ECC + RSA 双证书,所以我要申请两个,每个证书我都申请了两个: VhIIW"1  
  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
,<r3Z$G  
.r%|RWs6W  
|0R%!v(,  
注1: ct.googleapis.com 国内服务器无法访问,需要到境外服务器提交获取到 sct 文件再传到国内。 KqUSTR1e[  
注2: 更多 CT LOG 服务器可以在 这里 看到。 6ilC#yyp  
&\` a5[  
配置 ||ZufFO  
Rn_W|"  
LNxE-Dp  
然后就只要在虚拟机的 conf 配置文件中加入: L8xprHgL  
  1. ssl_ct on; #开启 nginx-ct
  2. ssl_ct_static_scts /path/to/scts/; #这里填写 sct 文件的目录路径,而不是文件路径。
MGyB8(  
B%:9P  
本帖最近评分记录: 1 条评分 云币 +6
鬼才神兵 云币 +6 您的帖子很精彩!希望很快能再分享您的下一帖! 2017-01-04
级别: 论坛版主
发帖
1784
云币
3327

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

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 16 + 3 = ?
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)