如何安装免费SSL证书 Let's Encrypt
SSL证书选择有很多,其中有很多免费的方案可供选择,免费SSL证书中普遍认为Let's Encrypt做的还不错,下面大概简单介绍一下Let's Encrypt的安装和使用,安装环境为自有主机权限,系统为CentOS Stream release 8
Let's Encrypt简介
Let's Encrypt 是一家免费、开放、自动化的证书颁发机构(CA),为公众的利益而运行。 它是一项由 Internet Security Research Group (ISRG) 提供的服务。
Let’s Encrypt的关键原则为:
- 免费: 任何拥有域名的人都可以使用 Let’s Encrypt 免费获取受信的证书。
- 自动化: 运行于服务器上的软件可以与 Let’s Encrypt 直接交互,以便轻松获取证书,安全地配置它,并自动进行续期。
- 安全: Let’s Encrypt 将成为一个推动 TLS 安全最佳实践发展的的平台,无论是作为一个证书颁发机构(CA)还是通过帮助网站运营商正确地保护其服务器。
- 透明: 所有颁发或吊销的证书将被公开记录,供任何人查阅。
- 开放: 自动签发和续订协议 已经发布 作为其他人可以采用的开放标准。
- 乐于合作: 就像互联网底层协议本身一样,Let’s Encrypt 是为了让整个互联网社区受益而做出的共同努力,它不受任何单一组织的控制。
以上信息来自Let’s Encrypt的官网 https://letsencrypt.org/
使用Certbot客户端安装SSL证书
安装Certbot
Certbot是官方推荐的一个ACME客户端,用于SSL证书的生成和更新。以CentOS Stream release 8为例,我们需要更新安装源以便通过dnf包管理来安装Cerbot
dnf install epel-release -y
dnf install certbot -y
获取SSL证书
在安装证书时,你要确认你是否有修改网站根目录的权限,因为Certbot在安装SSL证书时需要在网站根目录下下临时生成一个.well-known/acme-challenge
的文件来验证域名的所有权,如果你没有修改网站根目录的权限,那就需要通过另外一种模式来验证(参考官网,本文不做说明)。
通过Certbot生产SSL证书
certbot certonly --webroot -w /DATA/www/yoursite/public/ -d yoursite.com
- --webroot 通过验证网站根目录验证文件的方式证明域名所有权
- -w 网站根目录位置,每个网站的根目录不一样,请填写你自己网站根目录的位置
- -d 需要生成证书的域名,根据需要填写你自己的域名
根据命令提示,顺利的话就可以生产SSL证书了,SSL证书生成后一般会存放在 /etc/letsencrypt/live/
目录下
某些网站没有开放根目录怎么办?
我的个人网站目前用的是Ghost,Ghost并没有直接开放对根目录的操作,所以我们需要在Nginx访问层做一些特殊配置。假设我们设置Ghost下的public目录为对外可访问的根目录,需要外界可以访问到/.well-known/
这个目录,我们可以指定特定规则,Nginx配置如下
location ~ /.well-known {
allow all;
root /DATA/www/ghost/content/static/;
}
SSL证书更新
从letsencrypt获取的SSL证书,默认有效期为90天,这个时间要特别注意,为了保证网站正常使用,我们还要定期去更新SSL证书,Certbot 也提供了相关命令,我们可以把它写入到cron里,以免忘记,建议每两个月自动执行一下更新命令就好
更新命令测试,可以检测自动更新是否可以正常运行
certbot renew --dry-run
如果没有问题,就可以去掉 --dry-run 直接执行certbot renew
做证书更新。
certbot renew
证书更新完成后,需要Nginx reload一下,这样在Web前端查看的证书日期就是最新的了。
service nginx reload
配置Nginx支持SSL
举个实际配置例子,看一下
# 这个配置是为了让访问http协议的请求自动跳转至https
server {
listen 80;
server_name www.yoursite.com;
return 302 https://www.yoursite.net$request_uri;
}
server {
#本例子开启了http2协议,这个不是必须的,可根据实际需要自行删改
listen 443 ssl http2;
server_name www.yoursite.com
ssl on;
ssl_certificate /etc/letsencrypt/live/www.yoursite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.yoursite.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3100;
proxy_set_header Host $host:443;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
重启Nginx服务后,再访问你的网站就可以支持https了。
关于防火墙配置
Https协议使用的是443端口,所以还要额外确认你的系统中防火墙是允许访问443端口。
查询防火墙是否开放443端口
firewall-cmd --query-port=443/tcp
防火墙开放443端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
重启防火墙服务配置生效
systemctl restart firewalld
参考文章
https://diamondfsd.com/lets-encrytp-hand-https/
https://techglimpse.com/install-certbot-centos-stream-8-lets-encrypt/