Let’s Encrypt 是一个证书认证机构(CA)。他们提供了一种简单的方式,方便用户获取和安装免费的 TLS/SSL 证书,以便在网络服务器中启动 HTTPS 加密。通过一个软件客户端 Certbot,我们可以很方便的获取和安装免费的 TLS/SSL 证书。
在这边教程中,你将会在一个安装了 Apache 网络服务器的 FreeBSD 12.0 服务器上,通过 Certbot(来自 Let’s Encrypt)来设置一个 TLS/SSL 证书。此外,你还将通过一个 Cron 任务,自动更新该证书。
开始之前,你需要做以下准备:
一旦这些前提条件都满足了,你可以开始安装 Certbot。这个工具将会允许你来安装 Let’s Encrypt 证书。
一个 Let’s Encrypt 证书,可以确保用户的浏览器验证,网站服务器是否由一个可信赖的证书机构保护的。通过 HTTPS 加密,所有和 web 服务器的交互都能够得到保护。
在这一步,你将会为你的网站服务器安装 Certbot 工具,并且请求 Let’s Encrypt 服务器为你的域名签发合法证书和秘钥。
运行以下命令来安装 Certbot 和它的 Apache HTTP 插件:
sudo pkg install -y py36-certbot py36-certbot-apache
现在你已经安装好相关软件,你可以接下来在网站服务器中启用 TLS 连接。
默认情况下,Apache HTTP 通常在 80 端口提供 HTTP 服务。这个 80 端口是在主要配置文件httpd.conf
中通过Listen 80
来配置的。为了允许 HTTPS 连接,你需要将默认端口修改成443
。想要添加443
端口,并建立 SSL/TLS 连接,你需要先在 Apache HTTP 服务器中启用mod_ssl
模块。
通过grep
工具配合-n
选项使用,你可以在httpd.conf
配置文件中找到这个模块,并且定位到模块具体所在行数。通过运行以下命令,你可以找到mod_ssl.so
:
grep -n 'mod_ssl.so' /usr/local/etc/apache24/httpd.conf
在输出结果中,你将会看到模块所在行数:
148 #LoadModule ssl_module libexec/apache24/mod_ssl.so
通过移除行首的井号#,来启动这个模块。
使用前面的行数,来打开文件:
sudo vi +148 /usr/local/etc/apache24/httpd.conf
这将会直接打开配置文件,跳到正确的行数,进入编辑状态。
通过按x
按键来编辑这一行:
#LoadModule session_dbd_module libexec/apache24/mod_session_dbd.so
#LoadModule slotmem_shm_module libexec/apache24/mod_slotmem_shm.so
#LoadModule slotmem_plain_module libexec/apache24/mod_slotmem_plain.so
LoadModule ssl_module libexec/apache24/mod_ssl.so
#LoadModule dialup_module libexec/apache24/mod_dialup.so
#LoadModule http2_module libexec/apache24/mod_http2.so
#LoadModule proxy_http2_module libexec/apache24/mod_proxy_http2.so
一旦你移除了井号#,输入:wq
然后按 ENTER
回车键,保存并关闭文件。
你已经在 Apache HTTP 服务器中启用了 SSL/TLS 。下一步,你将会在 Apache HTTP 中配置虚拟主机。
通过配置虚拟主机,你可以在 Apache HTTP 服务器中部署很多独立的网站。通过在配置文件中相关的虚拟主机配置下,添加指定规则,可以启用 Let’s Encrypt 证书。
首先,你需要在 Apache HTTP 服务器中启用虚拟主机。运行以下命令,定位相关指令:
grep -n 'vhosts' /usr/local/etc/apache24/httpd.conf
你将会在输出结果中看到行号:
508 #Include etc/apache24/extra/httpd-vhosts.conf
现在你可以使用以下命令来编辑文件,并移除这一行行首的井号#:
sudo vi +508 /usr/local/etc/apache24/httpd.conf
像之前一样,按x
删除行首的井号#,像下面一样:
...
# User home directories
#Include etc/apache24/extra/httpd-userdir.conf
# Real-time info on requests and configuration
#Include etc/apache24/extra/httpd-info.conf
# Virtual hosts
Include etc/apache24/extra/httpd-vhosts.conf
# Local access to the Apache HTTP Server Manual
#Include etc/apache24/extra/httpd-manual.conf
# Distributed authoring and versioning (WebDAV)
#Include etc/apache24/extra/httpd-dav.conf
...
然后输入 :wq
并且按 ENTER
回车键来保存并关闭文件。
现在,你已经在 Apache HTTP 服务器中启用了虚拟主机。你可以修改默认的虚拟主机配置,使用你自己的域名来替换示例中的域名。
现在你可以在httpd-vhosts.conf
配置文件中,添加一个虚拟主机。你将编辑该配置文件,并移除两个已经存在的虚拟主机。
sudo vi +23 /usr/local/etc/apache24/extra/httpd-vhosts.conf
在打开文件,并移除两个现有的虚拟主机配置块以后,添加以下指定配置:
<VirtualHost \*:80>
ServerAdmin your_email@your_domain.com
DocumentRoot "/usr/local/www/apache24/data/your_domain.com"
ServerName your_domain.com
ServerAlias www.your_domain.com
ErrorLog "/var/log/your_domain.com-error_log"
CustomLog "/var/log/your_domain.com-access_log" common
</VirtualHost>
在这个代码块中,按照以下提示进行配置:
ServerAdmin
: 网站管理员的 Email 地址DocumentRoot
: 网站根目录ServerName
: 网站域名ServerAlias
: 类似 ServerName,在网站域名前面添加www
ErrorLog
: 错误日志路径。所有错误信息将会写入这个错误日志文件CustomLog
: 类似 ErrorLog,但是这个文件用来收集所有访问日志最后,你需要创建网站根目录。这个路径和你在httpd-vhosts.conf
配置文件中声明的DocumentRoot
路径一致。
sudo mkdir /usr/local/www/apache24/data/your_domain.com
现在改变文件夹的权限,以便 Apache http 进程能够正常读取:
sudo chown -R www:www /usr/local/www/apache24/data/your_domain.com
现在你已经通过chown
命令配合-R
选项,递归改变了文件夹的归属。用户和组都被设置成了 www。
现在你已经在 Apache HTTP 服务器中启用了虚拟主机。你还将启用 rewrite 模块。
在 Apache HTTP 服务器中启用 rewrite 模块是很有必要的。该模块主要用于改变 URL 地址,例如 将 HTTP 转向 HTTPS。
通过下面的命令找到 rewrite 模块:
grep -n 'rewrite' /usr/local/etc/apache24/httpd.conf
你将会看到下面的结果:
180 #LoadModule rewrite_module libexec/apache24/mod_rewrite.so
通过移除这一行行首的井号# 来启用这个模块。
sudo vi +180 /usr/local/etc/apache24/httpd.conf
编辑文件,按x
删除行首的井号#:
#LoadModule actions_module libexec/apache24/mod_actions.so
#LoadModule speling_module libexec/apache24/mod_speling.so
#LoadModule userdir_module libexec/apache24/mod_userdir.so
LoadModule alias_module libexec/apache24/mod_alias.so
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
LoadModule php7_module libexec/apache24/libphp7.so
# Third party modules
IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]\_\*.conf
<IfModule unixd_module>
保存并退出了文件。
现在,你已经完成了 Apache 中必要的配置。
通过各种插件,Certbot 提供了很多方式来获取 SSL 证书。apache 插件将会重新配置 Apache HTTP 服务器。 通过以下 certbot 命令,来进行交互操作,安装和获取一个单域名的证书。
sudo certbot --apache -d your-domain -d www.your-domain
如果你需要给多域名或者子域名安装合法证书,你可以通过额外的命令参数来传递域名,每个新域名或者子域名前面添加“-d”。 参数列表中的第一个域名将会作为基础域名,传递给 Let’s Encrypt 创建证书。基于这个原因,请将基础域名放在第一个,其他的域名放在后面。
如果这是你第一次在这台服务器上运行 certbot,这个客户端将会让你输入一个 email 地址,并且同意 Let’s Encrypt 的服务协议。做完这些,certbot 将会和 Let’s Encrypt 服务器通讯,然后验证你是否拥有这个待申请证书的域名。
如果验证成功,Certbot 将会问你喜欢怎么配置 HTTPS 的相关设置:
. . .
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
---
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
---
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
你将可以选择是否允许同时支持 HTTP 和 HTTPS 访问,或者将所有网络请求强制转向 HTTPS。为了更安全,我们强烈建议你选择第二个选项:如果没有任何不加密连接需求,所有请求强制转向 HTTPS。输入你的选项,并按回车。
这将会更新配置文件,并且使用新设置,重新加载 Apache HTTP 服务器,certbot 将会发送消息,提示部署完成,同时给出证书存储路径。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/usr/local/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/usr/local/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on yyyy-mm-dd. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew _all_ of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /usr/local/etc/letsencrypt. You should
make a secure backup of this folder now. This configuration
directory will also contain certificates and private keys obtained
by Certbot so making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
你的证书现在已经下载,安装,并且配置好。 在浏览器中改用https://
重新加载你的网站,你会发现浏览器上的安全标志。 它通常是一个绿色锁的标志,代表你的网站已经得到安全加密。如果你使用 SSL Labs Server 测试,测试将会通过。
Certbot 已经在配置文件中做了一些重要改变。当它在你的网站服务器上安装时,它会将证书路径记录在指定位置。如果读取httpd-vhosts.conf
文件内容,你会看到 Certbot 在配置文件中的修改内容。
例如,在<VirtualHost *:80>
段,转向规则写在最后面。
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.your_domain.com [OR]
RewriteCond %{SERVER_NAME} =your_domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Certbot 还创建了一个文件,名称为httpd-vhosts-le-ssl.conf
。该文件和 Apache 的证书放在一起。
<IfModule mod_ssl.c>
<VirtualHost \*:443>
ServerAdmin your_email@your_domain.com
DocumentRoot "/usr/local/www/apache24/data/your_domain.com"
ServerName your_domain.com
ServerAlias www.your_domain.com
ErrorLog "/var/log/your_domain.com-error_log"
CustomLog "/var/log/your_domain.com-access_log" common
Include /usr/local/etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /usr/local/etc/letsencrypt/live/your_domain.com/fullchain.pem
SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/your_domain.com/privkey.pem
</VirtualHost>
</IfModule>
获取 Let’s Encrypt 证书后,你可以开始了解怎么自动刷新证书了。
Let’s Encrypt 证书通常有 90 天的有效期,但是推荐一般 60 天左右刷新一次证书。因为这个原因,最佳实践是每隔一段时间,就自动刷新证书一次。
首先,让我们检查一下用来刷新证书的命令是否能够正常运行。 Let’s Encrypt 客户端 certbot 提供了一个renew
命令,会自动检测当前安装证书。当证书有效期小于 30 天时,自动刷新证书。通过使用--dry-run
选项,你可以模拟测试一下renew
是怎么运行的:
sudo certbot renew --dry-run
确保证书不会过期的一个可操作方式是创建一个 cron 定时任务。这个任务可以每隔一段时间自动执行刷新证书命令。 因为刷新指定第一次检测过期日期,并且之后仅仅在过期日期不足 30 天才会去刷新证书。因此,最安全的方式就是通过创建一个 cron 任务,并且每周或者每天都启动这个任务运行一遍。
Certbot 官方文档推荐每天执行两次刷新任务,
编辑 crontab,创建一个 cron 任务,每天运行两次刷新操作。为了编辑 crontab,请使用 root 用户运行:
sudo crontab -e
输入以下配置,以便希望会在需要的时候,运行任务,刷新证书:
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
# Order of crontab fields
# minute hour mday month wday command
# please remove \ from \*
0 0,12 \* \* \* /usr/local/bin/certbot renew
在前两行,声明了环境变量,所使用的 Shell。后面标明了运行的命令和运行的时间周期。
通过这些短短的指令,你已经配置好自动刷新证书的任务。
在这篇教程中,你已经安装了 Let’s Encrypt 客户端 certbot,下载了 SSL 证书,配置 Apache 去使用这些证书,并且设置了自动刷新证书的任务。想要了解更多,请阅读:Certbot 文档
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有