You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jsoup1.8.1请求HTTPS站点抛出SSLException:Tag mismatch异常求解决

问题根因

你遇到的AEADBadTagException: Tag mismatch错误核心是2014年发布的jsoup 1.8.1版本内置的HTTP客户端实现,和JDK 16的TLS 1.3加密栈不兼容,维基百科现在默认开启TLS 1.3加密,老版本jsoup无法正确解析TLS 1.3的GCM加密报文导致校验失败。

可行解决方案

方案1:升级jsoup版本(最推荐)

直接修改pom.xml中jsoup的依赖版本为最新稳定版即可,新版本已完全适配高版本JDK的SSL实现:

<dependency>  
  <groupId>org.jsoup</groupId>  
  <artifactId>jsoup</artifactId>  
  <version>1.17.2</version>  
</dependency>

修改后重新拉取依赖,原有代码无需任何改动即可正常运行。

方案2:强制指定TLS 1.2协议(不升级jsoup的临时方案)

如果受项目限制无法升级jsoup版本,可在发起请求时强制使用TLS 1.2协议,规避TLS 1.3的兼容问题,修改代码如下:

import javax.net.ssl.SSLContext;
import java.security.SecureRandom;
import java.io.IOException;  
import org.jsoup.Jsoup;  
import org.jsoup.nodes.Document;  

public class Main{  
    public static void main( String[] args ) throws Exception{  
        // 初始化TLS 1.2的SSL上下文
        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(null, null, new SecureRandom());
        // 连接时指定使用该SSL上下文的Socket工厂
        Document doc = Jsoup.connect("https://en.wikipedia.org/wiki/Main_Page")
                .sslSocketFactory(sslContext.getSocketFactory())
                .get();  
        String title = doc.title();
        System.out.println("title is: " + title);  
    }  
}

方案3:添加JVM启动参数

不想修改代码的话,可直接在运行配置的JVM参数中添加如下配置,全局强制客户端使用TLS 1.2协议:

-Djdk.tls.client.protocols="TLSv1.2"

内容的提问来源于stack exchange,提问作者Riko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:48:04