介绍
本教程将告诉您如何设置从TLS / SSL证书让我们的加密运行Apache作为Web服务器CentOS 7台服务器上。 此外,我们将介绍如何使用cron作业自动执行证书续订过程。
Web服务器中使用SSL证书加密服务器和客户端之间的流量,为访问应用程序的用户提供额外的安全性。 Let's Encrypt提供了一种免费获取和安装受信任证书的简单方法。
先决条件
为了完成本指南,您需要:
- 与非root用户sudo的,你可以按照我们设置了一个CentOS 7服务器初始服务器安装指南
- 安装了一个或多个域名的Apache Web服务器正确配置
对于本指南的目的,我们将安装一个域的让我们加密证书example.com
。 这将在整个指南中引用,但你应该用您自己的域代替它,同时遵循。
当您准备好继续时,使用您的sudo帐户登录您的服务器。
第1步 - 为您的域创建一个虚拟主机
Apache的插件为certbot
让我们的客户端加密极大地简化了生成和使用Apache托管域安装SSL证书的过程。 但是,在撰写本文时,需要将您的域组织为虚拟主机,每个域都位于单独的配置文件中。
如果您的域已在单独的配置文件中配置为虚拟主机,则可以跳到下一步。
创建目录结构
我们将通过创建一个新的目录结构来保存Apache配置目录,里面的虚拟主机的文件,开始/etc/httpd
。 我们将遵循基于Debian的发行版所引入的标准结构,这使得更容易启用和禁用在Apache中配置为虚拟主机的站点。
使用以下命令访问Apache配置目录:
cd /etc/httpd
首先,创建将保存此服务器上可用的所有网站的目录:
sudo mkdir /etc/httpd/sites-available
接下来,创建将在此服务器上托管当前活动(启用)网站的目录。 该目录将只包含符号链接到位于里面的虚拟主机文件/etc/httpd/sites-available
。
sudo mkdir /etc/httpd/sites-enabled
现在我们需要告诉Apache如何找到虚拟主机文件。 为了实现这一点,我们将编辑Apache的主配置文件,并添加一行,声明一个可选目录用于其他配置文件。 使用你喜欢的命令行的文本编辑器,打开文件/etc/httpd/conf/httpd.conf
:
sudo nano /etc/httpd/conf/httpd.conf
将此行添加到文件的末尾:
IncludeOptional sites-enabled/*.conf
完成添加该行后,保存并关闭该文件。
创建新的虚拟主机文件
下一步是创建虚拟主机配置文件。 使用你喜欢的命令行的文本编辑器,创建为新的文件/etc/httpd/sites-available
。 我们将命名文件example.com.conf
,但您可以选择您所选择的名称。 是很重要的,但是,该文件与结尾.conf
扩展。
sudo nano /etc/httpd/sites-available/example.com.conf
下面的内容添加到该文件,替换example.com
用自己的域名:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
ErrorLog /var/log/apache/example.com/error.log
</VirtualHost>
保存文件并退出。 下面,您可以找到用于此示例的每个配置选项的简要说明:
- 服务器名称:您的主域名。
- ServerAlias(可选):您的主域名的别名。 它是一种常见的做法是添加
www
子域名作为主域名的别名。 - DocumentRoot的:其中的网站文件应该被发现的位置。 随着在CentOS 7默认的Apache配置,主文档根目录通常是
/var/www/html
,但如果你想放置在服务器上的不同位置,您的网站文件,您可以更改此值。 - 错误日志(可选):具体到这个虚拟主机的错误记录的自定义位置。 如果不指定此选项,错误将被记录到默认的Apache错误日志:
/var/log/httpd/error_log
。
启用虚拟主机
虚拟主机文件现在已创建,但我们仍需要告诉Apache我们希望启用此网站。 为了实现这个目标,我们需要创建一个内部的符号链接, sites-enabled
指向新的虚拟主机配置文件。 跑:
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
这样一来,每当要禁用虚拟主机,你可以简单地删除里面的链接, sites-enabled
并重新加载Apache服务,保持内部的原始虚拟主机文件sites-available
为今后的任何需求。
如果您的域名之前已配置为主要的Apache网站里面httpd.conf
文件,您从该文件中删除旧的配置,以避免产生你的SSL证书时,意外的行为是很重要的。
打开文件/etc/httpd/conf/httpd.conf
,搜索指令ServerName
和ServerAlias
。 如果它们被设置为你配置一个虚拟主机相同的域,你应该将它们注释掉通过添加#
在该行的开始标志:
sudo nano /etc/httpd/conf/httpd.conf
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName example.com:80
#ServerAlias www.example.com
接下来,创建在虚拟主机文件中指定的日志目录(如果它尚不存在):
sudo mkdir -p /var/log/apache/example.com
测试以确保您的配置文件不包含任何语法错误:
sudo apachectl configtest
如果一切正常,请重新启动Apache,以使更改生效:
sudo systemctl restart httpd
有关详细指导如何设置在CentOS 7 Apache的虚拟主机 ,检查此链接。
第2步 - 安装服务器依赖关系
之前,我们可以安装certbot
让我们加密客户端和生成SSL证书,我们需要安装访问EPEL软件库。 我们也将需要安装mod_ssl
模块正常服务加密流量。
要启用对存储库的访问并添加对SSL的支持,请输入:
sudo yum install epel-release mod_ssl
您的服务器现在应该可以抓住certbot
让我们的加密客户端。
第3步 - 下载让我们加密客户端
接下来,我们将下载certbot
从EPEL软件库让我们的客户端加密:
sudo yum install python-certbot-apache
该certbot
客户现在应该安装并投入使用。
第4步 - 设置SSL证书
使用生成的SSL证书为Apache certbot
让我们的客户端进行加密是非常简单的。 客户端将自动获取并安装对作为参数提供的域有效的新SSL证书。
要执行交互式安装,并获得只覆盖单个域的证书,运行certbot
用命令:
sudo certbot --apache -d example.com
如果要安装对多个域或子域有效的单个证书,则可以将它们作为附加参数传递给命令。 在参数列表中的第一个域名将用于让我们加密创建证书的基本域,因为这个原因,我们建议您在列表中第一个通过裸顶级域名,跟任何其它子域或别名:
sudo certbot --apache -d example.com -d www.example.com
对于这个例子,在基本域将example.com
。
安装依赖关系后,您将看到有关自定义证书选项的分步指南。 你会被要求提供一个电子邮件地址丢失了密钥恢复和通知,并且您将能够使两者之间选择http
和https
访问或迫使所有请求重定向到https
。
安装成功完成后,您应该会看到类似于以下内容的消息:
IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to user@example.com.
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert
will expire on 2016-04-21. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
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 Let's
Encrypt so making regular backups of this folder is ideal.
- If you like Let's Encrypt, 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/letsencrypt/live
。
重组虚拟主机
Apache的插件为certbot
让我们的加密客户端创建启用一个新的虚拟主机文件https
访问您的域。 这是在使用Apache插件生成证书时由客户端自动完成的。 然而,在内部创建的文件sites-enabled
,即应该只包含对位于内侧的实际虚拟主机文件的链接的目录sites-available
目录。
为了使您的虚拟主机文件组织和默认值一致,它是将这个新的虚拟主机文件到一个好主意sites-available
目录,并创建一个内部的符号链接sites-enabled
:
sudo mv /etc/httpd/sites-enabled/example.com-le-ssl.conf /etc/httpd/sites-available/example.com-le-ssl.conf
sudo ln -s /etc/httpd/sites-available/example.com-le-ssl.conf /etc/httpd/sites-enabled/example.com-le-ssl.conf
您sites-enabled
目录应该类似于此:
lrwxrwxrwx 1 root root 48 Jan 25 12:37 example.com.conf -> /etc/httpd/sites-available/example.com.conf
lrwxrwxrwx 1 root root 55 Jan 25 12:44 example.com-le-ssl.conf -> /etc/httpd/sites-available/example.com-le-ssl.conf
重新启动Apache以应用更改:
sudo systemctl restart httpd
检查您的证书状态
您可以验证与以下链接您的SSL证书的状态(不要忘了你的基地域名替换example.com):
https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest
你现在应该可以使用访问您的网站https
前缀。
第5步 - 设置自动续订
让我们加密证书有效期为90天,但建议您每60天更新证书以允许有误差。 该certbot
让我们的加密客户端有一个renew
命令,可自动检测当前安装的证书,并试图续约他们,如果他们从到期日不到30天了。
要为所有已安装的域触发更新过程,您应该运行:
sudo certbot renew
因为我们最近安装了证书,所以命令将只检查到期日期,并打印一条消息通知证书不是由于更新。 输出应该类似于:
Processing /etc/letsencrypt/renewal/example.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
请注意,如果您创建了具有多个域的捆绑证书,则只有基本域名将显示在输出中,但续订应对此证书中包含的所有域有效。
确保您的证书不会过时的一个实用方法是创建一个定期执行自动更新命令的cron作业。 由于更新首先检查到期日期,并且仅当证书距离到期少于30天时才执行更新,因此可以安全地创建每周或甚至每天运行的cron作业。
让我们编辑crontab来创建一个新作业,它将每周运行续订命令。 要为root用户编辑crontab,请运行:
sudo crontab -e
将以下内容包含在一行中:
crontab
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
保存并退出。 这将创建一个新的cron作业将执行certbot renew
凌晨2:30命令每星期一。 由命令生成的输出将通过管道输送到位于日志文件/var/log/le-renewal.log
。
有关如何创建和调度cron作业的更多信息,你可以检查我们如何使用cron来自动执行任务的VPS引导。
结论
在本指南中,我们看到了如何从Let's Encrypt安装免费的SSL证书,以便在CentOS 7服务器上保护由Apache托管的网站。 我们建议您检查的官方咱们博客加密重要更新,不时。