使用Certbot为网站升级HTTPS

Certbot是一个用于部署证书的开源软件工具,证书来自免费的证书授权机构(CA)Let’s Encrypt。

本文在Certbot官方安装指导的基础上介绍实际安装过程中出现的问题以及解决方法。

运行环境:CentOS 7 (release 7.9.2009),Apache




备份网站

WordPress可以使用插件UpdraftPlus,这个插件可以设置定时备份,并上传到云存储。


安装SNAP

snap 是新一代跨发行版的软件包管理技术,根据Certbot官网的安装指导推荐使用snap。以下内容参考Installing snap on CentOS

使用yum安装snapd

yum install snapd

启动snapd.socket

systemctl enable --now snapd.socket

创建软链接来支持classic snap

ln -s /var/lib/snapd/snap /snap

关于Classic Confinement Policy是干嘛用的:

snap 安装和挂载在一个严格控制的空间中:它们无法访问绝大多数系统资源,它们捆绑了所需的库并具有只读文件系统。在 snap 世界中,这是默认执行的“strict”限制策略。

snapd 2.20 引入了新的限制策略:“classic”,旨在满足您的所有脚本和工具需求。 Snaps 限制为“classic”时,可以访问系统的其余部分,就像大多数遗留(例如 debian 包)打包应用程序所做的那样,同时仍然受益于 ci-integrated store 模型,具有自动更新,回滚到旧版本、释放通道等。

到这里就安装完成了,但是后面在使用snap install的时候报错:

system does not fully support snapd: cannot read the value of fs.may_detach_mounts kernel parameter: open /proc/sys/fs/may_detach_mounts: no such file or directory

原因是内核版本太低,查看当前内核版本

uname -sr

显示当前是3.10.0-229.el7,从谷歌搜到相关问题说snap需要至少3.10.0-620-el7

所以需要升级内核版本

yum update

然后重启即可从新版本内核引导。

ps. 更新后的内核版本号为3.10.0-1160.36.2.el7,并不是目前的最新版本,因为yum只能升级到仓库中可用的最新版本。如果要更晚版本的内核需要启用ELRepo,可以升级到最新的主线稳定内核。详细方法见如何在CentOS 7中安装或升级最新的内核。我把内核版本更新到了5.13.9-1.el7,snap命令没有再报错。




安装Certbot

使用snap安装Certbot

snap install --classic certbot

添加软链接来使用certbot命令

ln -s /snap/bin/certbot /usr/bin/certbot

自动获取证书并配置Apache、启用HTTPS

certbot --apache

如果想自己配置,只获得证书

certbot certonly --apache

接下来会让填写邮箱、确认信息、创建账户,最后输入需要颁发证书的域名。

当看到这样的提示,说明已经成功部署了。

certbot --apache这一步可能会遇到一些问题:

  1. 没有安装SSL模块,报错如下:

    Could not find ssl_module; not disabling session tickets.

    直接使用yum安装

    yum install mod_ssl
  2. 找不到80端口上的虚拟主机

    Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.

    按照报错去设置虚拟主机:

    到目录/etc/httpd/conf.d下创建新配置文件,命名为“域名.conf”

    cd /etc/httpd/conf.d
    vi yourdomainname.conf

    在该文件里添加虚拟主机设置,ServerName填域名,DocumentRoot填网站根目录

    <VirtualHost *:80>
       ServerName rostsee.de
       DocumentRoot /var/www/html
    </VirtualHost>

    插播一些虚拟主机(Virtual Host)的内容:

    虚拟主机可以用来在一台服务器里运行多个网站,有三种实现方法:

    • 基于IP
    • 基于端口
    • 基于主机名

    上面我们用到的是基于端口的虚拟主机,通过访问不同的端口来实现访问不同网站。例如:

    <VirtualHost *:80>
    ServerName  site-a.com
    DocumentRoot /var/www/html/site-a
    <VirtualHost/>
    <VirtualHost *:8080>
    ServerName  site-b.com
    DocumentRoot /var/www/html/site-b
    <VirtualHost/>




测试自动更新证书

Certbot包内已经带有自动更新证书的cron计划,所以只需要测试一下是否能正常执行即可:

certbot renew --dry-run




检查使用HTTPS是否能正常访问网站

对于Wordpress,需要手动修改数据库中的“siteurl”和“home”的值为以“https”开头的新url

mysql -u root -p
use wordpress;
update wp_options set option_value="https://yourdomainname/wordpress" where option_name="siteurl";
update wp_options set option_value="https://yourdomainname/wordpress" where option_name="home";
quit;

另外,记得开启防火墙的443端口!!

# 查看防火墙状态
systemctl status firewalld

# 查看443端口的开放情况
firewall-cmd --query-port=443/tcp

# 添加需要开放的端口
firewall-cmd --add-port=443/tcp --permanent

# 重新载入该端口
firewall-cmd --reload

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注