如何使用Debian 9上的Let加密保护Apache

我们的加密是一个证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。它通过提供软件客户端Certbot简化了流程,该客户端尝试自动化大多数(如果不是全部)所需步骤。目前,获取和安装证书的整个过程在Apache和Nginx上都是完全自动化的。

在本教程中,您将使用Certbot在Debian 9上获取Apache的免费SSL证书,并将证书设置为自动续订。

本教程将使用单独的Apache虚拟主机文件而不是默认配置文件。我们建议为每个域创建新的Apache虚拟主机文件,因为它有助于避免常见错误并将默认文件维护为后备配置。

如果你使用其他版本,请参考:

先决条件

要学习本教程,您需要:

  • 一个Debian 9服务器通过遵循Debian 9教程的初始服务器设置来设置,包括具有sudo权限和防火墙的非root用户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 完全注册的域名。本教程将始终使用example.com如果你没有域名,建议您先去这里注册一个域名,您需要将域名解析到您的服务器,您可以使用腾讯云云解析进行快速设置。
  • 为您的服务器设置了以下两个DNS记录。
    • 指向服务器的公共IP地址的一个example.com记录。
    • 指向服务器的公共IP地址的一个www.example.com记录。
  • 确保您拥有域的虚拟主机文件。本教程将用/etc/apache2/sites-available/example.com.conf作示例。

第1步 - 安装Certbot

使用Let's Encrypt获取SSL证书的第一步是在服务器上安装Certbot软件。

在撰写本文时,默认情况下,Debian软件存储库中不提供Certbot。要使用apt下载软件,您需要将backports存储库添加到apt查找包源的sources.list文件中。Backports是来自Debian测试和不稳定发行版的软件包,这些软件包经过重新编译,因此它们可以在稳定的Debian发行版上运行而无需新的库。

要添加backports存储库,请在/etc/apt/目录中打开(或创建)该sources.list文件:

sudo nano /etc/apt/sources.list

在文件的底部,添加以下行:

. . .
deb http://ftp.debian.org/debian stretch-backports main

这包括与Debian自由软件指南(DFSG)兼容的main软件包,以及non-freecontrib组件,它们本身不符合DFSG或包含此类别中的依赖项。

按下CTRL+XY,然后ENTER来保存并关闭文件,然后更新您的软件包列表:

sudo apt update

然后使用以下命令安装Certbot。请注意,该-t选项告诉apt您通过查看刚刚添加的backports存储库来搜索包:

sudo apt install python-certbot-apache -t stretch-backports

Certbot现在可以使用了,但为了让它为Apache配置SSL,我们需要验证Apache是否已正确配置。

第2步 - 设置SSL证书

Certbot需要能够在Apache配置中找到正确的虚拟主机,以便自动配置SSL。具体来说,它通过查找ServerName与您请求证书的域匹配的指令来完成此操作。

如果您遵循Apache安装教程中的虚拟主机设置步骤,那么您应该已经在/etc/apache2/sites-available/example.com.conf为您的域设置一个VirtualHost块,并且已经正确设置了该ServerName指令。

要检查,请使用nano或其他您喜欢的文本编辑器打开您的域的虚拟主机文件:

sudo nano /etc/apache2/sites-available/example.com.conf

找到现有的ServerName行。它看起来应该是这样的,并且使用的是您自己的域名而不是example.com

...
ServerName example.com;
...

如果还没有,请更新ServerName指令以指向您的域名。然后保存文件,退出编辑器,并验证配置编辑的语法:

sudo apache2ctl configtest

如果没有任何语法错误,您将看到此输出:

Syntax OK

如果出现错误,请重新打开虚拟主机文件并检查是否存在拼写错误或缺少字符。配置文件的语法正确后,重新加载Apache以加载新配置:

sudo systemctl reload apache2

Certbot现在可以找到正确的VirtualHost块并进行更新。

接下来,让我们更新防火墙以允许HTTPS流量。

第3步 - 通过防火墙允许HTTPS

如果启用了ufw防火墙,则必须按照先决条件指南的建议,调整设置以允许HTTPS流量。幸运的是,当ufw安装在Debian上时,它包含一些配置文件,有助于简化更改HTTP和HTTPS流量的防火墙规则的过程。

您可以键入以下内容来查看当前设置:

sudo ufw status

如果您按照我们的如何在Debian 9上安装Apache的指南的第2步,此命令的输出将如下所示,表明只允许HTTP流量进入Web服务器:

Status: active
​
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
WWW                        ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
WWW (v6)                   ALLOW       Anywhere (v6)

要另外允许HTTPS流量,请允许“WWW Full”配置文件并删除冗余的“WWW”配置文件限额:

sudo ufw allow 'WWW Full'
sudo ufw delete allow 'WWW'

您的状态现在应如下所示:

sudo ufw status
Status: active
​
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
WWW Full                   ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
WWW Full (v6)              ALLOW       Anywhere (v6)        

接下来,让我们运行Certbot并获取我们的证书。

第4步 - 获取SSL证书

Certbot提供了多种通过插件获取SSL证书的方法。Apache插件将负责重新配置Apache并在必要时重新加载配置。要使用此插件,请键入以下内容:

sudo certbot --apache -d example.com -d www.example.com

这使certbot--apache插件一起运行,将-d用于指定您希望证书有效的名称。

如果这是您第一次运行certbot,系统将提示您输入电子邮件地址并同意服务条款。执行此操作后,certbot将与Let的加密服务器通信,然后运行质询以验证您是否控制了您要为其申请证书的域。

如果成功,certbot将询问您要如何配置HTTPS设置:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

选择你的选择然后点击ENTER。配置将更新,Apache将重新加载以获取新设置。certbot将携带一条消息,告诉您进程是否成功以及您的证书存储位置:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-12-04. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:
​
   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

您的证书已下载,安装和加载。尝试使用https://重新加载您的网站并注意浏览器的安全指示器。它应该表明该网站已正确保护,通常带有绿色锁定图标。如果使用SSL Labs Server Test测试服务器,它将获得A级。

让我们通过测试更新过程来完成。

第5步 - 验证Certbot自动续订

我们的加密证书只有90天有效。这是为了鼓励用户自动执行证书续订过程。我们安装的certbot软件包通过添加更新脚本至/etc/cron.d来为我们解决这个问题。此脚本每天运行两次,并将自动续订到期后30天内的任何证书。

要测试更新过程,您可以使用certbot执行以下操作:

sudo certbot renew --dry-run

如果您没有看到任何错误,那么您已经完成了设置。必要时,Certbot将续订您的证书并重新加载Apache以获取更改。如果自动续订过程失败,我们的加密将向您指定的电子邮件发送一条消息,并在您的证书即将过期时发出警告。

结论

在本教程中,您安装了Let's Encrypt客户端certbot,为您的域下载了SSL证书,配置了Apache以使用这些证书,以及设置自动证书续订。如果您对使用Certbot有其他疑问,他们的文档是一个很好的起点。

更多Debian教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Secure Apache with Let's Encrypt on Debian 9》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

如何加密Ubuntu 14.04来保护Nginx

让我们加密是一个新的证书颁发机构(CA),它提供了一种简单的方式来获取和安装免费的TLS / SSL证书,从而启用Web服务器上的加密HTTPS。它通过提供一个...

3480
来自专栏云计算教程系列

如何使用CentOS 7上的CloudFlare验证来检索让我们加密SSL通配符证书

Let's Encrypt 是一个证书颁发机构(CA),它为传输层安全性(TLS)加密提供免费证书。它提供了一个名为Certbot的软件客户端,它简化了证书创建...

870
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Let's Encrypt来保护Nginx

Let's Encrypt是一个新的证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。...

1060
来自专栏程序员宝库

更快更安全,HTTPS 优化总结

在网站升级到 HTTPS 之后,我们还可以有很多玩意可以折腾,优化 HTTPS,让它更快更安全。这里是一篇 HTTPS 优化的总结,也包含问题的解决方法,不过不...

99311
来自专栏lestat's blog

certbot+letsencrypt配置免费单证书多域名ssl证书

前些天看到微信公众平台官方公告关于公众平台接口不再支持HTTP方式调用的公告之后决定把项目的协议从http改成https,于是开始在网上查,完成之后总结了一点经...

6914
来自专栏WindCoder

JSON Web Token(JWT)教程:一个基于Laravel和AngularJS的例子

这是一篇介绍JSON Web Token(JWT)的文章,虽然可能用到的例子和Laravel和AngularJS有关,但知道了原理便能写出适用于自己的。同时,由...

3871
来自专栏云计算教程系列

如何使用CentOS 7上的CloudFlare验证来检索让我们加密SSL通配符证书

Let's Encrypt是一个证书颁发机构(CA),它为传输层安全性(TLS)加密供免费证书。它提供了一个名为Certbot的软件客户端,它简化了证书创建,验...

3352
来自专栏阮一峰的网络日志

HTTPS 升级指南

上一篇文章我介绍了 HTTP/2 协议 ,它只有在 HTTPS 环境才会生效。 为了升级到 HTTP/2 协议,必须先启用 HTTPS。如果你不了解 HTTPS...

3405
来自专栏云计算教程系列

加固你的Roundcube服务器

Roundcube是一个Webmail客户端,具有强大的安全功能和来自其插件存储库的广泛自定义选项。本文介绍如何进一步保护基本的现有Roundcube安装。

2760
来自专栏小夜博客

LNMP环境配置SSL证书最简单教程

1K13

扫码关注云+社区

领取腾讯云代金券