如何使用Fiddler验证应用发出的WebAPI请求是否携带客户端证书?
当然可以用Fiddler验证请求是否携带客户端证书!我之前也遇到过类似的问题,给你分享几个实用的方法:
验证步骤与方法
第一步:确保Fiddler能解密HTTPS流量
客户端证书是在SSL/TLS握手阶段传递的,所以必须让Fiddler能解密HTTPS请求:
- 打开Fiddler,点击顶部菜单
Tools > Options > HTTPS - 勾选
Decrypt HTTPS traffic,按照提示安装Fiddler的根证书(这一步是核心,否则无法捕获加密的握手细节)
方法一:通过会话属性查看证书发送情况
捕获到应用发送的目标API请求后:
- 选中该会话,按下
Alt+Enter打开属性窗口 - 往下滚动找到SSL Handshake区域,这里会明确显示
Client Certificate相关信息:- 如果显示了证书的主题、颁发者等内容,说明请求确实携带了证书
- 如果显示
None或未提及客户端证书,那就是应用没把证书发出去
方法二:用脚本快速标记带证书的请求
如果需要快速识别所有带客户端证书的请求,可以修改Fiddler脚本:
- 点击
Rules > Customize Rules,打开脚本编辑器 - 找到
OnBeforeRequest函数,添加以下代码:if (oSession.RequestFlags.HasFlag(SessionFlags.ClientCertSent)) { oSession["ui-color"] = "orange"; } - 保存脚本后,所有发送了客户端证书的请求都会在Fiddler会话列表中显示橙色,一眼就能区分
注意事项
要确保应用确实通过Fiddler代理发送请求:
- 如果应用硬编码了代理或不使用系统代理,需要手动在应用中设置代理地址为
127.0.0.1:8888(Fiddler默认监听端口),这样请求才会经过Fiddler被捕获
后续排查方向
- 如果Fiddler确认证书已发送,问题大概率出在WebAPI端配置:比如是否开启客户端证书验证、是否信任该证书的颁发机构、证书链是否完整等
- 如果Fiddler未检测到证书,就要回头检查应用附加证书的逻辑——有时候调试器显示证书已附加,但实际发送时可能因为权限、证书格式或代码逻辑问题没带上
内容的提问来源于stack exchange,提问作者Don Chambers




