1748804236 mtls cover

前言

WordPress 作为最多人用的博客系统,其登入页面经常被爆破。我在看 Cloudflare 防火墙日志的时候也发现了很多除了我以外的访问记录。之前我写了一个文章〈个人博客适用的 Cloudflare 防火墙和缓存规则〉,来使每次访问登入页面都需要进行机器人验证。但如果你想在此基础上更安全的话,不妨按下面的步骤来添加 mTLS 用户端凭证。其它带后台的博客平台也可以使用。

简介

一部分内容来自〈mTLS 是什麼? | 雙向驗證 TLS | Cloudflare〉

mTLS,即相互 TLS,是服务端和用户端相互验证的方法。在 mTLS 中,用户端和服务端都有一个凭证,并且双方都使用各自的公开金钥和私密金钥进行验证。与常规 TLS 相比,mTLS 需要额外的步骤来验证双方(额外的步骤以粗体显示):

  1. 用户端连接到服务器
  2. 服务器提供其 TLS 凭证
  3. 用户端验证服务器的凭证
  4. 用户端提供其 TLS 凭证
  5. 服务器验证用户端凭证
  6. 服务器授予用户端访问权限
  7. 双方通过加密的 TLS 连接交换信息
mTLS 原理 - Cloudflare
mTLS 原理 – Cloudflare

因此,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.crtcert.key 文件中,然后用以下命令合并,也会提示输入密码:

openssl pkcs12 -export -out cert.pfx -inkey cert.key -in cert.crt

将凭证导入浏览器和设备

Chrome 浏览器

地址栏输入 chrome://certificate-manager/ 并回车,会打开浏览器的凭证管理员。点击侧边栏第二个「您的凭证」。

对于 Windows 用户,在这里点击「管理从 Windows 汇入的凭证」,再点「汇入」,下一步后,选择刚生成的 pfx 文件,2如果选择文件时没有看见的话,需要手动选择文件类型然后一直下一步即可。

Windows 导入凭证
Windows 导入凭证

对于 Linux 用户,点击「查看从 Linux 汇入的凭证」,然后点击「汇入」,选择文件即可。

Safari 浏览器(iOS)

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

Cloudflare 设置 mTLS 规则

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

建立 mTLS 规则
mTLS 规则
mTLS 规则

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

欢迎到我网站主页看看别的内容。

  • 1
    在添加子域名时,只需输入子域;在添加根域名时,要输入完整根域名
  • 2
    如果选择文件时没有看见的话,需要手动选择文件类型
最后修改日期: 2025-06-02

作者

留言

撰写回覆或留言

您的电子邮件地址不会公开。留言送出后需要等待审核和缓存刷新,请勿重复点击。