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