Selenium自动化测试ProxyToServerConnection异常排查求助
解决ProxyToServerConnection SSLHandshakeException(Tag mismatch!)的方案
针对卡巴斯基证书替换导致的日志刷屏问题,以下是几个实用的解决思路:
1. 屏蔽目标日志输出(最快见效)
既然测试功能不受影响,直接调整日志级别屏蔽该错误即可。根据你使用的日志框架修改配置:
- Log4j:在
log4j.properties中添加
也可直接设为log4j.logger.org.apache.http.conn.ssl.ProxyToServerConnection=ERROROFF彻底关闭该类日志。 - Logback:在
logback.xml中添加<logger name="org.apache.http.conn.ssl.ProxyToServerConnection" level="ERROR" />
2. 导入卡巴斯基根证书到JVM信任库
卡巴斯基的中间人证书未被JVM默认信任,是触发握手错误的根源。将其导入JVM系统信任库即可解决:
- 导出卡巴斯基根证书:打开浏览器访问任意HTTPS站点,查看证书详情,导出为
.crt格式(建议选DER编码)。 - 执行keytool命令导入(替换路径和证书名):
默认密钥库密码为keytool -import -alias kaspersky-root -file /path/to/kaspersky.crt -keystore $JAVA_HOME/jre/lib/security/cacertschangeit,按提示确认导入即可。
3. 自定义Selenium HttpClient忽略SSL验证(测试环境专用)
如果无法修改JVM信任库,可以通过自定义Selenium底层的HttpClient来跳过SSL证书验证:
import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLContextBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.openqa.selenium.remote.HttpCommandExecutor; import org.openqa.selenium.remote.RemoteWebDriver; // 在WebDriver初始化完成后执行以下代码 SSLContext sslContext = new SSLContextBuilder() .loadTrustMaterial(null, (chain, authType) -> true) // 信任所有证书 .build(); CloseableHttpClient httpClient = HttpClients.custom() .setSSLContext(sslContext) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) // 忽略主机名验证 .build(); // 替换RemoteWebDriver的HttpClient HttpCommandExecutor executor = (HttpCommandExecutor) ((RemoteWebDriver) yourDriverInstance).getCommandExecutor(); executor.setHttpClient(httpClient); ((RemoteWebDriver) yourDriverInstance).setCommandExecutor(executor);
注意:此方法仅适用于测试环境,生产环境禁用。
4. 配置浏览器参数忽略证书错误
针对Chrome/Firefox等浏览器,直接通过Options设置忽略证书错误:
- ChromeDriver:
ChromeOptions options = new ChromeOptions(); options.addArguments("--ignore-certificate-errors"); options.addArguments("--ignore-ssl-errors"); WebDriver driver = new ChromeDriver(options); - FirefoxDriver:
FirefoxOptions options = new FirefoxOptions(); options.setAcceptInsecureCerts(true); WebDriver driver = new FirefoxDriver(options);
内容的提问来源于stack exchange,提问作者Mallerta
相关产品推荐
相关产品推荐

