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

2023-10-26

Let’s Encrypt 是由互联网安全研究小组 (ISRG) 开发的免费、自动化、开放的证书颁发机构。 Let’s Encrypt 颁发的证书自颁发之日起 90 天内有效,并且受到当今所有主要浏览器的信任。

在本教程中,我们将介绍在运行 Apache 作为 Web 服务器的 CentOS 7 服务器上安装免费的 Let’s Encrypt SSL 证书所需的步骤。我们将使用 certbot 实用程序来获取和续订 Let’s Encrypt 证书。

先决条件#

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

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

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

yum install mod_ssl openssl

安装证书机器人#

Certbot 是一款工具,可简化从 Let’s Encrypt 获取 SSL 证书并在服务器上自动启用 HTTPS 的过程。

certbot 软件包可从 EPEL 安装。如果EPEL 存储库您的系统上尚未安装,您可以使用以下命令安装它:

sudo yum install epel-release

启用 EPEL 存储库后,输入以下命令安装 certbot 软件包:

sudo yum 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 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
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

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

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

sudo systemctl reload httpd

现在,我们可以使用 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 key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-12-07. 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 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

CentOS 7 附带 Apache 版本 2.4.6,其中不包括SSLOpenSSLConfCmd指示。该指令仅在 Apache 2.4.8 更高版本上可用,用于配置 OpenSSL 参数,例如 Diffie–Hellman 密钥交换 (DH)。

我们必须使用 Let's Encrypt SSL 证书和生成的 DH 文件创建一个新的组合文件。为此,请键入:

cat /etc/letsencrypt/live/example.com/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/example.com/cert.dh.pem

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

/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

  <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/cert.dh.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

  # Other Apache Configuration

</VirtualHost>

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

重新启动 Apache 服务以使更改生效:

sudo systemctl restart httpd

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

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

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

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

Run the crontab命令创建一个新的 cronjob ,它将更新证书,创建一个包含 DH 密钥的新组合文件并重新启动 apache :

sudo crontab -e
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 httpd"

保存并关闭文件。

要测试续订过程,您可以使用 certbot 命令,后跟--dry-run switch:

sudo certbot renew --dry-run

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

结论#

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

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

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

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

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

  • 在改造库中禁用 SSL 证书检查

    我正在使用 android 中的改造来连接服务器 public class ApiClient public static final String BASE URL https example com private static Ret
  • 我们可以在密钥库中加载多个证书和密钥吗?

    我们可以在密钥库中加载多个证书和密钥吗 是否始终需要仅加载对 即证书和密钥一起 如果密钥库有多个证书和密钥 当 Java SSL 尝试作为服务器建立连接时会选择哪一个 尽管这取决于 KeyStore 类型 但通常您可以在单个存储中存储多个私
  • 同一服务器,SSL 和非 SSL

    Apache 2 x 中是否可以在同一服务器上同时运行 SSL 协议和非 SSL 协议 所以如果我访问http example com 非 SSL 和https example com SSL 它们都可用 如果是这样 我需要创建一个虚拟主机
  • 在 Jetty 运行时设置 ssl 密钥库

    是否可以在运行时更改密钥库 目前我正在设置 SSL 然后再执行 server start sslContextFactory setTrustStore ks sslContextFactory setTrustStorePassword
  • 将子域重定向到新域

    大家好 尝试让 301 重定向正常工作但遇到了麻烦 我需要将 sub domain1 com 重定向到 www domain2 com 并确保所有文件名或参数都随之发送 这就是我正在尝试的 RewriteCond HTTP HOST dom
  • Apache mod_rewrite:在 Windows 计算机上使用 PHP 脚本的 RewriteMap 指令

    这已经让我发疯了 我似乎无法让 RewriteMap 指令适用于 Windows 上的 php 脚本 这是我的 httpd conf 文件中的相关片段
  • 如何在 Apache POI 中获取 Excel 空白单元格值?

    我有一个巨大的 Excel 文件 其中包含大量列 如下所示 Column1 Column2 Column3 Column4 Column5 abc def ghi mno pqr 这是我编写的用于打印这些值的代码 try FileInput
  • 在生产 PostgreSQL 连接中将rejectUnauthorized 设置为 false 可以吗?

    我们最近转移到 Heroku 并在尝试将我们的应用程序连接到数据库时 它不断拒绝我们的查询 并显示消息 自签名证书 传入rejectUnauthorized解决了这个问题 但现在我想知道 我们应该在生产中这样做吗 如果没有 我们连接到 He
  • 在 Maven Shade 插件中包含依赖项

    我正在尝试使用 Apache 的 commons lang3 创建一个可部署的 jar 但是 我的 Hadoop 所在的 AWS 集群不包含此库 因此我收到了 classNotFoundException 我想我需要手动添加该依赖项 但我在
  • RCurl 和自签名证书问题

    我在获取时遇到问题RCurl功能getURL访问使用自签名证书的服务器上的 HTTPS URL 我在 Mac OS X 10 9 2 上运行 R 3 0 2 我已阅读FAQ http www omegahat org RCurl FAQ h
  • 在 Java Web 应用程序中处理 X-FORWARDED-PROTO 标头

    任何人都可以指导我与X 转发 原型 https developer mozilla org en US docs Web HTTP Headers X Forwarded Proto部署到 Apache Tomcat 的 Java Web
  • 比较 nginx+Apache+mod_wsgi 与 nginx+uWSGI?

    在生产中使用 nginx Apache mod wsgi 与 nginx uWSGI vurtualenv 有何优缺点 我在自 2007 年以来开发的 mod wsgi 中看到了第一个变体的优点 并且具有更稳定的版本和易于管理 第二种变体的
  • 重定向时需要 SSL 吗?

    我从一位我不擅长的客户那里继承了一种奇怪的情况 该客户端有 3 个域名 主要域名是 例如domain a com 他们还将domain b com 和domain c com 重定向到domain a com 所有域都位于同一服务器上 所以
  • 出现错误 /usr/bin/env: 节点:权限被拒绝

    我已经在我的服务器 Centos 上完成了 ODOO v9 安装 一切都已安装成功 登录页面也可以正常工作 但登录后我收到一个包含以下错误的页面 usr bin env node Permission Denied 我尝试更改权限 但我的问
  • Vagrant 的端口转发不起作用[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在最后遇到了一个小问题入门指南vagrant http vagrantup com docs getting started ports html
  • 了解 C# 中的自签名证书

    最近我遇到了这个c 代码 var dn new X500DistinguishedName CN appSettings CommonName OU appSettings OrganizationalUnit X500Distinguis
  • Java 应用程序中 PKIX 路径构建失败

    将应用程序从 Windows 2000 迁移到 Windows 2008 R2 Server 后 我花了将近一周的时间才让我的应用程序正常运行 步骤 安装Java JDK 1 7 0 25 设置系统环境变量JAVA HOME to C Pr
  • 如何将亚马逊颁发的免费证书配置到nginx.config

    我已经安装了nginx服务器在Amazon Linux 2环境 在创建弹性负载均衡器期间 我创建了 Amazon 的免费证书 现在 我想通过以下方式访问我的服务器https port 443 我该如何配置这个SSL证书在nginx conf
  • 使用 HttpsURLConnection 时如何覆盖 Android 发送到服务器的密码列表?

    在 TLS 协商期间 客户端将受支持的密码列表发送到服务器 服务器选择一个 然后开始加密 当我使用时 我想更改 Android 发送到服务器的密码列表HttpsURLConnection用于沟通 我知道我可以使用setSSLSocketFa
  • 在 CentOS 6.4 上的 apache 2.0 虚拟主机中创建子域

    我需要在网络服务器上创建子域阿帕奇2 0 CentOS 6 4 PageSpeed Apc 我没有 DNS 服务器 我需要使用虚拟主机 我的代码 NameVirtualHost xx xx xx xx

随机推荐

  • 如何在 PHP 中计算数组元素

    您可以使用 PHPcount or sizeof 函数获取数组中元素或值的数量 这count and sizeof 对于已使用空数组初始化的变量 方法返回 0 如果数组未初始化 您将看到错误 在这种情况下 您可以使用 isset 函数来检查
  • 如何禁用 Apache 中的目录列表

    Apache 是最流行的开源 Web 服务器之一 全球许多网站都在使用它 它的功能之一是能够在不存在索引文件时列出目录及其内容 此功能虽然对某些用途很方便 但可能会向公众公开有关网站结构或内容的敏感信息 在本文中 我们将引导您了解如何禁用
  • 如何在 Ubuntu 16.04 和 14.04 LTS 上安装 phpPgAdmin

    phpPg管理员是一个 Web 界面 用于以非常简单的方式访问和管理 PostgreSQL 数据库 我们可以轻松地创建新的数据库 数据库中的表 用户 存储过程等 此外 我们还可以执行PL pgSQL和其他存储过程 它还提供了从 Web 界面
  • ERROR 1114 (HY000): 表‘tablename’已满(解决方案)

    MySQL 是一种广泛使用的开源关系数据库管理系统 RDBMS 可实现高效的数据存储和检索 但是 用户偶尔可能会遇到错误 例如 ERROR 1114 HY000 The table table name is full 消息 当达到表的存储
  • 什么是Fish(友好交互式SHell)?

    鱼 或者 友好的交互式SHell 是一个 Unix shell 其设计重点是用户友好性和交互使用 它于 2005 年推出 由于其独特的功能 有用的默认设置以及对愉快的用户体验的关注 赢得了众多追随者 鱼的主要特征和特点 交互式自动完成 Fi
  • Unix/Linux 中什么是僵尸进程

    僵尸进程是指已完成执行但其父进程尚未终止并释放其资源的进程 在 Unix Linux 中 处于这种状态的进程被视为僵尸进程 这些进程会占用宝贵的系统资源 如果处理不当 可能会导致稳定性问题 以下是了解和处理 Unix Linux 中僵尸进程
  • 您绝对需要的 7 件在家办公必需品

    甚至在 COVID 19 大流行爆发之前 很多人就在家工作 然而 他们中的大多数人并不是全职在家工作 这就是为什么这种强制性的远程办公可能异常难以适应 虽然业务模式或工作实践的每次变化都需要一些时间来适应 但您需要记住 有很多方法可以稍微促
  • 在 Laravel 中设置文件权限的正确方法:详细教程

    Laravel 是一种流行的 Web 应用程序开发 PHP 框架 非常注重安全性 在 Laravel 的众多安全考虑因素中 正确设置文件权限至关重要 如果没有正确的权限 您的应用程序可能容易受到攻击 或者可能由于缺乏必要的访问权限而发生故障
  • 如何保护 Apache 中的特定 URL

    阻止用户访问特定网页有助于防止他们接触敏感信息 如果您将站点托管在 Apache 服务器上 则可以通过锁定特定 URL 来锁定站点 如果您只需要阻止访问单个页面 则可以锁定 URL 而无需锁定整个站点 使用 Apache 有多种方法可以做到
  • Bash 读取命令

    Bash 附带了许多内置命令 您可以在命令行或 shell 脚本中使用这些命令 在本文中 我们将探讨内置read命令 Bash read内置 read是一个 bash 内置命令 它从标准输入 或文件描述符 读取一行并将该行拆分为单词 第一个
  • 如何在 CentOS 8 上安装 Visual Studio Code

    视觉工作室代码是微软开发的开源 跨平台代码编辑器 它具有内置的调试支持 嵌入式Git控制 语法突出显示 代码完成 集成终端 代码重构和片段 本文介绍如何在 CentOS 8 上安装 Visual Studio Code 先决条件 这些说明假
  • 如何在 CentOS 8 上安装和使用 FFmpeg

    FFmpeg 是一个用于处理多媒体文件的免费开源工具集合 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率 捕获流音频
  • 如何在 Debian 9 上安装和配置 Redis

    Redis 是一个开源内存键值数据存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 包括监控 通知 自动故障转移 它还通过 Redis C
  • Python 列表排序

    对数据进行排序是使用 Python 时最常见的任务之一 例如 您可能希望按姓名对团队成员列表进行排序 或按优先级对项目列表进行排序 本文介绍了如何排序Python 中的列表 Python sort and sorted 在 Python 中
  • 如何在 Debian 9 上安装 TensorFlow

    TensorFlow是由 Google 构建的免费开源机器学习平台 许多组织都在使用它 包括 Twitter PayPal 英特尔 联想和空中客车公司 TensorFlow 可以在 Python 虚拟环境中安装在系统范围内 作为Docker
  • ​如何从 Ubuntu 16.04 升级到 18.04

    最新的 Ubuntu LTS 版本 Ubuntu 18 04 Bionic Beaver 于 2018 年 4 月 26 日发布 支持期为 5 年 直至 2023 年 4 月 在本教程中 我们将向您展示如何升级 Ubuntu 16 04 安
  • Netcat (nc) 命令及示例

    网络猫 或nc 是一个命令行实用程序 它使用 TCP 或 UDP 协议跨网络连接读取和写入数据 它是网络和系统管理员武器库中最强大的工具之一 被视为网络工具中的瑞士军刀 Netcat 是跨平台的 可用于 Linux macOS Window
  • 在 Ubuntu 20.04 上使用 Let's Encrypt 保护 Apache

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

    虚拟盒子是一个开源 跨平台的虚拟化平台 它支持多种来宾操作系统 包括 Linux 和 Windows 并允许您同时运行多个虚拟机 在本教程中 我们将解释如何在 CentOS 8 上安装 VirtualBox 在 CentOS 8 上安装 V
  • 在 CentOS 7 上使用 Let's Encrypt 保护 Apache

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费 自动化 开放的证书颁发机构 Let s Encrypt 颁发的证书自颁发之日起 90 天内有效 并且受到当今所有主要浏览器的信任 在本教程中 我们将介绍在运行 Apa