前言
WordPress 作为最多人用的博客系统,其登入页面经常被爆破。我在看 Cloudflare 防火墙日志的时候也发现了很多除了我以外的访问记录。之前我写了一个文章〈个人博客适用的 Cloudflare 防火墙和缓存规则〉,来使每次访问登入页面都需要进行机器人验证。但如果你想在此基础上更安全的话,不妨按下面的步骤来添加 mTLS 用户端凭证。其它带后台的博客平台也可以使用。
目录
简介
一部分内容来自〈mTLS 是什麼? | 雙向驗證 TLS | Cloudflare〉
mTLS,即相互 TLS,是服务端和用户端相互验证的方法。在 mTLS 中,用户端和服务端都有一个凭证,并且双方都使用各自的公开金钥和私密金钥进行验证。与常规 TLS 相比,mTLS 需要额外的步骤来验证双方(额外的步骤以粗体显示):
- 用户端连接到服务器
- 服务器提供其 TLS 凭证
- 用户端验证服务器的凭证
- 用户端提供其 TLS 凭证
- 服务器验证用户端凭证
- 服务器授予用户端访问权限
- 双方通过加密的 TLS 连接交换信息

因此,mTLS 可以防止中间人攻击、暴力破解密码和其他恶意请求。要使用这个功能,网站需要经过 Cloudflare 代理(打开小黄云)。
生成用户端凭证
打开 Cloudflare 仪表板,在侧边栏 SSL/TLS 下找到用户端凭证,然后点「编辑」添加主机。我这边就添加了 www 子域和根域名。1在添加子域名时,只需输入子域;在添加根域名时,要输入完整根域名如图。

添加主机后,点击蓝色的「建立凭证」按钮。算法建议选择默认的 RSA,兼容性更好。另外,我这里就将凭证的有效期设置为 1 年了,到期后需要重新创建,这个看你需求。

点击建立后,会出现两段文本,分别是凭证(公钥)和私密金钥。先不要关闭这个页面,我们需要将公钥和私钥组合为 PKCS #12 证书才能添加到浏览器和其他设备。
组合公私钥
对于 Windows 用户
- 在桌面上右键,选择「在这里开启 PowerShell 视窗」。
- 输入命令
notepad cert.crt
,会有提示说是否创建新文件,点击是。然后将第一个文本的公钥复制到打开的记事本中,保存并关闭。 - 回到 PowerShell,输入命令
notepad cert.key
,同样创建新文件,然后将第二个文本的私钥复制到记事本中,保存并关闭。 - 最后输入命令
certutil -mergepfx cert.crt cert.pfx
,回车后会提示输密码,输入时不会有显示,回车后还要再输一遍确认。完成后,cert.pfx
文件就会生成在桌面上。
对于 Linux/Unix 用户
首先需要安装 OpenSSL,不同发行版的安装方法自己网上查。然后分别将公钥和私钥保存到 cert.crt
和 cert.key
文件中,然后用以下命令合并,也会提示输入密码:
openssl pkcs12 -export -out cert.pfx -inkey cert.key -in cert.crt
将凭证导入浏览器和设备
Chrome 浏览器
地址栏输入 chrome://certificate-manager/
并回车,会打开浏览器的凭证管理员。点击侧边栏第二个「您的凭证」。
对于 Windows 用户,在这里点击「管理从 Windows 汇入的凭证」,再点「汇入」,下一步后,选择刚生成的 pfx
文件,2如果选择文件时没有看见的话,需要手动选择文件类型然后一直下一步即可。

对于 Linux 用户,点击「查看从 Linux 汇入的凭证」,然后点击「汇入」,选择文件即可。
Safari 浏览器(iOS)
在 iOS 系统上,目前应该只有 Safari 浏览器支持用户端凭证。在确保 pfx
文件加密了的情况下,用电子邮件发送到手机上,必须使用系统自带的邮件 App 接收。点击证书文件后,会提示「已安装描述档」。然后点开手机设置-已下载描述档,再点安装。安装时会先后提示输入手机解锁密码和凭证密码。


Cloudflare 设置 mTLS 规则
回到 Cloudflare 仪表板,点击「建立 mTLS 规则」,在 URI 路径中添加 /wp-admin
、/wp-login.php
、和 /wp-admin/
(这里是给 WordPress 用的,其他博客系统自行修改),然后将顺序设为第一,最后点击储存。


设置好后,可以清除下 Cloudflare 的缓存,然后用浏览器访问网站后台试试,应该会弹出凭证的选择界面。如果不选择凭证,访问就会被拦截掉。对于访客来说,这个凭证窗口是不会出现的,只有在安装了的情况下才会出现。但也有个小问题,就是在访问非管理页面时也会弹出窗口,这点暂时不懂如何解决。


欢迎到我网站主页看看别的内容。
- 1在添加子域名时,只需输入子域;在添加根域名时,要输入完整根域名
- 2如果选择文件时没有看见的话,需要手动选择文件类型
留言