介绍
本教程将引导您完成使用 SSL 证书保护的 Apache 服务器的设置和配置。 在本教程结束时,您将拥有一个可通过 HTTPS 访问的服务器。
SSL 基于将大整数解析为其同样大的素因数的数学难解性。 使用它,我们可以使用私钥-公钥对加密信息。 证书颁发机构可以颁发 SSL 证书来验证这种安全连接的真实性,并且在同一个说明中,可以在没有第三方支持的情况下生成自签名证书。
在本教程中,我们将生成一个自签名证书,进行必要的配置,并测试结果。 自签名证书非常适合测试,但会导致用户浏览器错误,因此不建议将其用于生产。
如果您想获得付费证书,请参阅本教程。
先决条件
要遵循本教程,您将需要:
- 一个新鲜的 Debian 8 Droplet
- 一个sudo非root用户,可以按照本教程的步骤2和3进行设置
- OpenSSL 安装和更新(应该默认安装)
sudo apt-get update sudo apt-get upgrade openssl
出于测试目的,您可能需要第二台安装了 OpenSSL 的计算机:
- 另一个 Linux Droplet
- 或者,基于 Unix 的本地系统(Mac、Ubuntu、Debian 等)
第 1 步 — 安装 Apache
在这一步中,我们将使用一个名为 apt-get
的内置 软件包安装程序。 它极大地简化了包管理并促进了干净的安装。
在先决条件中指定的链接中,您应该已更新 apt-get
并安装了 sudo
软件包,因为与其他 Linux 发行版不同,Debian 8 没有安装 sudo
。
Apache 将成为我们的 HTTPS 服务器。 要安装它,请运行以下命令:
sudo apt-get install apache2
第 2 步 — 启用 SSL 模块
在本节中,我们将在我们的服务器上启用 SSL。
首先,启用 Apache SSL 模块。
sudo a2enmod ssl
默认的 Apache 网站带有一个用于启用 SSL 的有用模板,因此我们现在将激活默认网站。
sudo a2ensite default-ssl
重新启动 Apache 以使这些更改生效。
sudo service apache2 reload
第 3 步 — 创建自签名 SSL 证书
首先,让我们创建一个新目录,我们可以在其中存储私钥和证书。
sudo mkdir /etc/apache2/ssl
接下来,我们将请求一个新证书并对其进行签名。
首先,生成一个新证书和一个私钥来保护它。
days
标志指定证书应保持有效的时间。 在此示例中,证书将持续一年keyout
标志指定我们生成的密钥的路径out
标志指定我们生成的证书的路径
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
调用此命令将导致一系列提示。
- Common Name:指定服务器的 IP 地址或主机名。 此字段很重要,因为您的证书需要与您网站的域(或 IP 地址)匹配
- 自行决定填写所有其他字段。
示例答案显示在下面的 red 中。
InteractiveYou are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ——- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:NYC Organization Name (eg, company) [Internet Widgits Pty Ltd]:DigitalOcean Organizational Unit Name (eg, section) []:SSL Certificate Test Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []:test@example.com
设置文件权限以保护您的私钥和证书。
sudo chmod 600 /etc/apache2/ssl/*
三位数权限码的更多信息,请参见Linux权限教程。
您的证书和保护它的私钥现在可供 Apache 使用。
第 4 步 — 将 Apache 配置为使用 SSL
在本节中,我们将配置默认的 Apache 虚拟主机以使用 SSL 密钥和证书。 进行此更改后,我们的服务器将开始为默认站点提供 HTTPS 而不是 HTTP 请求。
使用 nano
或您喜欢的文本编辑器打开服务器配置文件。
sudo nano /etc/apache2/sites-enabled/default-ssl.conf
找到以 <VirtualHost _default_:443>
开头的部分并进行以下更改。
- 直接在
ServerAdmin
电子邮件行下方添加一行,其中包含您的服务器名称。 这可以是您的域名或 IP 地址:
/etc/apache2/sites-enabled/default
ServerAdmin webmaster@localhost ServerName example.com:443
- 找到以下两行,并更新路径以匹配我们之前生成的证书和密钥的位置。 如果您在其他地方购买了证书或生成了证书,请确保此处的路径与您的证书和密钥的实际位置相匹配:
/etc/apache2/sites-enabled/default
SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key
完成这些更改后,请检查您的虚拟主机配置文件是否与以下内容匹配。
/etc/apache2/sites-enabled/default-ssl
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost ServerName example.com:443 DocumentRoot /var/www/html . . . SSLEngine on . . . SSLCertificateFile /etc/apache2/ssl/apache.crt SSLCertificateKeyFile /etc/apache2/ssl/apache.key
保存并退出文件。
重新启动 Apache 以应用更改。
sudo service apache2 reload
要了解有关配置 Apache 虚拟主机的更多信息,请参阅 这篇文章 。
第 5 步 — 使用 SSL 测试 Apache
在本节中,我们将从命令行测试您的 SSL 连接。
您可以从 (1) 基于 Unix 的本地系统、(2) 另一个 Droplet 或 (3) 相同的 Droplet 运行此测试。 如果您从外部系统运行它,您将确认您的站点可通过公共 Internet 访问。
通过 HTTPS 443 端口打开连接。
openssl s_client -connect your_server_ip:443
滚动到输出的中间(在键之后),您应该会找到以下内容:
Output—- SSL handshake has read 3999 bytes and written 444 bytes —- . . . SSL-Session: . . .
当然,数字是可变的,但这就是成功。 恭喜!
按 CTRL+C
退出。
您还可以在 Web 浏览器中访问您的站点,在 URL (https://example.com
) 中使用 HTTPS。 您的浏览器会警告您证书是自签名的。 您应该能够查看证书并确认详细信息与您在步骤 3 中输入的内容相匹配。
结论
我们的教程到此结束,为您留下一个工作的 Apache 服务器,安全地配置了 SSL 证书。 有关使用 OpenSSL 的更多信息,请参阅 OpenSSL Essentials 文章 。