使用Let’s Encrypt的免费证书

作者 | 2017年3月15日

更新: 如果运行certbot过程中出现 “ ImportError: ‘pyOpenSSL’ module missing required functionality. Try upgrading to v0.14 or newer.”的错误,请参考这篇文章

https慢慢走向主流(想想浏览未加密网站时右下角弹出的运营商劫持广告多恶心),获取证书的成本也在降低。国内的阿里云、腾讯云等云计算厂商提供了申请免费证书的服务,按照官方给出的步骤即可在一天之内拿到免费的证书。如果你需要便宜一点的泛域名证书,可以参考这篇文章

国内的企业都是忠诚于党的,申请证书就需要向这些企业提供私钥。所以有一天政府想要解密你的网站流量,那是so easy啊~鉴于这个考虑,本站从Let’s Encrypt获取的免费证书。Let’s Encrypt由互联网安全研究小组(ISRG)支持,是一个免费、非营利性的开放证书权威中心。任何域名持有人均可使用Let’s Encrypt申请到免费的证书来加密网站流量,公司则建议用EV类的证书获取更权威的认证。

以下介绍如何从Let’s Encrypt获取免费证书。本博客有独立的vps和域名,并且安装了CentOS 7操作系统。如果你的环境与本博客的有差异,请参考官方指引

安装certbo工具

运行命令安装获取证书的certbot工具:yum install epel-release -y && yum install certbot。安装完毕后,运行certbot --help可以查看该工具的命令详情。

解析域名

进入dns解析服务提供商的网站,将需要申请证书域名的A记录指向服务器IP。本人使用 DNSLA, 为www.tlanyan.me网站申请证书,在记录值出填写服务器ip,截图如下:

域名解析记录

请在涂改部分填上你承载域名服务器的IP。

获取证书

运行命令 certbot certonly --standalone -d tlanyan.me -d www.tlanyan.me为域名tlanyan.me和www.tlanyan.me获取证书。如果你要获取多个站点,继续添加-d参数即可。certbot会检测443端口是否已经占用,如果已被占用需要先停止web服务器再运行命令。如果域名的A记录未指向该服务器,会报错提示域名解析问题。

大概半分钟就拿到了免费的证书,很爽有没有?运行 certbot certificates命令可查看获取到证书的详细信息。

配置web服务器使用证书。

各个web服务器的配置不一样,这里提供一个nginx的配置范例:

server {
    listen 80;
    server_name www.tlanyan.me tlanyan.me;
    rewrite ^(.*) https://$server_name$1 permanent;
}

server {
    listen 443 ssl;
    server_name www.tlanyan.me tlanyan.me;
    charset utf-8;

    ssl_certificate /etc/letsencrypt/live/tlanyan.me/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tlanyan.me/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    keepalive_timeout 70;

    # 这里填写其他配置
}

配置分为两个server段,第一段用途是将所有http请求都导向https。第二段以ssl开头的配置都和证书相关:设置证书和私钥的位置、证书采用的协议、证书的加密算法等信息。

为了增强安全性,ssl_protocols、ssl_ciphers和ssl_perfer_server_ciphers的配置建议采用以上配置。

配置好以后,运行nginx -t命令查看有无错误。如果没有可运行systemctl restart nginx重新开启web服务。

证书自动更新

通过certbot certificates命令可以看到证书的有效期是三个月,超过期限则需要续签。可以配置crontab任务自动续签,在/etc/crontab文件末添加一行:

0 0 0 */2 0 root /usr/bin/certbot renew

证书将每两个月自动续签一次。如果你的证书快到期了还没有续签,贴心的EFF(电子前哨基金会)会发邮件提醒,记得到期前续签就行~

参考

  1. https://letsencrypt.org
打赏 赞(12)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注