使用Let's Encrypt保护Nginx
使用Let’s Encrypt 官方工具 Certbot 配置SSL安全证书
介绍
http vs. https
http是一个传输网页内容的协议, https是”http over SSL/TLS”.
SSL/TLS
SSL是Secure Sockets Layer的缩写,是安全套接层
TLS是 Transport Layer Security 是传输层安全协议
SSL和TLS是同一个东西的不同阶段,理解为同一个东西也行,都是安全协议就对了.
怎么部署https
部署https需要被信任的CA(Certificate Authority)也就是证书授权中心颁发的SSL安全证书,并且将它部署到你的网站服务器上.
怎么获得SSL安全证书
我们自己可以签发SSL安全证书,但是我们自己签发的安全证书不会被主流的浏览器信任,所以我们需要被信任的证书授权中心(CA)签发的安全证书.而一般的SSL安全证书签发服务都比较贵,为了加快退关https的普及,公益组织ISRG(Internet Security Research Group)推出Let’s Encrypt免费证书.
官方客户端Certbot
Nginx
Nginx,发音为”engine-x”,是一种功能丰富的轻量级网络服务器,以其速度、效率和可扩展性而闻名,由于它能以最少的资源消耗管理大流量负载,开发人员更愿意将其作为托管网站和服务在线应用程序的首选.
Let’s Encrypt 是一个证书颁发机构(CA), 它提供了一种获取和安装免费TLS/SSL证书的可访问方式,从而在Web服务器上启动加密的HTTPS.此外,Let’s Encrypt还提供Certbot工具来完成自动化证书的颁发和更新,该工具可以解析Web服务器配置文件(例如 nginx)并自动设置他们。
让我们进入正题吧。
安装Certbot
安装Nginx(可选)
确认Nginx的配置
获取SSL证书
使用SSLLabs验证SSL
设置Cron作业来更新证书
1. 安装Certbot
Certbot建议使用snap包进行安装
1 |
|
卸载旧版本cerbot
1 |
|
安装cerbot
包
1 |
|
最后建立软连接certbot
1 |
|
2. 安装Nginx
如果您的主机上没有安装Nginx, 您可以使用单个命令来完成此操作:
1 |
|
3. 确认Nginx配置
使用Nginx Web服务器时,服务器块(类似于Apache中的虚拟主机)可用于封装配置详细信息并从一台服务器托管多个域。
Ubuntu 22.04上的Nginx默认启动一个服务器块,该服务器块配置为从位于目录中提供地址/var/www/html
.虽然这对于单个站点来说效果很好,但如果你托管多个站点。这种配置就不太合适,所以下面我们创建一个术语your_domain域名的目录
1 |
|
接下来,使用环境变量分配目录的所有权 $USER:
1 |
|
为了确保你的权限正确并允许所有者读取、写入和执行文件,同时只授予组和其他人读取和执行权限,你可以输入以下命令:
1 |
|
接下来,使用你最喜欢的编辑器创建一个示例index.html
页面: vim
1 |
|
在里面添加以下示例HTML:
1 |
|
为了让Nginx提供此内容,必须使用正确的指令创建一个服务器块,我们不直接修改默认配置文件, 而是在以下位置创建一个新配置文件: /etc/nginx/sites-available/your_domain
1 |
|
粘贴以下配置块,该配置块于默认配置块类似,但针对我们的新目录和域名进行更新:
1 |
|
请注意,我们已将root
配置更新为新目录和server_name
域名
接下来,我们创建上面文件的链接文件到sites-enabled
目录,Nginx在启动期间会读取该目录
1 |
|
服务器配置
/etc/nginx
: Nginx配置目录,所有Nginx配置文件都位于此处/etc/nginx/nginx.conf
: 主要的Nginx配置文件,可以修改它更改Nginx全局配置/etc/nginx/sites-available/
: 可以存储每个站点服务器块的目录,Nginx将不会使用在此目录中找到的配置文件,除非它们链接到该sites-enabled
目录。通常,所有服务器块配置都在此目录中完成,然后通过链接到其他目录来启动./etc/nginx/sites-enabled
: 存储已启动的每站点服务器块的目录,通常,这些是通过链接到sites-available
目录中找到的配置文件来创建的/etc/nginx/snippets
: 此目录包含可以在Nginx配置中重复使用的配置片段
服务器日志:
/var/log/nginx/access.log
: 除非Nginx配置为其他方式,否则对Web服务器的每个请求都会记录在此日志文件中/var/log/nginx/error.log
: 任何Nginx错误都会记录在此日志中.
注意: Nginx使用一种符号连接的方式跟踪启动了哪些服务块。创建符号链接就像在磁盘上创建快捷方式一样,以便你后续可以从sites-enabled目录中删除快捷方式,同时保留服务器块(sites-available)。
为了避免因添加其他服务器名称而可能出现的哈希桶内存问题,有必要调整文件中的单个值/etc/nginx/nginx.conf
.打开文件:
1 |
|
找到该server_name_hash_bucket_size
指令并删除#符号以取消注释该行。
1 |
|
接下来,测试Nginx文件中是否有语法错误:
1 |
|
如果没有任何问题,请重新启动Nginx以便更改生效
1 |
|
4. 获取SSL证书
Certbot提供多种通过插件获取SSL证书的方式。Nginx插件将负责重新配置Nginx并在必要时重新加载配置
1 |
|
certbot
与--nginx
插件一起运行,用于-d
指定我们希望证书有效的域名.
1 |
|
您的证书已下载、安装和加载,你的Nginx配置现在将自动将所有Web请求重定向到https://
.尝试重新加载您的网站并注意浏览器的安全指示器。
5. 使用SSLLabs 验证SSL
完成上面步骤后,您可以使用SSL Labs Server Test验证证书。只需要输入你的域名等待结果
6. 验证Certbot自动续订
Let’s ENcrypt的证书有效期只有90天,我们安装的软件包certbot
通过添加一个systemd计时器来为我们处理这个问题,该计时器每天运行两次,并自动续订过期30天内的任何证书.
你可以使用以下命令查看计时器的状态systemctl
1 |
|