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

推荐订阅源

aimingoo的专栏
aimingoo的专栏
S
Securelist
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
AI
AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Schneier on Security
Schneier on Security
Attack and Defense Labs
Attack and Defense Labs
Vercel News
Vercel News
腾讯CDC
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
量子位
S
Schneier on Security
Hacker News: Ask HN
Hacker News: Ask HN
Cyberwarzone
Cyberwarzone
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News and Events Feed by Topic
T
Tenable Blog
PCI Perspectives
PCI Perspectives
MyScale Blog
MyScale Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
W
WeLiveSecurity
N
News | PayPal Newsroom
P
Proofpoint News Feed
O
OpenAI News
C
CERT Recently Published Vulnerability Notes
B
Blog
Cisco Talos Blog
Cisco Talos Blog
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy

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 验证来源拉取〉,也欢迎到我网站 主页 看看别的内容。