JMeter录制时响应体返回certificate_unknown错误如何解决?
问题:JMeter录制时出现certificate_unknown错误
我使用JMeter的**Recording Controller(录制控制器)**配合代理,在BlueStack(蓝叠模拟器)和个人手机上进行测试,但JMeter的响应体中持续出现certificate_unknown错误。已将JMeter的CA证书下载并安装到模拟器和手机中,想明确该错误是JMeter证书问题还是与外部网站的连接问题,以及对应的解决方法。
错误堆栈信息
javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:336) at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293) at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:185) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172) at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1426) at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1336) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:450) at java.base/sun.security.ssl.SSLSocketImpl.ensureNegotiated(SSLSocketImpl.java:841) at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:932) at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:252) at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:271) at org.apache.jmeter.protocol.http.proxy.HttpRequestHdr.parse(HttpRequestHdr.java:157) at org.apache.jmeter.protocol.http.proxy.Proxy.run(Proxy.java:214)
原因分析与解决方案
错误原因
这个certificate_unknown错误基本是JMeter证书的信任问题,和外部网站连接无关。本质是模拟器/手机作为客户端,与JMeter代理建立SSL连接时,不认可JMeter的CA证书,导致SSL握手失败。
解决步骤
- 确认证书安装位置与用途:
- 安卓系统需将JMeter证书安装到系统证书目录,而非用户证书目录。部分设备需要ROOT权限才能写入系统目录,也可通过工具将用户证书转换为系统证书格式后安装。
- 安装过程中务必选择“VPN和应用”的证书用途,确保被测应用能识别该证书。
- 重新导出并验证JMeter证书:
- 打开JMeter,依次点击
选项→SSL管理器,重新导出ApacheJMeterTemporaryRootCA.crt文件,确保导出过程无异常。 - 检查证书的有效期,确认证书未过期。
- 打开JMeter,依次点击
- 核对代理配置:
- 模拟器/手机的代理地址要设置为JMeter所在机器的局域网IP,端口需与JMeter代理服务器的端口一致(默认8888)。
- 确保JMeter代理已启动,且本地防火墙未拦截该端口的通信。
- 处理证书锁定情况:
- 如果被测应用启用了SSL证书锁定(SSL Pinning),会拒绝信任第三方证书,此时需要借助Xposed框架搭配JustTrustMe等插件绕过证书锁定。
- 安卓10及以上版本,需在系统设置中开启“允许应用查看证书”权限,或在开发者选项中关闭“验证应用”功能。
内容的提问来源于stack exchange,提问作者EBDS
相关产品推荐
相关产品推荐

