在 Debian 9 上使用 Let's Encrypt 保护 Apache

2023-11-16

Let’s Encrypt 是由互联网安全研究小组 (ISRG) 创建的证书颁发机构。它通过完全自动化的流程提供免费的 SSL 证书,旨在消除手动证书创建、验证、安装和续订。

Let’s Encrypt 颁发的证书自颁发之日起 90 天内有效,并且受到当今所有主要浏览器的信任。

本教程将指导您完成在 Debian 9 上使用 certbot 工具获取免费 Let’s Encrypt 的过程。我们还将展示如何配置 Apache 以使用新的 SSL 证书并启用 HTTP/2。

先决条件#

在继续本教程之前,请确保您已满足以下先决条件:

  • 登录身份为具有 sudo 权限的用户 .
  • 有一个域名指向您的服务器公共服务器IP。我们将使用example.com.
  • 阿帕奇已安装。您的域的 apache 虚拟主机。您可以关注这些说明有关如何创建一个的详细信息。

安装证书机器人#

Certbot 是一款功能齐全且易于使用的工具,可以自动执行获取和续订 Let’s Encrypt SSL 证书的任务。 certbot 软件包包含在默认的 Debian 存储库中。

使用以下命令更新软件包列表并安装 certbot 软件包:

sudo apt updatesudo apt install certbot

生成强大的 Dh (Diffie-Hellman) 组#

Diffie-Hellman 密钥交换 (DH) 是一种通过不安全的通信通道安全交换加密密钥的方法。

要生成一组新的 2048 位 DH 参数,请运行:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
如果您愿意,您可以将大小更改为最多 4096 位,但在这种情况下,生成可能需要 30 分钟以上,具体取决于系统熵。

获取 Let's Encrypt SSL 证书#

要为我们的域获取 SSL 证书,我们将使用 Webroot 插件,该插件通过创建一个临时文件来验证所请求的域${webroot-path}/.well-known/acme-challenge目录。 Let’s Encrypt 服务器向临时文件发出 HTTP 请求,以验证请求的域是否解析为 certbot 运行的服务器。

为了使其更简单,我们将映射所有 HTTP 请求.well-known/acme-challenge到单个目录,/var/lib/letsencrypt.

以下命令创建目录并使其可供 Apache 服务器写入。

sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp www-data /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

为了避免重复代码,创建以下两个配置片段:

/etc/apache2/conf-available/letsencrypt.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>
/etc/apache2/conf-available/ssl-params.conf
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options SAMEORIGIN
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem" 

上面的代码片段包括推荐的切片器,启用 OCSP 装订、HTTP 严格传输安全 (HSTS) 并强制执行一些以安全为中心的 HTTP 标头。

在启用配置文件之前,请确保mod_ssl and mod_headers通过发出以下命令启用:

sudo a2enmod sslsudo a2enmod headers

启用 HTTP/2 模块,这将使您的网站更快、更健壮:

sudo a2enmod http2

通过运行以下命令启用 SSL 配置文件:

sudo a2enconf letsencryptsudo a2enconf ssl-params

重新加载 Apache 配置以使更改生效:

sudo systemctl reload apache2

使用带有 webroot 插件的 Certbot 工具来获取 SSL 证书文件:

sudo certbot certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

如果成功获取SSL证书,certbot将打印以下消息:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2019-01-17. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - If you lose your account credentials, you can recover through
   e-mails sent to admin@example.com.
 - 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

现在您已经拥有了证书文件,请编辑您的域虚拟主机配置,如下所示:

/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80> 
  ServerName example.com
  ServerAlias www.example.com

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com

  Protocols h2 http/1.1

  <If "%{HTTP_HOST} == 'www.example.com'">
    Redirect permanent / https://example.com/
  </If>

  DocumentRoot /var/www/example.com/public_html
  ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
  CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

  # Other Apache Configuration

</VirtualHost>

通过上面的配置,我们强制使用 HTTPS并从 www 版本重定向到非 www 版本。可以根据您的需要自由调整配置。

重新加载 Apache 服务以使更改生效:

sudo systemctl reload apache2

使用打开您的网站https://,您会注意到一个绿色的锁图标。

如果您使用以下命令测试您的域SSL 实验室服务器测试,您将获得 A+ 等级,如下所示:

自动续订 Let's Encrypt SSL 证书#

Let’s Encrypt 的证书有效期为 90 天。为了在证书过期之前自动续订证书,certbot 包创建了一个每天运行两次的 cronjob,并将在证书到期前 30 天自动续订任何证书。

更新证书后,我们还必须重新加载 Apache 服务。附加--renew-hook "systemctl reload apache2" to the /etc/cron.d/certbot文件,因此它看起来如下所示:

/etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload apache2"

要测试续订过程,请使用 certbot--dry-run switch:

sudo certbot renew --dry-run

如果没有错误,则表示更新过程成功。

结论#

在本教程中,您使用 Let’s Encrypt 客户端 certbot 来获取您的域的 SSL 证书。您还创建了 Apache 代码片段以避免重复代码,并将 Apache 配置为使用证书。在本教程结束时,您已经设置了一个用于自动证书续订的 cronjob。

如果您想了解有关 Certbot 脚本的更多信息,他们的文档是一个很好的起点。

如果您有任何问题或反馈,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Debian 9 上使用 Let's Encrypt 保护 Apache 的相关文章

随机推荐

  • 如何在 FirewallD 中打开特定端口

    防火墙是大多数现代 Linux 发行版使用的防火墙管理解决方案 在本教程中 您将学习如何在firewalld 中打开端口 本教程介绍如何在firewalld 中为公共 特定IP 或IP 范围打开端口 找到我们的上一篇文章关于Firewall
  • 在 Windows 上安装 Python 3.x 的综合指南

    Python 是一种广泛使用的通用编程语言 以其简单性 可读性和广泛的应用范围而闻名 无论您是开发 Web 应用程序 执行数据分析还是自动化任务 Python 都是一个绝佳的选择 截至 2023 年 7 月更新本文时 最新的 Python
  • 如何在一个 Cron 作业中运行多个命令

    Crontab 是一个用于在 Unix Linux 系统上定期运行计划任务的实用程序 它允许我们安排多个 cron 作业同时运行 我们可以安排任何 shell 命令或脚本在终端上执行 crontab 中的每个计划作业均由换行符分隔 我们还可
  • Linux 中的 tee 命令及示例

    tee 是 Linux 中的一项命令 它从标准输入读取并将输出写入标准输出和一个或多个文件 从而有效地复制输入 它通常用在 shell 脚本中 将命令输出发送到文件和控制台 Linux 中的 Tee 命令主要与其他命令结合使用 它读取输入并
  • 如何在 Debian 10/9 上安装 Mono

    Mono 项目由微软赞助 它是 Microsoft NET Framework 的开源跨平台实现 Mono 支持大多数具有 32 位和 64 位架构的现代操作系统 本教程帮助您逐步在 Debian 10 和 Debian 9 系统上安装 M
  • 如何在 Ubuntu 18.04 和 16.04 上设置 Squid 代理服务器

    Squid 是类 Unix 操作系统中最流行的代理服务器 它还用于网页过滤 Squid 还可用作 HTTP HTTPS 和 FTP 协议的缓存代理服务器 本文将帮助您在 Ubuntu 18 10 18 04 LTS 16 04 LTS 和
  • 如何在 Linux 中删除超过 30 天的文件

    定期从服务器中清除旧的未使用文件是最佳实践 例如 如果我们每天 每小时在服务器上运行文件或数据库备份 那么服务器上将会产生很多垃圾 所以要定期清洁 为此 您可以从备份目录中找到旧文件并清理它们 本文向您介绍如何查找和删除超过 30 天的文件
  • 如何使用 Google Chrome 无头功能

    Google Chrome 最新版本发布 新增实用功能无头镀铬 无头 Chrome 对于浏览器自动化很有用 您可以使用命令行和编程语言捕获任何网页的屏幕截图 而无需启动 Chrome GUI 它还支持打印网页DOM并创建网页的pdf 本教程
  • Laravel:从 Apache 中的 URL 中删除“public/index.php”

    当您创建新的 Laravel 项目时 默认配置要求您在 URL 中包含 public index php 以访问您的应用程序 这可能很麻烦 并且会让您的 URL 看起来笨拙且不专业 幸运的是 这个问题有一个简单的解决方案 在本教程中 我们将
  • 如何在 Fedora 上安装 Java 11/8

    Java 是一种流行的应用程序 系统软件和 Web 应用程序编程语言 Oracle Java 8 和 Java 11 需要订阅才能下载和使用 因此 我们使用 OpenJDK 在 Fedora Linux 系统上安装 Java 本教程将帮助您
  • Apt Upgrade 与 Apt Dist-upgrade:主要区别

    The 高级打包工具 APT 是一个强大的包管理系统 用于 Debian Ubuntu 及其衍生版本 它简化了在基于 Linux 的系统上安装 升级和删除软件的过程 在各种APT命令中 易于升级 and apt dist upgrade 在
  • 如何在 MySQL 中创建新用户并授予权限

    MySQL是一个关系数据库管理系统 用于以表和记录的形式存储数据 您可以使用 SQL 语句或编程语言插入 修改或检索数据 它允许我们创建新用户并授予对数据库表的权限 最好的做法是始终对所有数据库使用单独的用户 这将确保应用程序无法访问其他应
  • 如何克隆 Git 存储库中的所有远程分支

    Git 是开发人员的必备工具 可实现高效的代码版本控制 管理和协作 Git 的核心功能之一是将远程存储库克隆到本地计算机的能力 虽然基本的 git clone 命令仅克隆默认分支 但有时您可能需要克隆 Git 存储库中的所有远程分支 在本文
  • 如何为 PHP 安排 Cron 作业:分步指南

    Cron 是基于 Unix 的操作系统中的任务调度程序 它用于安排命令或脚本在固定时间 日期或间隔定期运行 此功能对于自动化系统维护或管理任务特别有用 Cron 的一个常见用例是自动执行用 PHP 一种流行的服务器端脚本语言 编写的脚本 本
  • 20 个常见的 Linux 面试问题及解答

    Linux 是世界上最流行的操作系统之一 广泛应用于从 Web 服务器到移动设备的各种应用中 因此 对具有 Linux 专业知识的开发人员和系统管理员的需求很高 无论您是经验丰富的 Linux 专业人士还是初学者 深入了解常见的 Linux
  • 如何在 Debian 9 上安装 Node.js 和 npm

    Node js 是一个基于 Chrome 的 JavaScript 引擎构建的开源跨平台 JavaScript 运行时环境 允许服务器端执行 JavaScript 代码 它主要用于构建服务器端应用程序 但作为全栈和前端解决方案也非常流行 n
  • 如何在 Ubuntu 18.04 上安装 GCC 编译器

    GNU 编译器集合 GCC 是 C C Objective C Fortran Ada Go D 编程语言 许多开源项目 包括 GNU 工具和 Linux 内核 都是用 GCC 编译的 本教程介绍了在 Ubuntu 18 04 上安装 GC
  • 如何在 Ubuntu 20.04 上安装 CouchDB

    Apache CouchDB 是由 Apache 软件基金会开发的免费开源 NoSQL 数据库 它可以用作单节点或集群数据库 CouchDB 服务器将其数据存储在命名数据库中 其中包含具有以下内容的文档JSON结构 每个文档由许多字段和附件
  • 如何在 Ubuntu 18.04 上安装 Spotify

    Spotify是一种数字音乐流媒体服务 可让您即时访问数百万首歌曲 从经典老歌到最新热门歌曲 在本教程中 我们将向您展示如何在 Ubuntu 18 04 桌面上安装 Spotify 相同的步骤适用于 Ubuntu 16 04 和任何基于 U
  • 在 Debian 9 上使用 Let's Encrypt 保护 Apache

    Let s Encrypt 是由互联网安全研究小组 ISRG 创建的证书颁发机构 它通过完全自动化的流程提供免费的 SSL 证书 旨在消除手动证书创建 验证 安装和续订 Let s Encrypt 颁发的证书自颁发之日起 90 天内有效 并