CentOS 7 上为网站安装使用 Let’s Encrypt SSL 证书

安装 Let’s Encrypt 客户端

对于 CentOS 发行版来说目前有两种安装 Let’s Encrypt 客户端的方式,一种是从上游的 EPEL 源直接 yum 安装,一种是从 Let’s Encrypt 的 GitHub 源下载。水景一页使用的是下面的第二种方法,从 GitHub 下载。

两种安装方式
简单比较:

YUM 安装可跟随系统更新一起更新该安装包,但是没有 apache 自动安装证书的这个组件,安装过程非常简单。
git 安装也很简单,有 apache 插件,但是需要另行升级更新。并且需要该虚拟主机已经配置了 SSL 证书(自己签发的也行)。
目前 EPEL 源中已经有了 letsencrypt 安装包,但是这个安装包还没有整合 Apache 组件。这就意味着该客户端只能获取证书,还不能自动为网站安装证书(其实安装证书也就是修改虚拟主机配置文件,将其中的指向安全证书的路径替换为当前获取的 Let’s Encrypt CA 证书)。

但是这个 Apache 插件在 Let’s Encrypt 的 GitHub 源里面已经是有了的。所以我们有两种方案来操作:一是获取 GitHub 上的 Let’s Encrypt 客户端,然后自动获取和安装证书;二是从 EPEL 源上直接安装 letsencrypt 包,仅获取证书,手工安装证书。

使用不包含 apache 插件的 letsencrypt 是不太方便的。因为这里的 letsencrypt 没有 Apache 插件,只能使用 certonly 或者 standalone 模式获取证书。而因为获取的证书需要立即进行验证,也就是验证所申请的证书与对应域名的一致性,可是因为不能自动安装证书,所以需要把 certonly 模式获取的证书放在对应虚拟主机的网站根目录让 Let’s Encrypt 验证服务器可以访问到。该目录在 Linux 上还是个以 . 开头的隐藏目录,需要设置 Apache 服务器以允许访问隐藏目录内的内容。看起来似乎也是挺麻烦的。standalone 模式似乎更麻烦,可能还需要让虚拟主机暂停一下服务。由于当前存在这些问题,所以水景一页选择的是使用 GitHub 上的 Let’s Encrypt 客户端以减少麻烦(自带可执行文件,无须编译安装)。

注意:使用客户端获取和安装证书后其会自动极短暂地重启 Apache 服务以使证书生效!

从 EPEL 安装 LET’S ENCRYPT

既然是整合好的安装包,那么就非常简单了(其实下一种方法也很简单,只是没法通过 YUM 升级)。目前 EPEL 官方源里面已经整合了 Let’s Encrypt 的安装包了。如果系统里使用了 EPEL 的源的话,直接 YUM 安装即可。不过再安装一次 EPEL 源也不麻烦。

# yum install epel-release
# yum install letsencrypt
运行,

# letsencrypt --help
可以查看帮助。还能看到提示说当前还没有集成 Apache 插件。这就意味着该客户端只能获取证书,还不能自动为网站安装证书。

可以尝试使用 apache 组件获取证书并安装。执行,

# letsencrypt --apache -d 111cn.net -d www.111cn.net -d test.111cn.net
The requested apache plugin does not appear to be installed

No installers are available on your OS yet; try running "letsencrypt-auto certonly" to get a cert you can install manually
GIT 安装
安装服务器依赖组件,因为要用 git 嘛,

# yum install epel-release
# yum install git
然后下载 Let’s Encrypt 客户端,也就是从 GitHub 上复制该源的所有文件,

# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
上面的指令中最后的目录表示将程序保存到本地的 /opt/letsencrypt 文件夹。

如果需要更新客户端,可以通过下面的指令更新之,

# cd /opt/letsencrypt
# sudo git pull
当然也可以把这个指令加到下面要介绍的自动更新证书的脚本里面自动执行。

调整虚拟主机配置文件

先不慌着运行客户端来获取证书,还有些准备工作要做。使用 apache 自动安装证书插件有以下前提需要满足才能成功,

需要该虚拟主机已经配置了 SSL 证书(自己签发的也行)。如果需要安装一个自己签发的证书,可以参考水景一页上的这篇文章。
需要一个虚拟主机单独一个 Apache 配置文件(.conf 文件)。
如果像水景一页一样没有使用分离的配置文件,可以按照下面的思路修改配置文件。因为如果服务器的 SSL 配置文件中有几个虚拟主机,letsencrypt 运行时会提示错误,

“We were unable to find a vhost with ServerName or Address of 111cn.net
然后让你选择有效的配置文件。

假设原来的服务器上虚拟主机的配置文件在 vhostssl.conf 文件中。

新建文件夹,

mkdir /etc/httpd/sites-available
mkdir /etc/httpd/sites-enabled
将 vhostssl.conf 文件中每个虚拟主机单独用一个针对 SSL 的配置文件,例如 111cn.net-ssl.conf 和 test.111cn.net-ssl.conf,保存在 sites-available 文件夹中。同时删除 vhostssl.conf 文件中的对应内容。

然后针对要启用的主机的配置文件建立软连接到 sites-enabled 文件夹中,比如这里的 111cn.net,

ln -s /etc/httpd/sites-available/111cn.net-ssl.conf /etc/httpd/sites-enabled/111cn.net-ssl.conf
这样的好处是,如果不需要 111cn.net-ssl.conf 了,直接删除 sites-enabled 文件夹中的该项,而 sites-available 中还保留着原始配置文件作为备份。

然后在 vhostssl.conf 中添加下面的一行指令以让 Apache 启动时加载 sites-enabled 文件夹中的所有虚拟主机配置文件,

IncludeOptional sites-enabled/*.conf
嗯,如果是 Apache 2.4 之前的版本,应该用,

Include sites-enabled/*.conf
准备好之后就可以进入 letsencrypt 安装目录执行证书的获取和启用了。

获取及安装证书

这里以 git 安装的 letsencrypt 为例。

进入 letsencrypt 文件夹,比如这里的,

# cd /opt/letsencrypt
运行以下指令,

# ./letsencrypt --apache -d 111cn.net -d www.111cn.net -d test.111cn.net
其中 --apache 表示使用 apache 插件安装证书;每个需要安装证书的域名都跟在一个 -d 后面。一般对于主域名,如这里的 111cn.net,通常我们会将 www.111cn.net 作为其别名同时申请证书。也就是说,至少包含类似于上面的三个域名中的前两个。当然也可以分开申请证书,比如,

先进行,

# ./letsencrypt --apache -d 111cn.net -d www.111cn.net
完成后再执行,

# ./letsencrypt --apache -d test.111cn.net
第一次运行会自动安装一些必须的软件包,包括 python 相关的内容。下载量大约是 20-30MB。之后就会自动获取证书并安装。

前面说过,apache 插件目前只能处理一个虚拟主机单独一个配置文件的配置方式。比如这里提到的三个域名对应两个虚拟主机,111cn.net 和 www.111cn.net 对应主站;test.111cn.net 是另一个独立的网站。那么就需要将这两个虚拟主机的 vhost 配置文件分别写成两个独立的文件,比如 111cn.net-ssl.conf 和 test.111cn.net-ssl.conf。否则会触发错误而导致失败。错误类似于,

The apache plugin is not working; there may be problems with your existing configuration.
The error was: PluginError(('There has been an error in parsing the file (%s): %s', u'/etc/httpd/conf.d/vhost.conf', u'Syntax error'),)
当然,修改虚拟主机配置文件后重新运行就可以了。下面接着说正确的路子。

然后紧接着就会提示输入管理帐号的 email 地址。再就是同意协议。很简单,除了 email 地址要输入,剩下的就是一路 Enter 就可以了。

1. email for recovery of account credentials
2. Agrement
申请下来的证书会被保存在 /etc/letsencrypt/live/ 文件夹。

定时更新证书

注意:下面是按照 git 安装的情况来说明的,如果是 yum 安装,则需要根据情况调整 letsencrypt 指令。

Let’s Encrypt 证书的有效期是 90 天。但是因为流程是全自动的,所以也不会造成多大麻烦。官方说明中强调所有证书只要过了 60 天就可以换发新的证书,以留出一些时间用于应付突发情况。

对于自动更新脚本,官方则建议最好每天运行一次,并且是在一天中随机的某个时刻,这样可以避免每次更新时都遇到特定的网络状况、服务器拥堵等问题,也就尽可能避免了连续多天无法获取新证书的情况出现。

自动续期的命令为,

# ./letsencrypt-auto renew
该指令会自动更新服务器上所有通过该方法获取的证书。

官方给了一个自动更新脚本作为例子,下面是针对使用 apache 插件的自动续约脚本。按照前面的情况,假设安装位置为 /opt/letsencrypt。

#!/bin/sh
if ! /opt/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
 echo Automated renewal failed:
 cat /var/log/letsencrypt/renew.log
 exit 1
fi
将其保存为 le-renew.sh 文件,然后可以通过 cron 定时运行该文件。

下面是水景一页使用的自动化脚本,前面添加了一个自动延迟几分钟的指令以避免总在某一个特定时刻更新,并ie如果更新失败则会自动向指定的邮件地址发送邮件提醒。

#!/bin/sh
# https://111cn.net/
# 自动更新 letsencrypt 客户端
cd /opt/letsencrypt
git pull

# 延时随机的分钟数
sleep $[ ( $RANDOM % 10 ) + 1 ]m
# 自动续签 Let's Encrypt 证书
cd /opt/letsencrypt
if ! ./letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
 echo Automated renewal failed: | mail -s "LE renew failed" your@email.com
 cat /var/log/letsencrypt/renew.log
 exit 1
fi
设置脚本自动执行前要自己先直接运行试试看有没有错误,是否达到预期效果。

要设置该脚本自动运行,比如每天凌晨 5 点钟执行,则直接以 root 身份修改 crontab 文件即可,在其最后添加如下一行并保存即可,

0 5 * * * root sh /path/to/le-renew.sh > /dev/null 2>&1
注意修改到 le-renew.sh 的路径 :D

时间: 2024-08-30 05:13:34

CentOS 7 上为网站安装使用 Let’s Encrypt SSL 证书的相关文章

CentOS6.4上使用yum安装mysql_Mysql

做软件开发时基本都会涉及到数据的使用,比如最简单用户登录注册,这用户信息则需要使用数据库做存储管理.而在项目开发测试过程最常使用的数据库则是mysql. 下面由小河给大家分享:如何在CentOS系统上使用yum安装mysql数据库,以CentOS6.4系统为例. 工具/原料 yum库 Mysql数据库 CentOS6.4_64bit 方法/步骤 查看CentOS自带mysql是否已安装. 输入:yumlistinstalled|grepmysql 若有自带安装的mysql,如何卸载CentOS系

linux中cPanel主机面板安装SSL证书实现HTTPS网址访问例子

SSL证书 SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL)安全协议是由Netscape Communication公司设计开发.该安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏:确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准.由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装服务器证书就可以激活该功能了),即通过它可以激活SSL协议,实现数据信息在客户端和

如何在 CentOS 7 上安装 Elastic Stack

Elasticsearch 是基于 Lucene 由 Java 开发的开源搜索引擎.它提供了一个分布式.多租户的全文搜索引擎(LCTT 译注:多租户是指多租户技术,是一种软件架构技术,用来探讨与实现如何在多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性.),并带有 HTTP 仪表盘的 Web 界面(Kibana).数据会被 Elasticsearch 查询.检索,并且使用 JSON 文档方案存储.Elasticsearch 是一个可扩展的搜索引擎,可用于搜索所有类型的文本

在CentOS 7上安装phpMyAdmin

原文 在CentOS 7上安装phpMyAdmin phpMyAdmin是一款以PHP为基础,基于Web的MySQL/MariaDB数据库管理工具.虽然已经存在着一些诸如Adminer的轻量级数据库管理工具, 但是phpMyAdmin还是更加广泛应用于网站管理员之中来进行各种MySQL/MariaDB的管理任务.它支持几乎所有MySQL数据库/表的相关操作,比如浏览.创建.复制.删除.重命名.更改,还有MySQL用户/权限管理和数据库导入/导出.以下就是如何在CentOS 6或7上安装phpMy

如何在Ubuntu 15.04/CentOS 7上安装Android Studio

随着最近几年智能手机的进步,安卓成为了最大的手机平台之一,在开发安卓应用中所用到的所有工具也都可以免费得到.Android Studio 是基于 IntelliJ IDEA 用于开发安卓应用的集成开发环境(IDE).它是 Google 2014 年发布的免费开源软件,继 Eclipse 之后成为主要的 IDE. 在这篇文章,我们一起来学习如何在 Ubuntu 15.04 和 CentOS 7 上安装 Android Studio. 在 Ubuntu 15.04 上安装 我们可以用两种方式安装 A

在CentOS系统上安装REMI仓库的方法

  REMI 仓库提供了CentOS和RHEL的核心包的更新版本,尤其是最新的PHP/MySQL系列(LCTT 译注:当你需要一个更新包,而 CentOS/RHEL 没有及时提供更新时, REMI 仓库可以帮助你). 安装REMI仓库要记住的一件事是不要在启用了REMI仓库时运行yum update.因为REMI仓库的包名与RHEL/CentOS中的相同,运行yum update可能会触发意外的更新.一个好办法是禁用REMI仓库,在你需要安装RMEI仓库中独有的包时再启用. 预备工作 安装REM

怎么在CentOS系统上安装Docker

  Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单.容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止.Docker 帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上万的节点. 容器和 VM(虚拟机)的主要区别是,容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离.虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短.容器使用宿主操作系统的内核,而虚拟机使用独立的内核. Docker 的局限性之一是,它只能用在 64 位的操作系统上. 在

在CentOS上使用yum安装MySQL+安全优化

0.说明         使用yum安装的好处是,你不用自己去解决软件之间的依赖问题,基本上yum执行完成,也就把软件安装好了,下面介绍使用yum的方法来安装MySQL,同时也会介绍安装完成后的安全优化.         注意:下面的操作都是以新安装的CentOS  6.5来作为演示的. 1.使用yum安装MySQL          查看是否已经安装MySQL: 1 [root@leaf]# yum list installed | grep mysql         如果你在安装CentO

如何在CentOS 7上安装iRedMail集成到Samba4 AD

本系列教程将引导你了解如何在 CentOS 7 安装 iRedMail 以及 Samba4 AD 域控制器,以便域帐户可以通过 Thunderbird 桌面客户端或通过 Roundcube Web 界面发送或接收邮件. 将要安装 iRedMail 的 CentOS 7 服务器需允许通过 25 和 587 端口进行 SMTP 或邮件路由服务,并且还将通过 Dovecot 作为邮件传递代理,提供 POP3 和 IMAP 服务,两者都使用安装过程中签发的自签名证书进行安全保护. 收件人邮箱将与 Rou