Java通过OAuth连接Sharepoint时出现SSL相关异常如何解决?
解决方案
该报错的核心原因是Java 1.8.0_261版本内置的TLS 1.3协议实现存在兼容性缺陷,微软login.microsoftonline.com端点现已默认启用TLS 1.3协商,旧版本JDK的TLS主密钥生成器参数不匹配导致异常抛出,可通过以下三种方案解决:
方案1:升级JDK版本
直接升级Java 8到1.8.0_301及以上的更新版本,该版本已官方修复TLS 1.3参数初始化的bug,升级后无需修改任何业务代码即可正常发起请求(优先推荐)。
方案2:强制指定TLS 1.2版本(无需升级JDK)
如果暂时无法升级JDK,可通过配置强制禁用TLS 1.3协商,仅使用TLS 1.2发起请求:
Spring Boot全局配置
在application.properties或application.yml中添加如下配置:
# 全局指定HTTPS使用TLS 1.2版本 server.ssl.enabled-protocols=TLSv1.2 spring.httpclient.ssl.enabled-protocols=TLSv1.2
自定义HTTP客户端配置
如果使用自定义的HttpClient实例,可手动指定支持的TLS版本:
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import javax.net.ssl.SSLContext; // 初始化仅支持TLS 1.2的SSL上下文 SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, null, new java.security.SecureRandom()); SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory( sslContext, new String[]{"TLSv1.2"}, null, SSLConnectionSocketFactory.getDefaultHostnameVerifier() ); CloseableHttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(sslSocketFactory) .build();
方案3:修改JDK全局安全配置
找到JDK安装目录下的jre/lib/security/java.security文件,修改以下配置项:
- 找到
jdk.tls.disabledAlgorithms配置,将TLSv1.3添加到禁用列表中,强制该JDK下所有Java应用默认不使用TLS 1.3协议 - 配置修改完成后重启应用即可生效
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

