这个Java代码仍然安全吗?使用URL类的HTTPS连接

时间:2011-08-28 21:25:03

标签: java http url ssl https

我正在为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连接保护(我相信这是真的)。上面的代码中是否存在相同的安全性?如果没有,我将如何做到这一点?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

是。这条线

new URL(url).openStream()

相当于

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

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

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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