免费的https证书
部署https访问最简单的办法就是使用域名商提供的https服务,简单、省事、可靠、有保障。
但是,价格同样也不便宜啊,像我等穷人,当然要捡着物美价廉的吃了,如果能薅羊毛坚决不能放过。
letsencrypt.org是一个免费的证书颁发机构,提供单域名的证书,也提供泛域名的证书。
但是缺点也比较明显,就是有效期会比较短,只有三个月。当然了,每隔几个月搞一次就好了嘛,谁让咱穷呢
安装certbot
因为我使用的是 freebsd
,所以我直接使用 portmaster
来安装。
sudo portmaster security/py-certbot
其它的操作系统同理,使用包管理器就可以安装,例如
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot
如果不知道怎么安装,可以详见官网 https://certbot.eff.org/instructions
申请证书
certbot certonly –manual -d grass.work -d "*.grass.work" --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
其中 -d
后面的参数是要申请的域名,可以是单域名,也可以是泛域名,可以有多个
--preferred-challenges dns-01
表示使用验证方式为dns,当然也可以选择http方式——如果需要的话
--server
选择要使用的证书服务器
然后:
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?【确认生成证书的机器的IP是域名解析到的IP地址】
输入 yes
Please deploy a DNS TXT record under the name
_acme-challenge.grass.work with the following value:
# 注意:_acme-challenge.域名,是你需要去添加的解析记录 ,记录类型选择 TXT
sdklfasd8fzxckfj23sd9xlkvjx
#此处显示的是你需要添加到解析里的值
Before continuing, verify the record is deployed.
这时候,到域名控制台新增TXT的解析记录,如果有多个域名的话,需要配置多次,txt记录可以重复添加。
可以使用 nslookup -q=TXT _acme-challenge.grass.work
来验证TXT记录是否生效。
当生效之后,再继续。
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/grass.work/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/grass.work/privkey.pem
Your cert will expire on 2020-12-19. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
当看到上面的内容的时候,说明已经申请成功了,如果失败了,按照提示重新来过就好。
/etc/letsencrypt/live/grass.work/fullchain.pem
是证书的位置
/etc/letsencrypt/live/grass.work/privkey.pem
是私钥的位置
记下来待会要用
配置Nginx
在 nginx.conf
(不同的系统会在不同的位置,具体查看相应的配置)中增加两行配置
http {
# 配置证书的路径
ssl_certificate /etc/letsencrypt/live/grass.work/fullchain.pem
# 配置私钥的路径
ssl_certificate_key /etc/letsencrypt/live/grass.work/privkey.pem
# 其它的配置
}
使用crontab自动续期
打开crontab配置
crontab -e
增加两行配置
# 每月的 1号, 4点30 更新证书
30 4 1 * * /usr/local/bin/certbot renew -q
# 每月的 1号, 5点30 重新启动 nginx 服务器
30 5 1 * * /usr/local/sbin/nginx -s reload
到此结束。