惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
T
Threatpost
P
Palo Alto Networks Blog
NISL@THU
NISL@THU
O
OpenAI News
Project Zero
Project Zero
G
GRAHAM CLULEY
P
Privacy International News Feed
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
D
Docker
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
W
WeLiveSecurity
P
Proofpoint News Feed
腾讯CDC
Cloudbric
Cloudbric
S
Secure Thoughts
C
Check Point Blog
博客园 - Franky
T
The Exploit Database - CXSecurity.com
T
Troy Hunt's Blog
GbyAI
GbyAI
Security Archives - TechRepublic
Security Archives - TechRepublic
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
F
Fortinet All Blogs
博客园 - 叶小钗
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
C
Cisco Blogs
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research

Liups233の小站

YubiKey OpenPGP 智能卡使用指南 - Liups233の小站 通过 WKD / OPENPGPKEY DNS 记录部署 GPG 公钥 - Liups233の小站 OpenLiteSpeed 安装与建站配置 详细教程 - Liups233 使用 DNSCrypt-Proxy 为 Linux 配置加密 DNS - Liups233 WordPress 7.0 编辑器改回无衬线字体 - Liups233の小站 Redis 数据库权限与 Unix Socket 配置 - Liups233の小站 Cloudflare 设置 mTLS 验证来源拉取 - Liups233の小站 Docker 自建 RustDesk 远程和 API 服务 - Liups233の小站 ChatGPT Go 印度区免费试用白嫖 1 年 - Liups233の小站 使用 S/MIME 证书签名并加密电子邮件 - Liups233の小站 为 WordPress 外发邮件添加 S/MIME 签名 - Liups233の小站 网站域名变更迁移教程/记录 - Liups233の小站 将动漫视频刻录为视频光盘-蓝光/AVCHD DVD - Liups233の小站 百乐 CUSTOM 912 钢笔使用体验 - Liups233の小站 Kobo 手动安装 NickelMenu 和 KOReader - Liups233の小站 Kobo 阅读器字典缺字解决 - Liups233の小站 iCloud+ 域名邮箱的注册和使用 - Liups233の小站 9 美元一年的通配符 SSL 证书 - Liups233の小站 宝塔面板 Nginx 启用 Brotli 和 Pagespeed - Liups233の小站 拷贝 DVD/Blu-ray 光盘并使用 MeGUI 压制 - Liups233の小站 Spotify 相较 Apple Music 的优点 - Liups233の小站 欧卡/美卡自定义手排挡位布局 - Liups233の小站 内地居民到港开户汇丰和中银香港全过程 - Liups233の小站 给光驱刷入 LibreDrive 固件解锁区域和加密限制 - Liups233の小站 个人博客适用的 Cloudflare 防火墙和缓存规则 - Liups233の小站 为Kobo阅读器添加Google Drive和Dropbox功能 - Liups233の小站 百乐 PILOT Capless Fermo 钢笔评测 - Liups233の小站 业余无线电 B 类考试笔记 - Liups233の小站 黑白阅读器的绝唱?Kobo Clara BW 简单评测 - Liups233の小站 八重洲 WIRES-X 网络注册与使用教程 - Liups233の小站 异世的同路人 — 恋语 Juliamo 游戏简评 - Liups233の小站 欢迎加入我的 FreeDMR 服务器 - Liups233の小站 低至 6 港币一年的 Club SIM eSIM 保号卡 - Liups233の小站 H310/H710(P)/H810 阵列卡刷写为直通模式 - Liups233の小站
使用 Cloudflare mTLS 用户端凭证保护博客登入页面 - Liups233の小站
Liups233 · 2025-06-02 · via Liups233の小站

前言

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

2025-11-03 更新:发现 Cloudflare mTLS 规则设置中的一个较严重问题,已撤销的用户端凭证默认仍可用于验证。如果已经设置过 mTLS 规则,请翻到最后一节〈Cloudflare 设置 mTLS 规则〉查看如何修复。

目录

简介

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

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

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

因此,mTLS 可以防止中间人攻击、暴力破解密码和其他恶意请求。要使用这个功能,网站需要经过 Cloudflare 代理(打开小黄云)。

生成用户端凭证

打开 Cloudflare 仪表板,在侧边栏 SSL/TLS 下找到用户端凭证,然后点「编辑」添加主机。我这边就添加了 www 子域和根域名。1在添加子域名时,只需输入子域;在添加根域名时,要输入完整根域名,如图。

1748798720 user cert host
添加用户端凭证主机

添加主机后,点击蓝色的「建立凭证」按钮。算法建议选择默认的 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 接收。点击证书文件后,会提示「已安装描述档」。然后点开手机设置-已下载描述档,再点安装。安装时会先后提示输入手机解锁密码和凭证密码。

下载描述档
安装描述档

注意:本节内容已于 2025-11-03 更改,以避免已撤销的用户端凭证仍可用于验证。具体更改处本节也会说明

回到 Cloudflare 仪表板,点击工具栏的网络安全-WAF-自订规则-建立规则。

Cloudflare WAF 建立规则
Cloudflare WAF 建立规则

新建第一个规则(放在首位),用于封锁未验证 mTLS 证书或证书已撤销的访问,规则如下:

  • 名称:自己填写
  • 运算式:(not cf.tls_client_auth.cert_verified and http.request.uri.path contains "wp-admin" and ip.src ne <服务器 IP>) or (not cf.tls_client_auth.cert_verified and http.request.uri.path contains "wp-login") or (cf.tls_client_auth.cert_revoked)
  • 选择动作:封锁
  • 放置于:第一

规则含义:

  • 如果 mTLS 证书未验证,且正在访问 URI 路径包含 wp-admin 的页面,且访问 IP 不等于服务器 IP,则封锁(排除服务器 IP 是为了避免 WordPress 的一些自检功能出错)
  • 如果 mTLS 证书未验证且正在访问 URI 路径包含 wp-login 的页面,则封锁
  • 如果 mTLS 证书已撤销,则无论访问什么页面都封锁

此处的规则必须使用运算式填写并保存,因为 cf.tls_client_auth.cert_revoked 这个用于判断 mTLS 证书是否已撤销的指令还不能以可视化形式添加。关于这个判断指令的说明,请参考文档

mTLS 第一条规则:封锁未验证访问
mTLS 第一条规则:封锁未验证访问

然后添加第二个规则,放在第一个规则下面,用于解除已验证用户的一切 WAF 限制:

  • 名称:自己填写
  • 运算式:(cf.tls_client_auth.cert_verified and not cf.tls_client_auth.cert_revoked)
  • 选择动作:跳过
  • 符合要求的记录:关闭
  • 要跳过的 WAF 元件:全部勾选
  • 放置于:<第一条规则>之后

规则含义:如果 mTLS 证书已验证,且证书未撤销,则跳过其他规则和其他限制。这条规则也要使用运算式填写并保存。

mTLS 第二条规则:解除已验证用户的限制
mTLS 第二条规则:解除已验证用户的限制

如果想让验证规则更严格,也可以使用 cf.tls_client_auth.cert_fingerprint_sha256 这条判断语句,即判断提交的证书指纹的 SHA256 摘要是否满足条件,详见文档

访问

设置好后,可以清除下 Cloudflare 的缓存,然后用浏览器访问网站后台试试,应该会弹出凭证的选择界面。如果不选择凭证,访问就会被拦截掉。对于访客来说,这个凭证窗口是不会出现的,只有在安装了的情况下才会出现。但也有个小问题,就是在访问非管理页面时也会弹出窗口。也许可以将 WordPress 登入页面放在一个新的子域名,然后修改 mTLS 主机名和规则。有需要就自行研究吧。

Chrome 选择凭证
iOS Safari 用户端凭证

另外,Cloudflare 边缘服务器到原始服务器之间的连接也可以用 mTLS 保护,教程请见〈Cloudflare 设置 mTLS 验证来源拉取〉,也欢迎到我网站 主页 看看别的内容。