【问题标题】:Received fatal alert: handshake_failure webservice收到致命警报:handshake_failure webservice
【发布时间】:2020-06-18 15:22:10
【问题描述】:

我聘请了一个向手机发送短信的网络服务。我试图发出发布请求,但我得到了错误:

Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

网络服务公司向我提供了制作 url 所需的所有信息:用户、密码、所需参数、响应等

gsm 参数是手机号码。 msg 是要发送的消息。

import java.net.HttpURLConnection;
import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;

import java.net.URL;

public class Test3 {

    public static void main(String[] args) throws Exception {

        Test3 obj = new Test3();
        System.out.println("Testing 1 - Send Http POST request");
        obj.sendPost();
     } 

    private void sendPost() throws Exception {

        //
        String url = "https://...url/send";//(that url its just an example, its not the real)

        HttpsURLConnection httpClient = (HttpsURLConnection) new URL(url).openConnection();

        //add reuqest header
        httpClient.setRequestMethod("POST");
        httpClient.setRequestProperty("User-Agent", "Mozilla/5.0");
        httpClient.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

        String urlParameters = "?user=TEST_USER&company=XXX&passwd=TEST_PWD&gsm=666000222&type=plus&msg=hello&sender=me";

        // Send post request
        httpClient.setDoOutput(true);
        try (DataOutputStream wr = new DataOutputStream(httpClient.getOutputStream())) {
            wr.writeBytes(urlParameters);
            wr.flush();
        }

        int responseCode = httpClient.getResponseCode();
        System.out.println("\nSending 'POST' request to URL : " + url);
        System.out.println("Post parameters : " + urlParameters);
        System.out.println("Response Code : " + responseCode);

        try (BufferedReader in = new BufferedReader(
                new InputStreamReader(httpClient.getInputStream()))) {

            String line;
            StringBuilder response = new StringBuilder();

            while ((line = in.readLine()) != null) {
                response.append(line);
            }

            System.out.println(response.toString());

        }

    }
}

此外,如果我尝试通过将 url 写入 Mozilla Firefox 的导航栏来访问 web 服务调用,则会收到该错误:

安全连接失败

在连接到“url”时发生错误,SSL 对等方无法协商一组可接受的安全参数。

错误代码:SSL_ERROR_HANDSHAKE_FAILURE_ALERT

无法显示您尝试查看的页面,因为无法验证接收到的数据的真实性。

【问题讨论】:

  • 听起来像是自签名或过期的 SSL 证书。如果您在浏览器中访问 URL 地址,您会收到任何警告或消息吗?
  • @stdunbar 我添加了浏览器截图
  • 您需要深入了解浏览器错误(了解更多链接可能会有所帮助),但无论哪种方式,这都是无效的 SSL 证书。您可能需要联系供应商以查看这是否是预期的。如果是这样,那么您的代码将不得不更改以适应错误的证书。

标签: java api ssl request httpurlconnection


【解决方案1】:

鉴于有问题的域 (push.tempos21.com) 对我来说适用于浏览器,但不适用于您的应用程序或浏览器,这可能不是应用程序或浏览器的问题,而是您的问题与目标的连接。我怀疑路径中的某处存在一些深度检测防火墙或 IPS,它允许初始 TCP 连接,但一旦从 ClientHello(TLS 握手开始)得知目标,就会阻止流量。

【讨论】:

    猜你喜欢
    • 2012-03-18
    • 2015-12-04
    • 2012-10-15
    • 2018-02-09
    • 2019-01-02
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多