在 Java 中复制 PHP POST 请求

Replicating a PHP POST request in Java

我有这个有效的 PHP 脚本,它向旧服务器(我无权访问)发出 POST 请求。我需要在 Java/Spring 中编写一个 REST api 来处理与这台旧服务器的所有通信。但是,我确实不断收到以下异常:

SSLHandshakeException: DH ServerKeyExchange does not comply to algorithm constraints

我的猜测是服务器的安全级别太低(我无法更改)。 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 请求的经验非常有限,并且已经在这个问题上工作了好几天,但没有任何进展。任何 guidance/tips 将不胜感激!

更新:

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

这是通过转到我的 jdk 文件夹并删除文件 /conf/security/java.security 中的“DH keySize < 1024”来完成的。该更改使 java 接受服务器的低安全级别。如果有人知道如何在运行时执行此操作(例如仅针对特定 POST 请求),那将是一个更好的解决方案。