在Java中复制PHP POST请求



我有一个正在运行的PHP脚本,它向一个旧服务器(我无法访问(发出POST请求。我需要用Java/Spring编写一个RESTapi来处理与这个旧服务器的所有通信。然而,我一直得到以下例外:

SSLHandshakeException:DH ServerKeyExchange不符合算法约束

我的猜测是服务器的安全级别太低(我无法更改(。PHP脚本设置了一个SSL密码列表,我不知道如何在Java中复制它。因此,问题是,如何降低Java应用程序的安全级别,使其能够与服务器通信?

php代码:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf8'));
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,4);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, "AES128-SHA");
$response = curl_exec($ch);
echo $response;

我写的Java代码:

CloseableHttpClient client = HttpClients.createDefault();

HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new StringEntity(json));
CloseableHttpResponse response = client.execute(httpPost); //Here SSLHandshakeException occurs

String result = getResultStringFromResponse(response);

client.close();
return result;

一般来说,我处理POST请求的经验非常有限,并且已经处理这个问题好几天了,没有任何进展。任何指导/提示都将不胜感激!

更新:

我设法通过删除java对http请求所需的关键约束来解决这个问题。

这是通过转到我的jdk文件夹并删除";DH密钥大小<1024〃;在/conf/security/java.security文件中。该更改使java接受了服务器的低安全级别。如果有人知道如何在运行时进行操作(这只适用于特定的POST请求(,那将是一个更好的解决方案。

最新更新