HTTPS SSL进入java请求失败

HTTPS SSL进入java请求失败,java,ssl,Java,Ssl,当我使用http协议请求某些内容时,我的代码工作正常,我得到了预期的响应。但是当我创建一个使用https的版本时,我会得到一个SSL错误。我已经按照中的步骤进行了操作,我认为我不需要中所述的密钥/信任管理器。请参阅下面的代码。我将key和trustmanager设置为null,以便java将采用默认值。我似乎没有在这一步中得到错误,错误发生在inputStream=connection.getInputStream()行。我不知道我还需要添加/设置什么来设置scure连接 private Str

当我使用http协议请求某些内容时,我的代码工作正常,我得到了预期的响应。但是当我创建一个使用https的版本时,我会得到一个SSL错误。我已经按照中的步骤进行了操作,我认为我不需要中所述的密钥/信任管理器。请参阅下面的代码。我将key和trustmanager设置为null,以便java将采用默认值。我似乎没有在这一步中得到错误,错误发生在
inputStream=connection.getInputStream()行。我不知道我还需要添加/设置什么来设置scure连接

private String runSecureService(URL url)
{
    HttpsURLConnection connection = null;
    InputStream inputStream = null;
    SSLContext sslContext = null;

    try
    {
        sslContext = SSLContext.getInstance("SSL");
    }
    catch (NoSuchAlgorithmException e)
    {
        //this exception doesn't occur
    }

    try
    {
        sslContext.init(null, null, null);
    }
    catch (KeyManagementException e)
    {
        //this exception doesn't occur
    }

    HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

    try
    {
        connection = (HttpsURLConnection) url.openConnection();
        connection.setRequestProperty("Authorization", clientCredentials.getBase64Authentication());

    !-----> inputStream = connection.getInputStream(); <------!
        InputStreamReader responseReader = new InputStreamReader(inputStream);

        //Read, print and return the response.
        ...

        return response;
    }
    catch (IOException e)
    {
        //do stuff...
    }
    finally
    {
        //close connection and inputstream...
    }
}

如果尝试发出HTTPS请求,但连接到远程服务器上的HTTP端口,则可以收到此消息


很可能是您在请求中使用了错误的HTTPS端口号。。。或者服务器配置错误,在HTTPS端口上有一个HTTP连接侦听器。

您要在哪个端口上通信?你确定你在使用SSL端口吗?只是想指出,你使用
sslContext.init(null,null,null)
所做的工作基本上是创建一个用默认值初始化的
sslContext
,然后从中获取
SSLSocketSocketFactory
,然后将其设置为
HttpsURLConnection
上的默认
SSLSocketFactory
。用默认值更改默认值是毫无意义的(除非您以前在其他地方更改了它们)。我不知道,我认为您总是有一个指定sslContext,即使它是默认的。如果我正确地解释了你说的话,我可以删除那些代码行,结果会是一样的吗?事实确实如此。关于服务器端口配置,我被错误告知。谢谢你的洞察力。为了向将来的读者澄清:大多数服务器使用:80表示默认HTTP请求,使用:443表示HTTPS请求(尽管两者都可以根据需要进行配置)。任何一个端口都不能同时用于这两个端口,它要么安全,要么不安全。
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at sun.security.ssl.InputRecord.handleUnknownRecord(Unknown Source)
    at sun.security.ssl.InputRecord.read(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)