如何在 Apache 上为 Ubuntu 14.04 创建 SSL 证书
介绍
TLS 或传输层安全性及其前身 SSL(安全套接字层)是为了将正常流量置于受保护的加密包装器中而创建的安全协议。
这些协议允许在远程方之间安全地发送流量,而不会被中间人拦截和读取流量。它们还有助于通过建立证书颁发机构信任和真实的服务器来验证整个 Internet 中的域和服务器的身份。
在本指南中,我们将介绍如何在 Ubuntu 14.04 服务器上为 Apache 创建自签名 SSL 证书,这将允许您加密到服务器的流量。虽然这不提供第三方验证您的服务器身份的好处,但它满足了那些只想安全传输信息的人的要求。
注意:您可能需要考虑使用 Let's Encrypt 而不是自签名证书。 Let's Encrypt 是一个新的证书颁发机构,它颁发在大多数网络浏览器中受信任的免费 SSL/TLS 证书。查看教程以开始使用:如何在 Ubuntu 14.04 上使用 Let's Encrypt 保护 Apache
先决条件
在开始之前,您应该已经处理了一些配置。
在本指南中,我们将作为具有 sudo 权限的非根用户进行操作。您可以按照我们的 Ubuntu 14.04 初始服务器设置指南中的步骤 1-4 进行设置。
您还需要安装 Apache。如果您还没有启动并运行它,您可以通过键入以下内容快速修复它:
sudo apt-get update
sudo apt-get install apache2
第一步 — 激活 SSL 模块
SSL 支持实际上是 Ubuntu 14.04 Apache 包中的标准配置。我们只需要在我们的系统上启用它以利用 SSL。
键入以下命令启用模块:
sudo a2enmod ssl
启用 SSL 后,您必须重新启动 Web 服务器才能识别更改:
sudo service apache2 restart
这样,如果我们将其配置为这样做,我们的 Web 服务器现在就可以处理 SSL。
第二步 — 创建自签名 SSL 证书
让我们首先在 Apache 的配置层次结构中创建一个子目录来放置我们将要制作的证书文件:
sudo mkdir /etc/apache2/ssl
现在我们有了放置密钥和证书的位置,我们可以通过键入以下内容一步创建它们:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
让我们仔细看看这到底是什么意思。
- openssl:这是 OpenSSL 提供的基本命令行工具,用于创建和管理证书、密钥、签名请求等。
- req:这指定了 X.509 证书签名请求 (CSR) 管理的子命令。 X.509 是 SSL 遵守其密钥和证书管理的公钥基础设施标准。由于我们想要创建一个新的 X.509 证书,这就是我们想要的。
- -x509:此选项指定我们要制作一个自签名证书文件而不是生成证书请求。
- -nodes:此选项告诉 OpenSSL 我们不希望使用密码来保护我们的密钥文件。拥有受密码保护的密钥文件会妨碍 Apache 自动启动,因为每次服务重新启动时我们都必须输入密码。
- -days 365:指定我们创建的证书有效期为一年。
- -newkey rsa:2048:此选项将同时创建证书请求和新的私钥。这是必要的,因为我们没有提前创建私钥。
rsa:2048
告诉 OpenSSL 生成一个 2048 位长的 RSA 密钥。 - -keyout:此参数命名正在创建的私钥文件的输出文件。
- -out:此选项命名我们正在生成的证书的输出文件。
当您点击 \ENTER 时,您将被问到一些问题。
请求的最重要的项目是读取“通用名称(例如服务器 FQDN 或您的名称)”的行。您应该输入要与证书关联的域名,或者如果您不输入服务器的公共 IP 地址有一个域名。
问题部分看起来像这样:
<前>
密钥和证书将被创建并放置在您的 /etc/apache2/ssl
目录中。
第三步 - 配置 Apache 以使用 SSL
现在我们有了可用的证书和密钥,我们可以将 Apache 配置为在虚拟主机文件中使用这些文件。您可以在此处了解有关如何设置 Apache 虚拟主机的更多信息。
我们的配置文件不是基于 sites-available
子目录中的 000-default.conf
文件,而是基于 default -ssl.conf
包含一些默认 SSL 配置的文件。
现在以 root 权限打开文件:
sudo nano /etc/apache2/sites-available/default-ssl.conf
删除注释后,文件看起来像这样:
<前>
这可能看起来有点复杂,但幸运的是,我们不需要担心这里的大多数选项。
我们想要设置我们为虚拟主机配置的常规内容(ServerAdmin、ServerName、ServerAlias、DocumentRoot 等),并更改 Apache 查找 SSL 证书和密钥的位置。
最后,它看起来像这样。红色条目是从原始文件修改而来的:
<前>
完成后保存并退出文件。
第四步 - 激活 SSL 虚拟主机
现在我们已经配置了启用 SSL 的虚拟主机,我们需要启用它。
我们可以通过键入以下内容来做到这一点:
sudo a2ensite default-ssl.conf
然后我们需要重新启动 Apache 以加载我们新的虚拟主机文件:
sudo service apache2 restart
这应该启用您的新虚拟主机,它将使用您创建的 SSL 证书提供加密内容。
第五步 - 测试您的设置
现在您已准备就绪,您可以在指定 https://
协议后访问服务器的域名或公共 IP 地址来测试您的配置,如下所示:
<前>
您将收到一条警告,指出您的浏览器无法验证您的服务器的身份,因为它尚未由它信任的证书颁发机构之一签名。

这是预料之中的,因为我们已经对证书进行了自签名。虽然我们的证书不会为我们的用户验证我们的服务器,因为它没有与受信任的证书颁发机构进行交互,但它仍然能够加密通信。
由于这是预期的,您可以点击“继续”按钮或浏览器中的任何类似选项。
您现在将被带到您为 SSL 虚拟主机配置的 DocumentRoot
中的内容。这次您的流量已加密。您可以通过单击菜单栏中的锁定图标来检查:

您可以在中间的绿色部分看到连接已加密。
结论
您现在应该在您的网站上启用了 SSL。这将有助于保护访问者与您的站点之间的通信,但它将警告每个用户浏览器无法验证证书的有效性。
如果您计划启动一个公共站点并需要 SSL,您最好从受信任的证书颁发机构购买 SSL 证书。
如果您想了解有关保护 Linux 服务器的更多信息。