如何在Ubuntu 18.04上加密Apache

介绍

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

在本教程中,您将使用Certbot在Ubuntu 18.04上为Apache获得一个免费的SSL证书,并将您的证书设置为自动更新。

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

先决条件

要学习本教程,您需要:

  • 按照Ubuntu 18.04教程的初始服务器设置设置一台Ubuntu 18.04服务器,其中包括sudo非root用户和防火墙。

  • 完全注册的域名。 本教程将始终使用example.com 您可以在Namecheap上购买域名,在Freenom上免费购买域名,或者使用您选择的域名注册商。

  • 为您的服务器设置了以下两个DNS记录。 您可以按照的介绍了解如何添加它们。

    • 带有example.com的A记录指向您的服务器的公共IP地址。
    • 带有www. example.com的A记录www. example.com www. example.com指向您的服务器的公共IP地址。
  • 通过遵循如何在Ubuntu 18.04上安装Apache来安装Apache 确保您的域名拥有虚拟主机文件 本教程将以/etc/apache2/sites-available/ example.com .conf为例。

第1步 - 安装Certbot

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

Certbot处于非常活跃的发展阶段,因此Ubuntu提供的Certbot软件包往往过时。 但是,Certbot开发人员使用最新版本维护Ubuntu软件存储库,因此我们将使用该存储库。

首先,添加存储库:

sudo add-apt-repository ppa:certbot/certbot

您需要按ENTER接受。 然后,更新软件包列表以获取新存储库的软件包信息:

sudo apt update

最后,使用apt安装Certbot的Apache软件包:

sudo apt install python-certbot-apache

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行。 它应该是这样的:

/etc/apache2/sites-available/example.com.conf
...
ServerName example.com;
...

如果确实如此,请退出编辑器并继续下一步。

如果没有,请更新它以匹配。 然后保存文件,退出编辑器,并验证配置编辑的语法:

sudo apache2ctl configtest

如果出现错误,请重新打开虚拟主机文件并检查是否有错别字或缺少字符。 一旦你的配置文件的语法正确,重新加载Apache来加载新的配置:

sudo systemctl reload apache2

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

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

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

如果您已按照先决条件指南的建议启用ufw防火墙,则需要调整设置以允许HTTPS流量。 幸运的是,Apache在安装时使用ufw注册了一些配置文件。

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

sudo ufw status

它可能看起来像这样,这意味着只有HTTP流量被允许到Web服务器:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)

要额外允许HTTPS流量,请允许Apache Full配置文件并删除冗余Apache配置文件配额:

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'

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

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache Full                ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache Full (v6)           ALLOW       Anywhere (v6)        

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

第4步 - 获得SSL证书

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

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

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

如果这是您第一次运行certbot ,系统将提示您输入电子邮件地址并同意服务条款。 完成之后, certbot将与Let's Encrypt服务器通信,然后运行挑战以验证您是否控制了您要申请证书的域。

如果成功, certbot会询问您希望如何配置HTTPS设置:

OutputPlease 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将收到一条消息,告诉您该过程已成功并存储您的证书:

OutputIMPORTANT 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-07-23. 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实验室服务器测试测试您的服务器,它将获得A等级。

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

第5步 - 验证Certbot自动更新

让我们加密的证书只有九十天有效。 这是为了鼓励用户自动执行证书更新流程。 我们通过为/etc/cron.d添加更新脚本来安装我们安装的certbot软件包。 该脚本每天运行两次,并且将自动续订到期后三十天内的任何证书。

要测试续订过程,您可以使用certbot运行:

sudo certbot renew --dry-run

如果你没有看到任何错误,那你就全都设定好了。 必要时,Certbot将更新您的证书并重新加载Apache以获取更改。 如果自动更新过程失败,Let's Encrypt会向您指定的电子邮件发送一条消息,并在您的证书即将到期时向您发出警告。

结论

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

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏