【问题标题】:Is this Java code still secure? HTTPS Connections using the URL class这个 Java 代码仍然安全吗?使用 URL 类的 HTTPS 连接
【发布时间】:2011-11-05 15:31:08
【问题描述】:

我正在为 API 编写 Java 包装器,并且我有一个关于 SSL 和 HTTPS 连接的基本问题。我知道当在浏览器中建立HTTPS连接时,浏览器和服务器之间的信息是加密的,因此如果被截获信息就无法读取。据我所知,这就是基本的 SSL 连接。

但是,Java 方法调用和服务器之间是否存在相同级别的安全性?例如,如果我创建一个地址为“https://server.com/”的 URL 类,Java 代码和服务器之间的信息会被加密吗?

换句话说,在这种类型的代码中返回的信息是否安全(直接从我的 API,返回一个 JSON 字符串):

public static String getJSON() {
    String url = "https://nxtpass.com/create/?" +
                "apiKey=" + apiKey // so on, building up the query
        return IOUtils.toString(new URL(url).openStream());
}

如果我将该地址输入浏览器,返回的 JSON 字符串将由 HTTPS 连接保护(我相信这是真的)。我上面的代码中是否存在相同的安全性?如果没有,我该怎么做?

【问题讨论】:

    标签: java http url ssl https


    【解决方案1】:

    HTTPS是HTTP over SSL,无论客户端是浏览器,Java,VB,Smalltalk,Snobol,Fortran,...

    【讨论】:

      【解决方案2】:

      是的,这与浏览器一样是安全的。您在 URL 中传递的所有参数都将使用 SSL 保护。

      附带说明,如果服务器端证书不受信任[如果它是自签名证书],您需要在调用之前设置以下两个系统属性 - 您需要将相应的公共证书导入本地密钥库[路径/到/trutstore]。

      System.setProperty("javax.net.ssl.trustStore","path/to/trutstore");
      System.setProperty("javax.net.ssl.trustStorePassword", "password");
      

      【讨论】:

        【解决方案3】:

        是的。线

        new URL(url).openStream()
        

        等价于

        new URL(url).openConnection().getInputStream()
        

        openConnection() 调用返回指定协议的适当连接。

        在这种情况下,它将是一个HttpsURLConnection,它被编码为实际执行 HTTPS。

        【讨论】:

          【解决方案4】:

          如果我理解您的问题,Java 发行版内置了对JSSE 的支持,它具有 SSL 协议处理程序(HTTP over SSL)。所以,是的,通过java.net.URL 类建立的连接对于正在访问的 HTTPS URL 是安全的。

          【讨论】:

            猜你喜欢
            • 2013-05-01
            • 2018-05-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多