使用Let's Encrypt生成免费SSL证书(By-Ruicky)

img

使用Let’s Encrypt生成免费SSL证书(By-Ruicky)

前提条件

  1. nginx
  2. Centos 7
  3. 域名:www.example.com(替换成你自己的)

生成证书

1. 配置Nginx,验证证书对应域名的所有权.

为需要配置https的站点添加以下配置,将访问/.well-known的请求指向本地目录。Let’s Encrypt在生成证书的过程中,会在/var/www/www.xxx.com/.well-known目录生成一个临时文件,并且会访问类似于http://www.xxx.com/.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX的url,来检查域名配置是否有效。

添加以下配置,并重启Nginx:nginx -s reload,如果reload不生效,可以试试restart。

1
2
3
4
5
6
7
8
9
10
11
server {

...

location /.well-known {
alias /var/www/www.xxx.com/.well-known;
}

...

}

2. 安装certbot。推荐使用官方推荐安装方法(centosrhel7-nginx)。

1
2
3
yum -y install yum-utils
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
yum install certbot

3. 使用certbot命令行生成证书.

  • 使用向导生成
    • certbot certonly
  • 使用快捷方式生成
    • cd /var/www && mkdir www.example.com
    • certbot certonly --webroot --webroot-path /var/www/www.example.com -d www.example.com --agree-tos --email admin@example.com

生成的证书默认在/etc/letsencrypt/live/www.xxx.com/目录。

4. 配置Nginx使用证书

添加以下配置,并重启Nginx:nginx -s reload,如果reload不生效,可以试试restart。

1
2
3
4
5
6
7
8
9
10
server {
...
listen 443;

ssl on;
ssl_stapling_verify on;
ssl_certificate /etc/letsencrypt/live/www.xxx.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.xxx.com/privkey.pem;
...
}

PS: 如果想让http强制跳转到http则需要监听80端口的配置如下

1
2
3
4
5
server {
listen 80;
server_name example.comn;
return 301 https://$server_name$request_uri;
}

最终,你的nginx的配置文件应该类似下面这种

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
listen 80;
server_name www.example.com;

location /.well-known {
alias /var/www/www.example.com/.well-known;
}

location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443;
server_name www.example.com;

location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

ssl on;
ssl_stapling_verify on;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
}

5. 检查证书的有效性

打开浏览器,检查证书的有效性。

6. 证书续期

Let’s Encrypt颁发的证书有期是90天,需要在过期前进行续期,好在Let’s Encrypt已经提供了自动续期的脚本。

官网说明,可以一天调用两次,如果检测到证书不需要更新,是什么都不做的,以减少意外造成的故障。

先运行certbot-auto renew –dry-run命令检查证书自动续期是否正常,如果正常,将certbot-auto renew –quiet命令添加到系统的计划任务cron中,就可以实现证书自动续期了。

1
crontab -e

输入以下内容:

1
01 1 * * * certbot renew --post-hook "systemctl reload nginx"

表示每天的1点1分自动执行续期脚本。

参考资料

使用Let’s Encrypt生成免费SSL证书
Cron job for let’s encrypt renewal
Let’s Encrypt SSL证书配置

坚持原创技术分享,您的支持将鼓励我继续创作!