在联调启用了双向TLS的服务时,浏览器能直接访问接口,经过Burp Suite后却可能在握手阶段失败。这里涉及两段连接:浏览器需要信任Burp出示的证书,目标服务器则可能要求Burp出示客户端证书。两份证书的用途不同。客户端证书导入成功后,还要确认它关联的是实际接收请求的主机,多环境共用一个项目时尤其容易填错。
一、BurpSuite客户端证书怎么配置
客户端证书在网络TLS设置中添加。以文件方式配置时,需要准备包含客户端证书及对应私钥的PKCS#12文件,并取得文件密码。
1、导入证书并关联目标主机
单个接口联调可以先填写完整主机名,等握手验证通过后,再考虑是否需要将同一份证书用于其他主机。
①打开【Settings】→【Network】→【TLS】,找到【Client TLS certificates】。
②点击【Add】,在【Destination host】中填写主机名,例如【api.test.example.com】。
③将证书类型设为【File(PKCS#12)】,选取扩展名为【.p12】的证书文件,输入文件密码。
④保存条目,回到【Client TLS certificates】核对主机名和证书文件是否对应。
2、使用硬件令牌或智能卡时选择证书
①在【Client TLS certificates】中点击【Add】,填写【Destination host】。
②将证书类型设为【Hardware token or smartcard(PKCS#11)】,选择设备对应的【PKCS#11库文件】。
③输入设备【PIN】,从列表中选择需要提交给服务器的客户端证书。
④服务端需要补充中间证书链时,添加对应的【中间证书】,保存后进行握手验证。
硬件设备中可能同时存有多张证书,选取时要核对主体和有效期。文件方式也一样,只有公钥证书的文件无法完成客户端身份验证。遇到导入失败,先确认文件内容和密码,再处理扩展名;改后缀不会转换文件格式,也不会补上私钥。
3、把证书设置放在合适的范围
①查看【Client TLS certificates】当前使用的配置范围。
②仅供当前项目使用时,选中【Override options for this project only】。
③在项目证书列表中核对【Destination host】及对应证书,保存项目后重新打开检查。
二、BurpSuite客户端证书怎么匹配域名
域名匹配发生在Burp连接目标服务器时。服务器在TLS握手中请求客户端证书后,Burp才会从列表中按目标主机选择证书。
1、填写实际连接的主机名
①在【Destination host】中填写目标主机,例如【api.test.example.com】,不附加协议、端口或接口路径。
②检查请求的实际连接目标;如果访问过程发生跳转,分别记录跳转前后的【主机名】。
③若两个主机都要求客户端认证,在【Client TLS certificates】中分别建立条目,并关联各自接受的证书。
同一主机下的两个接口路径不能靠这项设置分配不同证书,因为服务器请求客户端证书时,HTTP路径还没有发出。也不要把证书上的主体名称当成匹配条件:Burp按配置中的目标主机选证书,服务器再按自身的信任规则判断是否接受。
2、通配规则有重叠时调整顺序
【】中的匹配项应与实际使用范围一致。星号可以匹配零个或多个字符,问号只匹配一个非点号字符;规则重叠时,列表顺序会影响选择结果。
①在【Destination host】中设置所需规则,例如用【api?.test.example.com】匹配编号为单字符的接口主机。
②同时存在【api.test.example.com】和【*.test.example.com】时,把需要优先使用的专用证书条目移到宽泛规则上方。
③检查列表是否存在【*】条目,按实际需求缩小其范围,或将其放到需要优先命中的条目之后。
④分别访问一个专用主机和一个适用通配规则的主机,核对服务端识别出的客户端证书。
三、BurpSuite客户端证书配置后仍无法连接怎么查
先分清问题发生在哪一段连接。浏览器端弹出证书信任提示,与目标服务器拒绝客户端证书,虽然都出现在HTTPS访问过程中,处理的位置却不同。
1、确认新连接用上了新配置
①打开【Client TLS certificates】,核对当前项目是否启用了覆盖设置,以及实际使用的是哪份列表。
②在【Destination host】中检查目标主机对应的规则,确认前面没有其他同样能匹配的条目。
③让测试请求使用新的【TLS连接】,再访问目标接口。
④在可查看的【服务端TLS日志】中核对收到的证书主体或序列号,确认身份与预期一致。
修改证书列表后,原有连接上的请求未必会重新握手。复测时应把连接复用考虑进去。服务端也可能在握手成功后通过HTTP返回权限错误,这时可以核查证书身份与应用账号的映射,没必要反复导入同一文件。
2、区分证书没送出和送出后被拒绝
如果服务端没有收到证书,检查握手请求和主机匹配;如果已经收到,则把核查重点放到证书本身和服务端配置上。
①查看【服务端TLS日志】,确认请求到达的是哪一个网关或入口,以及该入口是否要求客户端证书。
②核对导入的【.p12文件】是否包含对应私钥,并检查【有效期】和客户端认证用途。
③对照服务端的【受信任签发机构】与客户端证书链,确认中间证书是否齐备。
④若警告出现在外部浏览器一侧,单独检查浏览器对【Burp CA证书】的信任设置。
总结
客户端证书配置能否生效,要看三个条件:目标服务器是否请求证书、Burp选中了哪一条规则、服务器是否接受这张证书。多环境联调时,给不同入口保留清楚的主机与证书对应关系,比反复更换文件省事。如果同一张证书直连可用,经过Burp却失败,可以从实际握手主机和证书列表顺序入手排查。
