目录

    1. SSL证书

    先来了解几个概念

    1.1 数字证书

    包含加密用的公钥或私钥,还有一些身份附加信息。任何人都可以使用相关工具生成自己的数字证书,用来加密文件、邮件,或用于通讯加密。

    1.2 SSL 协议

    用于网络通讯的加密协议。通信过程需要一份数字证书,使用里面的公钥及私钥来发送随机生成的通信秘钥。在握手完成后,SSL证书并不用于通信内容的加密。

    1.3 CA 证书

    CA(Certification Authority),它的中文意思是证书授权,是一个单位,来管理发放数字证书。由它发放的证书就叫CA证书,以区别于个人使用工具随意生成的数字证书,查看CA 证书,里面有两项重要内容,一个是颂发给谁,另一个是由谁颂发的。CA证书分为3类,DV 域名验证证书,OV 组织机构验证证书,EV 增强的组织机构验证证书。一般个人使用DV证书完全够了,浏览器表现为地址栏前会有绿色的小锁。

    1.4 CA 证书的信任链

    如果你安装并信任了一个CA 机构的证书,以他为根,同样也信任了由这个CA 机构颂发的其它组织的证书,其它组织则可以创建自己的CA中心,颂发下一级的证书,依次往下,一层层会有许多 CA 中心和数字证书。这个最上层的CA 证书,即可以称为根证书。

    2. Let’s Encrypt项目简介

    Let’s Encrypt是由互联网安全研究小组(ISRG)提供的服务,2015年4月9日宣布与Linux基金会合作。Let’s Encrypt项目计划是为网站提供永久免费的SSL证书,用于加速互联网从HTTP向HTTPS过度。同时,https/2也必须使用https,StartSSLWosign有免费DV证书,便宜的还有RapidComodo证书,其他证书价格一般较高。Let’s Encrypt证书签署快、免费、支持多域名,但是现阶段签署的证书只有三个月的有效期,需要通过自动化脚本续签。Let’s Encrypt 与 IdenTrust 的 DST Root CA 做了交叉认证,兼容所有主流的浏览器。在2015年12月,Let’s Encrypt项目已经开始公测。

    SSL证书的意义不仅仅在于加密,更在于颁发机构提供的担保,也就是因CA机构的过失,造成经济损失时,会有一定额度的赔偿。对于廉价或者免费的证书,这种担保就没有太大意义,CA机构也不会提供担保。廉价和免费证书的意义在于对https的普及,避免ISP对http的劫持,对流量的加密。

    3. 生成Let’s Encrypt证书

    Let’s Encrypt 证书生成官方推荐 certbot 这套自动化工具来实现。在官网上有比较详细的教材,根据不同的操作系统适配生成环境。这里直接在GitHub上下载certbot,certbot是一个Python 脚本。

    git clone https://github.com/certbot/certbot

    cd certbot

    在正式安装之前,需要关闭服务器,脚本会占用80和443端口。

    ./letsencrypt-auto certonly

    脚本会自动生成环境

    Creating virtual environment…

    Installing Python packages…

    Installation succeeded.

    在 /etc/letsencrypt/ 目录下存放着证书和证书的配置

    4. 服务器部署及自动化

    在证书的存放目录下有四个文件:

    privkey1.pem: 证书密钥 fullchain1.pem: 带证书链的域名证书 chain1.pem: The Let’s Encrypt 证书 cert1.pem: 域名证书

    修改Nginx的配置文件nginx.conf中SSL相关的参数

    ssl_certificate /etc/letsencrypt/live/XXX.com/fullchain1.pem;

    ssl_certificate_key /etc/letsencrypt/live/XXX.com/privkey1.pem;

    由于Let’s Encrypt有效期现阶段只有90天,我们可以配置一个自动化续签的脚本certrenew.h。

    #!/bin/sh

    # This script renews all the Let’s Encrypt certificates with a validity < 30 days

    if ! /home/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then

    echo Automated renewal failed:

    cat /var/log/letsencrypt/renew.log

    exit 1

    fi

    nginx -t && nginx -s reload

    开启定时任务Cron

    crontab -e

    编辑任务内容

    @daily /home/certrenew.sh

    HTTPS网站安全性能测试:SSL Server Test