致命警报:Java 8上的协议版本

问题描述 投票:1回答:1

我有一个用Java 8开发的Web服务客户端。我已经验证了我要连接的主机通过此站点正在使用TLSv1.2。 https://www.ssllabs.com/ssltest/

发送执行后请求时出现以下错误:

javax.net.ssl.SSLException:收到致命警报:protocol_version

我已经在代码的开头添加了这一行。没运气。

System.setProperty(“ https.protocols”,“ TLSv1.2”);

我还在WebSphere服务器应用程序中添加了JVM参数。

-Dhttps.protocols = TLSv1.2

仍然,错误在那里。

我读过类似的问题,我认为使用Java 8默认为TLSv1.2。错误不断出现,因此我仍然添加了这些属性。所以我不确定为什么会这样。

这是我的代码。

Loggers.general().debug(LOG, "### getOKTAToken()...");
String OKTAresponse = "";
OKTAResponse oktaReply = new OKTAResponse();
HttpClient httpClient = HttpClientBuilder.create().build();
Loggers.general().debug(LOG, "### ipsum");
//pass webservice URL
Loggers.general().debug(LOG, "URL:{}",Constants.URL);
HttpPost httpPost = new HttpPost(Constants.URL);        
ArrayList<NameValuePair> postParameters;

//required keys for OKTA call
Loggers.general().debug(LOG, "Setting Body");
postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("client_id", 
Constants.clientID));
postParameters.add(new BasicNameValuePair("client_secret", 
Constants.clientSecret));
postParameters.add(new BasicNameValuePair("grant_type", 
Constants.grantType));

try 
{
Loggers.general().debug(LOG, "Setting entity...");
httpPost.setEntity(new UrlEncodedFormEntity(postParameters,"UTF-8"));
HttpResponse response = httpClient.execute(httpPost);

错误指向最后一行。HttpResponse响应= httpClient.execute(httpPost);有谁知道为什么这个错误不断出现?需要增援。

环境:

  • Java 8
  • WebSphere 8.5.5
  • Windows 10
java-8 http-post httpclient
1个回答
0
投票

您必须在Java运行时执行期间在Websphere Application Server级别上更改TLS协议版本。

如下图所示,从WAS管理控制台将协议设置为TLSv1.2,然后重新启动Websphere Application Server。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.