Let'S Encrypt添加与维护

1. 前言

现在https的网站已经逐渐成为主流,而申请一个SSL证书也从只有数百上千一年的提供商,变为了多样化的提供商.Let'S Encrypt就是其中比较出名的一家.
Let'S Encrypt的赞助商内包含mozillachromefacebook等众多的知名互联网企业,并且提供简便的申请、续期步骤,可以算是目前最佳的免费SSL证书选择点这里可以到官网了解更多.

注:阿里云等部分国内空间商可能不能使用Let'S Encrypt

2. Certbot

Certbot是电子前哨基金会(EFF)为Let's Encrypt推出的自动部署客户端.通过Certbot,你可以自动部署 Let's Encrypt证书,以便为网站加上HTTPS支持.进入Certbot官网了解更多.

2.1 安装

使用git下载Certbot源码.

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

2.2 使用Certbot生成免费证书

进入Certbot目录,并运行生成免费证书

cd certbot  
./certbot-auto certonly --webroot --agree-tos -v -t --email 邮箱地址 -w 网站根目录 -d 网站域名

注意:certbot-auto会在网站根目录生成一个.well-known的目录,同时,会自动访问网站域名下.well-known(此时,我们需要保障nginx在http域名能够访问该目录.如:http://domain.com/.well-known). 如果执行成功,则会生成类似提示信息

Congratulations! Your certificate and chain have been saved at  
/etc/letsencrypt/live/网站域名/fullchain.pem

3 生成 dhparams

使用 openssl 工具生成 dhparams,留作nginx启用ssl时配置.

openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048  

4 nginx配置

4.1 开启SSL

打开对应域名nginx配置文件,在server中添加SSL配置

listen 443;  
ssl on;  
ssl_certificate /etc/letsencrypt/live/网站域名/fullchain.pem;  
ssl_certificate_key /etc/letsencrypt/live/网站域名/privkey.pem;  
ssl_dhparam /etc/ssl/certs/dhparams.pem;  
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;  
ssl_ciphers HIGH:!aNULL:!MD5;  

注:监听端口应从80改为443,如果你有防火墙,请保证防火墙中443端口开放

4.2 原http强制跳转https

如果你需要禁用用户的http访问,可以在对应域名nginx配置文件中添加一个80端口跳转的server

server {  
    listen 80;
    server_name your.domain.com;
    return 301 https://$server_name$request_uri;
}

5 证书更新

5.1 证书更新命令

免费证书只有 90 天的有效期,到时需要手动更新 renew。使用以下命令进行更新:

./certbot-auto renew

5.2 重启nginx

使用renew后,我们需要重启nginx才能够启用新的配置

//检测nginx配置
service nginx configtest  
//重启nginx
service nginx reload  

5.3 证书有效期监控

Let’s encrypt有个Let’s monitor服务可以提供对证书有效期的免费监控.当快过期时,会发送邮件提醒.

  1. 访问官网https://letsmonitor.org/使用邮箱注册一个账号.
  2. 进入Monitors菜单,点击Create new monitor创建一个监听任务.
  3. Type选择Certificate Validity (free);Hostname填写你的域名即可.(如下图1)
  4. 点击任务列表Action栏中的Run Test可以进行一次测试,在Data中的valid_to就是过期时间.(如下图2)

图1-创建监听任务 图2-测试任务

参考资料