启用 Certificate Transparency 策略

in Tutorials with 12 comments

不作过多介绍,了解更多推荐到https://imququ.com/那,这个···反正我反复看了好几遍···

首先这里有一个坑:阿里ECS是无法连接上ct.googleapis.com,也就是说无法提交pem到Google的服务器而获取获取SCT文件,目前,我的解决方法是用国外的vps提交,然后得到sct再上传到ECS上,然后restart一下Nginx就解决了。

先上效果图

valid.png

本教程,基于阿里云ECS和CentOS 7.x,其他情况未作太多的测试

获取 SCT 文件

安装Go

yum install golang

下载ct-submit和编译它

cd /usr/src
wget https://github.com/grahamedgecombe/ct-submit/archive/v1.0.0.tar.gz
tar -xzvf v1.0.0.tar.gz
cd ct-submit-1.0.0
go build

编译成功后,当前目录会出现名为 ct-submit-1.0.0 的可执行文件,执行提交

提交之前需要串联一下证书,这里需要串联的证书是站点证书和中间证书,不需要根证书。

cat www_linpx_com.crt COMODOECCDomainValidationSecureServerCA.crt COMODOECCAddTrustCA.crt > chained.pem

我是把这个 chained.pem 放到了 /usr/local/nginx/conf/vhost/sslkey/ 这个目录下

然后再新建一个目录 /usr/local/nginx/conf/vhost/sct/ ,用来存放接下来提交后所获取的SCT文件

进入刚刚编译的 ct-submit-1.0.0 目录,执行提交

./ct-submit-1.0.0 ct.googleapis.com/aviator </usr/local/nginx/conf/vhost/sslkey/chained.pem >/usr/local/nginx/conf/vhost/sct/aviator.sct

./ct-submit-1.0.0 ct.googleapis.com/pilot </usr/local/nginx/conf/vhost/sslkey/chained.pem >/usr/local/nginx/conf/vhost/sct/pilot.sct

./ct-submit-1.0.0 ct.googleapis.com/rocketeer </usr/local/nginx/conf/vhost/sslkey/chained.pem >/usr/local/nginx/conf/vhost/sct/rocketeer.sct

./ct-submit-1.0.0 ct1.digicert-ct.com/log </usr/local/nginx/conf/vhost/sslkey/chained.pem >/usr/local/nginx/conf/vhost/sct/digicert.sct

以上代码分别向 Google 和 Digicert 的服务器提交了证书,但Google是提交不了,因为阿里ECS无法连接上Google,需要自己弄一台国外的vps再提交在获取后放到你自己的阿里ECS上。

编译 Nginx,加入 CT 模块

因为之前已经弄过给Nginx上OpenSSL 1.0.2+,可以看这篇文章:https://www.linpx.com/p/nginx-chacha20poly1305-encryption-suite.html 和 这篇文章: https://www.linpx.com/p/the-openssl-chacha20poly1305-cipher-suite.html ,这里不再过多介绍,但加入CT模块需要OpenSSL 1.0.2+的支持

cd /usr/src
wget https://github.com/grahamedgecombe/nginx-ct/archive/v1.2.0.tar.gz
tar -xzvf v1.2.0.tar.gz

然后下载Nginx1.9.12

wget http://nginx.org/download/nginx-1.9.12.tar.gz
tar -xzvf nginx-1.9.12.tar.gz

查看自己的Nginx的configure arguments有哪些,下一步的安装编译需要用到

nginx -V

复制configure arguments的内容,在./configure后面带上你复制的内容,然后别忘了加上--add-module=/usr/src/nginx-ct-1.2.0,然后执行

cd nginx-1.9.12
make clean
./configure --prefix=/usr/local/nginx --user=www --group=www --with-openssl=/usr/src/openssl-1.0.2g --add-module=/usr/src/nginx-ct-1.2.0 --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-ipv6 --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-ld-opt="-ljemalloc"
make && make install

修改配置

假设配置文件是在 /usr/local/nginx/conf/vhost 的目录

vim /usr/local/nginx/conf/vhost/www.linpx.com.conf

在server{}的括号内加入

ssl_ct on;
ssl_ct_static_scts /usr/local/nginx/conf/vhost/sct;

注意:/usr/local/nginx/conf/vhost/sct 替换为你的sct文件的存放目录就可以了

配置完后请记得重启Nginx!

systemctl restart nginx

Ok,至此,给HTTPS证书启用Certificate Transparency策略算是完成了,接下来就开始前端知识的复习和数据结构的内容了。希望大家多多关注我的博客,也希望你们能从我的博客学到东西,另外转载记得带上处处,谢谢。

Responses
  1. 禅猫

    大兄弟,我发现一个可以生成证书链的工具,
    https://whatsmychaincert.com

    Reply
    1. @禅猫

      证书链一个cat命令就可以搞定了。

      Reply
  2. 禅猫

    我去。你这底部Front-EnoC 一直乱动。。吓的我瓜子都掉了

    Reply
  3. 在这里我有更正一下,不是阿里云屏蔽谷歌的,是万恶的GFW屏蔽了谷歌所有IP段。

    Reply
    1. @lony

      OK,重新编辑了,谢谢你指正文章的问题!

      Reply
  4. 11

    不错

    Reply
  5. 其实SCT可以使用这个来在线提交的,也建议使用网页提交的方式进行提交
    https://ct-status.org/submit

    Reply
    1. 禅猫
      @Bismarck

      打不开了已经

      Reply
    2. @Bismarck

      其实早在弄CT的时候,也知道大概有这么一个链接,但就是一直没找到这个链接,···所以就兜了一圈去解决问题······

      Reply
    3. @Bismarck

      你咋不早说,嘿嘿嘿 :P

      Reply
      1. @Chakhsu Lau

        我想说的是,用网页提交的方式,这样能减少好多折腾国外VPS的时间。用自己的VPS还要慢慢安装go之类的,太麻烦了。而且还不能批量提交,23333333

        Reply
        1. @Bismarck

          没事,折腾一下也是挺好的。https://ct-status.org/ 确实方便。

          Reply