如何在 CentOS 7 上为 Apache 创建 SSL 证书

本文涉及的产品
云防火墙,500元 1000GB
简介: 如何在 CentOS 7 上为 Apache 创建 SSL 证书

简介

TLS,即传输层安全协议,及其前身 SSL,即安全套接字层,是用于将普通流量包装在受保护的加密包装中的网络协议。

使用这项技术,服务器可以在服务器和客户端之间安全地发送流量,而不会被外部方拦截。证书系统还帮助用户验证他们正在连接的站点的身份。

在本指南中,您将为 CentOS 7 服务器上的 Apache Web 服务器设置自签名的 SSL 证书。

先决条件

在开始本指南之前,首先需要完成一些步骤。

  • 您需要访问一个具有sudo权限的非根用户的 CentOS 7 服务器。如果尚未配置此用户,您可以运行 CentOS 7 初始服务器设置指南来创建此帐户。
  • 您还需要按照《在 CentOS 7 上安装 Apache Web 服务器》教程中的第 1 步中所述安装 Apache。
    完成这些步骤后,您可以通过 SSH 以非根用户帐户登录并继续进行本教程。

步骤 1 — 安装 mod_ssl

为了设置自签名证书,您首先必须确保服务器上安装了 mod_ssl,这是一个提供 SSL 加密支持的 Apache 模块。您可以使用 yum 命令安装 mod_ssl

sudo yum install mod_ssl

模块将在安装过程中自动启用,并且在重新启动后,Apache 将能够开始使用 SSL 证书。您无需采取任何额外步骤即可准备好使用 mod_ssl

步骤 2 — 创建新证书

现在 Apache 已准备好使用加密,您可以继续生成新的 SSL 证书。TLS/SSL 通过使用公共证书和私钥的组合来工作。SSL 密钥在服务器上保密。它用于加密发送给客户端的内容。SSL 证书与请求内容的任何人公开共享。它可用于解密由相关 SSL 密钥签名的内容。

/etc/ssl/certs 目录可用于保存公共证书,应该已经存在于服务器上。您还需要创建一个 /etc/ssl/private 目录,用于保存私钥文件。由于此密钥的保密对于安全性至关重要,因此重要的是锁定权限以防止未经授权的访问:

sudo mkdir /etc/ssl/private
sudo chmod 700 /etc/ssl/private

现在,您可以通过输入以下命令一次性使用 OpenSSL 创建自签名密钥和证书对:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

您将被要求回答一系列问题。在讨论这些问题之前,让我们看看命令中发生了什么:

  • openssl:这是用于创建和管理 OpenSSL 证书、密钥和其他文件的基本命令行工具。
  • req:此子命令指定您要使用 X.509 证书签名请求(CSR)管理。“X.509” 是 SSL 和 TLS 遵循的公钥基础设施标准,用于其密钥和证书管理。您要创建一个新的 X.509 证书,因此使用此子命令。
  • -x509:这进一步修改了先前的子命令,告诉实用程序您要创建自签名证书,而不是生成证书签名请求,这通常会发生。
  • -nodes:这告诉 OpenSSL 跳过使用密码短语保护您的证书的选项。当服务器启动时,您需要 Apache 能够读取文件,而无需用户干预。密码短语会阻止这种情况发生,因为您需要在每次重新启动后输入它。
  • -days 365:此选项设置证书被视为有效的时间长度。在此处设置为一年。
  • -newkey rsa:2048:这指定您要同时生成新证书和新密钥。您之前没有创建用于签署证书的密钥,因此需要同时创建它和证书。rsa:2048 部分告诉它生成一个长度为 2048 位的 RSA 密钥。
  • -keyout:此行告诉 OpenSSL 在哪里放置您正在创建的生成私钥文件。
  • -out:这告诉 OpenSSL 在哪里放置您正在创建的证书。

如上所述,这些选项将创建一个密钥文件和一个证书。您将被要求回答有关服务器的一些问题,以便将信息嵌入证书中。

适当填写提示。

所有您创建的文件将放置在 /etc/ssl 目录的适当子目录中。

由于您正在使用 OpenSSL,还应该创建一个强大的 Diffie-Hellman 组,用于与客户端协商完美前向保密。

您可以通过输入以下命令来执行此操作:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

这可能需要几分钟,但完成后,您将在 /etc/ssl/certs/dhparam.pem 中拥有一个强大的 DH 组,可以在您的配置中使用。

步骤 3 —— 设置证书

您现在已经拥有了完成界面所需的所有组件。接下来要做的是设置虚拟主机以显示新证书。

/etc/httpd/conf.d 目录中打开一个新文件:

sudo vi /etc/httpd/conf.d/your_domain_or_ip.conf

粘贴以下最小的 VirtualHost 配置:

<VirtualHost *:443>
    ServerName your_domain_or_ip
    DocumentRoot /var/www/html
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
    SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>

确保更新 ServerName 行以匹配您打算如何寻址您的服务器。这可以是主机名、完整域名或 IP 地址。确保您选择的内容与您创建证书时选择的“通用名称”匹配。

设置安全的 SSL 参数

接下来,您将添加一些额外的 SSL 选项,以增加站点的安全性。您将使用的选项是来自 Cipherlist.eu 的建议。该网站旨在为流行软件提供易于消化的加密设置。

配置中有一些您可能希望修改的部分。首先,您可以为上游请求添加您首选的 DNS 解析器到 resolver 指令中。本指南中使用了 Google 的解析器,但如果您有其他偏好,可以进行更改。

最后,您应该花一点时间了解 HTTP 严格传输安全性(HSTS),特别是关于“preload”功能。预加载 HSTS 可提供增强的安全性,但如果意外启用或错误启用可能会产生深远的后果。在本指南中,您不会预加载这些设置,但如果您确信理解了其影响,可以进行修改。

您将进行的其他更改是删除 +TLSv1.3 并注释掉 SSLSessionTicketsSSLOpenSSLConfCmd 指令,因为这些在 CentOS 7 随附的 Apache 版本中不可用。

VirtualHost 块结束后粘贴来自该网站的设置:

. . .
</VirtualHost>
. . .
# 开始复制的文本
# 来自 https://cipherli.st/
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
# 需要 Apache 2.4.36 & OpenSSL 1.1.1
SSLProtocol -all +TLSv1.2
# SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
# 旧版本
# SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
# 暂时禁用预加载 HSTS。如果您理解其影响,可以使用包含“preload”指令的已注释的标题行。
#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
# 需要 Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# 需要 Apache >= 2.4.11
# SSLSessionTickets Off

完成这些更改后,保存并关闭文件。

创建从 HTTP 到 HTTPS 的重定向(可选)

目前,服务器将提供未加密的 HTTP 和加密的 HTTPS 流量。为了更好的安全性,在大多数情况下建议自动将 HTTP 重定向到 HTTPS。如果您不需要此功能,可以安全地跳过此部分。

要将所有流量重定向为 SSL 加密,创建并打开一个以 .conf 结尾的文件,位于 /etc/httpd/conf.d 目录中:

sudo vi /etc/httpd/conf.d/non-ssl.conf

在其中,创建一个 VirtualHost 块以匹配端口 80 上的请求。在其中,使用 ServerName 指令再次匹配您的域名或 IP 地址。然后,使用 Redirect 匹配任何请求并将其发送到 SSL VirtualHost。确保包含尾随斜杠:

<VirtualHost *:80>
       ServerName your_domain_or_ip
        Redirect "/" "https://your_domain_or_ip/"
</VirtualHost>

完成后保存并关闭此文件。

步骤 4 —— 应用 Apache 配置更改

到目前为止,您已经创建了一个 SSL 证书并配置了您的 Web 服务器以将其应用到您的站点。要应用所有这些更改并开始使用您的 SSL 加密,您可以重新启动 Apache 服务器以重新加载其配置和模块。

首先,通过输入以下命令检查您的配置文件是否存在语法错误:

sudo apachectl configtest

只要输出以 Syntax OK 结尾,您就可以继续进行。如果这不是您的输出的一部分,请检查文件的语法并重试:

. . .
Syntax OK

通过输入以下命令重新启动 Apache 服务器以应用您的更改:

sudo systemctl restart httpd.service

接下来,确保您的防火墙中打开了端口 80 和 443。如果您没有运行防火墙,可以跳过此步骤。

如果您运行的是 firewalld 防火墙,可以通过输入以下命令打开这些端口:

sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent

如果您运行的是 iptables 防火墙,您需要运行的命令高度依赖于您当前的规则集。对于基本规则集,您可以通过输入以下命令添加 HTTP 和 HTTPS 访问:

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

第五步 — 测试加密

现在,你已经准备好测试你的 SSL 服务器了。

打开你的网络浏览器,然后在地址栏中输入 https:// 后跟上你服务器的域名或 IP 地址:

https://your_domain_or_ip

因为你创建的证书没有被你的浏览器信任的证书颁发机构签名,你可能会看到类似下面这样的警告:

!Apache 自签名证书警告

这是正常的。你只关心证书的加密方面,而不是主机真实性的第三方验证。点击“高级”然后点击提供的链接以继续访问你的主机:

!Apache 自签名覆盖

你应该能够访问到你的网站。如果你查看浏览器地址栏,你会看到部分安全性的指示。这可能是一个带有“x”的锁或者一个带有感叹号的三角形。在这种情况下,这只是意味着证书无法被验证。它仍然在加密你的连接。

如果你配置了 Apache 来将 HTTP 请求重定向到 HTTPS,你也可以检查重定向是否正常工作:

http://your_domain_or_ip

如果结果显示相同的图标,这意味着你的重定向工作正常。

结论

你已经配置了 Apache 服务器来处理 HTTP 和 HTTPS 请求。这将帮助你与客户安全通信,并避免外部方能够读取你的流量。

如果你计划在公共网站上使用 SSL,你可能应该从受信任的证书颁发机构购买 SSL 证书,以防止每个访问者都看到可怕的警告。


目录
相关文章
|
11月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
676 1
|
Ubuntu 安全 网络安全
如何在 Ubuntu 14.04 上为 Apache 创建 SSL 证书
如何在 Ubuntu 14.04 上为 Apache 创建 SSL 证书
101 0
|
11月前
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
134 1
|
安全 Unix Linux
如何在 Debian 8 上为 Apache 创建 SSL 证书
如何在 Debian 8 上为 Apache 创建 SSL 证书
101 1
|
安全 Java 应用服务中间件
在CentOS 7上安装Apache Tomcat 8的方法
在CentOS 7上安装Apache Tomcat 8的方法
462 0
|
安全 Java 应用服务中间件
如何通过 Yum 在 CentOS 7 上安装 Apache Tomcat 7
如何通过 Yum 在 CentOS 7 上安装 Apache Tomcat 7
404 0
|
关系型数据库 MySQL Linux
在 CentOS 7 服务器上安装和保护 phpMyAdmin 与 Apache 的方法
在 CentOS 7 服务器上安装和保护 phpMyAdmin 与 Apache 的方法
198 0
|
存储 应用服务中间件 Linux
centos7-自制SSL自签名证书
centos7-自制SSL自签名证书
2632 0
|
1月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
370 69
|
1月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
186 78