为了开发小程序,所以必须升级到https
什么是let's Encrypt
Let's Encrypt
是ISRG (Internet Security Research Group)
提供的一个免费、开放、自动化的证书签发服务。
下面介绍使用 Let's Encrypt
签发工具、自动续签以及在 nginx
上使用签发证书的方法。测试服务器的操作系统是centos7
,使用 Let's Encrypt
官方推荐的 certbot
客户端以及 Webroot
验证方式。
具体有有以下几个步骤:
- 1.下载
certbot
- 2.配置
nginx
以满足webroot
验证方式的需要 - 3.使用
certbot
签发证书 - 4.配置
nginx
以使用签证的证书
一.下载certbot
wget https://dl.eff.org/certbot-auto -O /sbin/certbot-auto
chmod a+x /sbin/certbot-auto
由于 Let's Encrypt
的有效期是 90 天,到期后我们需要对证书进行续签,因此每隔一段时间就需要使用这个工具,建议将这个工具下载到 /sbin
目录;
二.配置nginx
以满足webroot
验证方式的需要
在使用 certbot
之前,我们先要对 Nginx
进行配置,因为使用 webroot
方式,certbot
会在域名对应的根目录创建一个叫做.well-known
的隐藏文件夹,并且创建用于验证域名所有权的文件。而这个文件夹在证书签发的过程中,是需要被访问的。
假设我们我们要签发用于 api.baidu.com
这个域名的 SSL
证书,而这个域名的nginx
配置文件在 /etc/www/nginx/conf.d/api.conf
,于是我们打开这个文件,并且在 server block
内加入下面的内容:
server {
listen 80;
server_name api.liaorusanshe.com;
root /alidata1/www/api/public; //laravel 的目录
localtion / {
...............
}
location ~ /.well-known {
allow all;
}
}
退出保存,平滑启动
nginx -s reload
三. 使用certbot
签发证书
1. 创建存放配置文件的文件夹
mkdir /etc/letsencrypt/configs
2. 编辑配置文件:
vim /etc/letsencrypt/configs/api.baidu.com.conf
配置具体如下:
# 写你的域名和邮箱
domains = api.baidu.com
rsa-key-size = 2048
email = you-email@qq.com
text = True
# 网站路径
authenticator = webroot
webroot-path = /webroot //你网站路径
3.创建证书
certbot-auto -c /etc/letsencrypt/configs/api.baidu.com.conf certonly
##片刻之后就会,看到下面的内容就会成功
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/api.baidu.com/fullchain.pem
..... # 还有一大串
如果运行顺利,所需要的证书就已经生成好了。他们被放在了 /etc/letsencrypt/live/api.badiu.com/
下:
$ ls /etc/letsencrypt/live/api.baidu.com/
//如下内容
cert.pem #server cert only
privkey.pem #private key
chain.pem #intermediates
fullchain.pem #server cert + intermediates
四.配置nginx 以使用签证的证书
更改/etc/nginx/conf.d/api.conf
文件
server {
listen 443;
server_name api.baidu.com;
root /webroot;
ssl on;
ssl_certificate /etc/letsencrypt/live/api.baidu.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.baidu.com/privkey.pem;
location / {
...............
}
location ~ /.well-known {
allow all;
}
}
我们还要让访客在访问 80
端口的时候,跳转到 HTTPS
,于是还要在配置文件里面增加一个 Server Block
,修改完之后是这样的:
server {
listen 80;
server_name api.baidu.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
ssl on;
server_name api.baidu.com;
root /alidata1/www/api/public;
ssl_certificate /etc/letsencrypt/live/api.baidu.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.baidu.com/privkey.pem;
localtion / {
...............
}
location ~ /.well-known {
allow all;
}
}
重新启动nginx
nginx -s reload
如果到这一步了,那么恭喜你了,访问网站就会看到一把绿色的小锁
五.证书的自动续签
正如前文提到的,Let's Encrypt
证书的有效期只有 90 天,因此我们需要定期的对他进行续签,我们使用 cron
来设定计划任务
crontab -e
我们可以每周对证书进行一次续签,这对有效的证书是没有任何影响的,同时它会一次性续签所有的证书。我决定在每周一凌晨 3 点 30 分对证书进行续签,并且在 3 点 35 分重启一下Nginx
,因此要在 crontab
里面加入以下内容:
30 3 * * 1 /sbin/certbot-auto renew --quiet --no-self-upgrade
35 3 * * 1 /etc/init.d/nginx reload
到这里就是完成了所有的步骤了
参考文章
https://blog.guorenxi.com/43....
https://ksmx.me/letsencrypt-s...
最好使用
https://laravel-china.org/art...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。