在 CentOS 8 上使用 Let's Encrypt 保护 Apache

2023-11-12

Let’s Encrypt 是由互联网安全研究小组 (ISRG) 开发的免费、自动化、开放的证书颁发机构,提供免费的 SSL 证书。

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

本教程介绍如何在运行 Apache 作为 Web 服务器的 CentOS 8 上安装免费的 Let’s Encrypt SSL 证书。我们将使用 certbot 工具来获取和续订证书。

先决条件#

在继续之前,请确保满足以下先决条件:

  • 有一个域名指向您的公共服务器IP。我们将使用example.com.
  • 阿帕奇已安装并在您的服务器上运行虚拟主机为您的域配置。
  • 端口 80 和 443 在您的计算机中打开firewall .

安装 SSL 加密 Web 服务器所需的以下软件包:

sudo dnf install mod_ssl openssl

安装 mod_ssl 软件包后,应该创建一个自签名的本地主机的密钥和证书文件。如果文件没有自动创建,您可以使用openssl命令:

sudo openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes \  -out /etc/pki/tls/certs/localhost.crt \  -keyout /etc/pki/tls/private/localhost.key

安装证书机器人#

Certbot 是一款免费的命令行工具,可简化从服务器获取和续订 Let's Encrypt SSL 证书以及在服务器上自动启用 HTTPS 的过程。

certbot 软件包不包含在标准 CentOS 8 存储库中,但可以从供应商的网站下载。

运行以下命令wget以 root 身份执行命令或须藤用户将 certbot 脚本下载到/usr/local/bin目录:

sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto

下载完成后,使文件可执行 :

sudo chmod +x /usr/local/bin/certbot-auto

生成强大的 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 apache /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

为了避免重复代码并使配置更易于维护,请创建以下两个配置片段:

/etc/httpd/conf.d/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/httpd/conf.d/ssl-params.conf
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

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

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

上面的代码片段使用的是推荐的削片机Mozilla。它支持 OCSP Stapling、HTTP 严格传输安全 (HSTS)、Dh 密钥,并强制执行少量以安全为中心的 HTTP 标头。

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

sudo systemctl reload httpd

现在,您可以使用 webroot 插件运行 certbot 脚本并获取 SSL 证书文件:

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

成功后,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 2020-01-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto 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

现在一切都已设置完毕,请编辑您的域虚拟主机配置,如下所示:

/etc/httpd/conf.d/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 /var/log/httpd/example.com-error.log
  CustomLog /var/log/httpd/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 版本。它还支持 HTTP/2,这将使您的网站更快、更健壮。可以根据您的需要自由调整配置。

重新启动 Apache 服务:

sudo systemctl restart httpd

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

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

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

Let’s Encrypt 证书的有效期为 90 天。要在证书过期之前自动续订证书,我们将创建一个定时任务它将每天运行两次,并在证书到期前 30 天自动续订任何证书。

运行以下命令创建一个新的 cronjob,它将更新证书并重新启动 Apache:

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload httpd\"" | sudo tee -a /etc/crontab > /dev/null

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

sudo /usr/local/bin/certbot-auto renew --dry-run

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

结论#

在本教程中,我们讨论了如何在 CentOS 上使用 Let’s Encrypt 客户端 certbot 为您的域获取 SSL 证书。我们还向您展示了如何配置 Apache 以使用证书并设置 cronjob 来自动更新证书。

要了解有关 Certbot 脚本的更多信息,请访问证书机器人文档 .

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

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

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

随机推荐

  • 如何在 CentOS / RHEL / Fedora 上安装 Symfony 2 框架

    Symfony 是一个用 PHP 编写的 Web 应用程序框架 它提供了一组可重用的 PHP 组件 Symfony 2 8 是 Symfony 2 框架系列中当前可用的稳定版本 Symfony 为您的应用程序提供 30 个独立组件 本教程将
  • 如何在 Ubuntu 16.04 上安装 Zend 框架

    Zend框架3 是可用于创建应用程序的最新版本 最新版本提供了比以前版本更快的应用程序 Zend 是一个用于开发 Web 应用程序和服务的开源框架 它使用 100 面向对象的代码 本教程将帮助您在 Ubuntu 16 04 LTS 系统上安
  • 如何使用 DNF 从 Fedora 22 升级到 Fedora 23

    软呢帽23已发布并可供下载和安装 本文将帮助您使用以下命令从 Fedora 22 升级到 Fedora 23DNF yum 的替代 命令行实用程序 检查 Fedora 版本 使用以下命令之一检查您当前的 Fedora 系统版本 Fedora
  • 如何创建具有授予权限的新 MySQL 用户

    MySQL 是一个关系数据库管理系统 用于以表格格式存储数据 它为用户帐户和授予权限提供了高度的灵活性 本教程将为您提供创建 MySQL 用户帐户和授予数据库权限的简短概述 创建具有权限的MySQL用户 在这里 我们以对所有数据库拥有完全权
  • 通过贸易展览曝光促进您的业务

    中小企业是每个经济体的支柱 由于多种原因 每个州都应该鼓励和支持此类小公司 首先 这些企业对市场变化和供需失衡的反应速度相当快 其次 中小型企业通常具有社区联系紧密的特点 员工之间相互了解 从而产生更强烈的团结感 所有这些特点都意味着这类业
  • 如何列出 Ubuntu 上已安装的软件包

    在本教程中 我们将向您展示如何列出和过滤 Ubuntu 上已安装的软件包 当您需要在另一台计算机上安装相同的软件包或想要重新安装系统时 了解如何列出 Ubuntu 系统上已安装的软件包会很有帮助 我们还将向您展示如何检查是否安装了特定的软件
  • 如何提取(解压缩)tar.xz 文件

    The tar命令允许您创建和提取 tar 档案 它支持多种压缩程序 例如 gzip bzip2 lzip lzma lzop xz 和 compress Xz是一种基于LZMA算法的流行的文件压缩算法 按照约定 压缩后的 tar 存档的名
  • 如何在 Debian 9 上安装 Apache Maven

    Apache Maven 是一个开源项目管理和理解工具 主要用于 Java 项目 Maven 使用项目对象模型 POM 它本质上是一个 XML 文件 其中包含有关项目 配置详细信息 项目依赖项等的信息 在本教程中 我们将向您展示在 Debi
  • 使用 SSH 配置文件

    如果您经常通过 SSH 连接到多个远程系统 您会发现记住所有远程 IP 地址 不同的用户名 非标准端口和各种命令行选项即使不是不可能 也是很困难的 一种选择是创建 bash 别名对于每个远程服务器连接 然而 对于这个问题还有另一种更好 更直
  • 如何在 Ubuntu 20.04 上更改主机名

    主机名是在操作系统安装期间设置的 或者是在创建虚拟机时动态分配给虚拟机的 本指南介绍了如何在 Ubuntu 20 04 上设置或更改主机名 而无需重新启动系统 了解主机名 主机名是标识网络上设备的标签 同一网络上不应有两台或更多台具有相同主
  • 如何在Ubuntu上卸载软件包

    有时 您可能会在 Ubuntu 上安装一个应用程序 但在尝试后 您会发现该应用程序不适合您 在这种情况下 您可能需要卸载该软件包 在本文中 我们将向您展示如何使用图形化的 Ubuntu 软件中心 以及通过命令行 使用apt or apt g
  • 如何在 Ubuntu 20.04 上安装和使用 Curl

    curl是一个命令行实用程序 用于从远程服务器传输数据或向远程服务器传输数据 和curl 您可以使用支持的协议之一下载或上传数据 包括 HTTP HTTPS SCP SFTP and FTP 本文介绍了如何安装Curl在 Ubuntu 20
  • 如何使用 Linux 屏幕

    您是否曾经遇到过这样的情况 您在远程计算机上执行长时间运行的任务 突然连接断开 SSH 会话终止 您的工作丢失 好吧 我们所有人都曾在某个时刻发生过这种事 不是吗 幸运的是 有一个实用程序叫做screen这使我们能够恢复会议 介绍 Scre
  • 如何在 Ubuntu Linux 中更改 root 密码

    root 用户 或超级用户 是所有 Linux 和类 Unix 系统上都存在的特殊用户帐户 它可以完全访问系统上的每个命令和任何资源 没有任何限制 如果您从其他 Linux 发行版转到 Ubuntu 您可能想知道默认 root 密码是什么或
  • 如何在 CentOS 8 上安装 Pip

    Pip 是一个包管理系统 允许您安装 删除以及以其他方式管理用 Python 编写的软件包 它可用于从 Python 包索引 PyPI 和其他索引安装包 在本教程中 我们将解释如何在 CentOS 8 上安装适用于 Python 2 和 3
  • 如何在 Vim / Vi 中保存文件并退出编辑器

    对于许多在命令行上花费大量时间的用户来说 Vim 是首选的文本编辑器 与其他编辑器不同 Vim 有多种操作模式 这对于新用户来说可能有点吓人 Vim 或其前身 Vi 预装在 macOS 和几乎所有 Linux 发行版上 当您遇到您最喜欢的编
  • 如何创建和选择 MySQL 数据库

    MySQL是最流行的开源关系数据库管理系统 本教程介绍如何通过命令行创建 MySQL 或 MariaDB 数据库 在你开始之前 我们假设您的系统上已经安装了 MySQL 或 MariaDB 服务器 所有命令均以管理用户身份执行 最小特权创建
  • 如何提取(解压缩)Tar Bz2 文件

    The tar命令允许您创建和提取 tar 档案 它支持多种压缩程序 例如 gzip bzip2 lzip lzma lzop xz 和 compress Bzip2 是最流行的 tar 文件压缩算法之一 按照约定 压缩后的 tar 存档的
  • 如何检查 Linux 中的内存使用情况

    在对系统或应用程序速度缓慢或行为不当进行故障排除时 首先要检查的事情之一是系统内存使用情况 本文介绍如何使用几个不同的命令检查 Linux 中的 RAM 使用情况 free命令 free是检查Linux系统内存使用情况最常用的命令 它显示有
  • 在 CentOS 8 上使用 Let's Encrypt 保护 Apache

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费 自动化 开放的证书颁发机构 提供免费的 SSL 证书 Let s Encrypt 颁发的证书受到所有主要浏览器的信任 并且自颁发之日起 90 天内有效 本教程介绍如何