Web进行安全通信依赖于HTTPS,这需要使用数字证书,以便浏览器验证Web服务器的身份,比如说,google.com是真的吗?

Web服务器从证书颁发机构,通常是CA可信第三方。获取其证书以验证域名真实性,从而构建一个可信,安全的连接。

Certbot是一个易于使用的客户端,它由EFF,Mozilla和开源组织发起。可以从Let's Encrypt获取证书,一个开放的证书颁发机构,并将其部署到Web服务器。

在本教程中我们将说明如何在Debian 11配置Nginx Let's Encrypt SSL证书。包括使用使用Certbot配置Let's Encrypt SSL证书。使用Certbot自动更新SSL证书。

在继续之前,请确保您已满足这些要求。确保你以root或者具有sudo权限的用户登录到服务器。

需要有线上服务器,可以是vps等独立主机。一个可指向你服务器的域名,比如在这个示例将使用www.myfreax.com。

可通过域名的方式访问你的HTTP服务器。如果你还没有安装HTTP服务器,可以阅读教程在Debian 11安装Nginx服务器。

登录到服务器后整个过程都是root的操作,建议谨慎使用rm命令,在终端ssh myfreax@your-remote-server-ip命令登录到服务器。

命令将会要求你输入myfreax用户的密码,才能登录到web服务器,myfreax@your-remote-server-ip's password:。

如果你已设置密钥登录则不需要输入密码即可登录。如果你或者服务器提供商已更改SSH的默认端口22为其它端口请使用-p选项指定端口,

例如改成23333端口,则在终端运行命令ssh -p '23333' myfreax@your-remote-server-ip登录服务器。

安装Snap

如何在Debian 11安装snap | myfreax
Snap Store是一个图形桌面应用程序,Snap Store通过有用的描述、评级、评论和屏幕截图展示特色和流行的Linux应用程序
Debian 11 安装snap

安装CertBot

在Ubuntu官方的默认镜像中并不包含Certbot的软件包,我们将通过snap包管理器安装Certbot中,首先在终端运行sudo snap refresh core命令更新snap的core。

然后运行命令sudo snap install --classic certbot安装CertBot。当安装Certbot完成后。

你需要运行ln命令创建符号链接,将certbot加入PATH环境变量中,这样你就可以不需要写绝对路径运行certbot命令。

certbot的自动更新SSL证书脚本也将会PATH环境变量搜索certbot可执行文件,因此将certbot加入PATH环境变量中是必须的。

sudo snap install core
sudo snap refresh core

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

配置SSL证书

配置SSL证书非常简单,运行sudo certbot --nginx -d www.myfreax.com命令获取证书并让Certbot自动编辑您的Nginx配置,只需一步就可以启用HTTPS SSL的证书。

如果你使用的Apache作为HTTP的服务,请运行sudo certbot  --apache -d www.myfreax.com命令。

Certbot也将会自动编辑你的Apache配置,以启用HTTPS SSL证书。

如果是首次运行CertBot获取SSL证书,它将会询问你的电子邮件,输入一个你常用的邮件地址,它会在到期之前通知你。

同意CertBot协议,是否将HTTP重定向到HTTPS,CertBot获取证书输出内容如下所示。

sudo certbot --nginx -d www.myfreax.com
sudo certbot  --apache -d www.myfreax.com
...
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): 输入你的电子邮件
....
(A)gree/(C)ancel: a 同意协议
....
(Y)es/(N)o: y 询问是否需要接收提醒邮件
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 询问是否要重定向http的连接,选择2重定向
Congratulations! You have successfully enabled https://www.myfreax.com

使用Certbot自动更新SSL证书

Let's Encrypt的SSL证书会在3个月到期即90天,因此你可能需要手动续订,但Certbot软件包附带了一个cron任务和systemd计时器,它将在证书过期之前进行自动续订。

以简化我们的工作。除非你更改配置,否则无需再次手动运行Certbot。您可以通过运行命令sudo certbot renew --dry-run来测试证书的自动续订。

你将看到消息Simulating renewal of an existing certificate for www.myfreax.com。这说明Certbot可以自动更新证书。

如果自动续定失败,Certbot将会提示你Failed to renew certificate www.myfreax.com with error: Some challenges have failed.

如果你在测试自动续订时看到错误提示Hint: The Certificate Authority failed to verify the temporary nginx configuration changes made by Certbot.

Ensure the listed domains point to this nginx server and that it is accessible from the internet.

这说明你已经阻止Let's Encrypt的服务器验证,这可能是防火墙,应用防火墙或者Nginx的配置错误而导致Let's Encrypt的服务器的验证失败。

要确认您的网站设置正确,请在浏览器中访问https://www.myfreax.com/,然后在网址栏中查找到锁图标。至此,你已了解如何为自己域名添加HTTPS SSL证书。

结论

至此,你已经会使用Certbot为自己的HTTP服务器部署Let's Encrypt SSL证书。如需要学习更多Certbot相关知识,请参考官方文档。如你有任何疑问,请在下面发表评论。