猿问

在 Java 中复制 PHP POST 请求

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


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 请求的经验非常有限,并且已经研究这个问题好几天了,但没有任何进展。任何指导/提示将不胜感激!


汪汪一只猫
浏览 99回答 1
1回答

牧羊人nacy

我通过删除 java 对 http 请求所需的关键约束来解决这个问题。这是通过转到我的 jdk 文件夹并删除文件 /conf/security/java.security 中的“DH keySize < 1024”来完成的。这一变化使得java接受服务器的低安全级别。如果有人知道如何在运行时执行此操作(例如仅针对特定的 POST 请求),那将是一个更好的解决方案。
随时随地看视频慕课网APP
我要回答