我有這個有效的 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 請求的經驗非常有限,并且已經研究這個問題好幾天了,但沒有任何進展。任何指導/提示將不勝感激!
1 回答

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
我通過刪除 java 對 http 請求所需的關鍵約束來解決這個問題。
這是通過轉到我的 jdk 文件夾并刪除文件 /conf/security/java.security 中的“DH keySize < 1024”來完成的。這一變化使得java接受服務器的低安全級別。如果有人知道如何在運行時執行此操作(例如僅針對特定的 POST 請求),那將是一個更好的解決方案。
- 1 回答
- 0 關注
- 141 瀏覽
添加回答
舉報
0/150
提交
取消