我正在使用Java构建一系列Web服务,其中包括依赖Google的Geocoding Maps API将物理地址转换为纬度和经度点。
根据documentation,可以通过执行简单的GET来访问地理编码服务,例如以下网址:
https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY
此处YOUR_API_KEY
将替换为与您的应用对应的实际密钥。
提出实际问题,我打算在Java中使用HttpsUrlConnection
来进行GET调用。但是,我对我应该信任的证书感到困惑。简单地信任所有证书是安全的,还是我应该将Google SSL证书安装到我的信任库中,并且只相信它?我在Stack Overflow上读到了关于中间人攻击的内容,但我不知道它们是否有可能存在。
答案 0 :(得分:2)
取决于
Google SSL证书是否由已知的Certificate Authority(CA)签名?
如果是这样,那么SSL证书应该在Java附带的默认信任库中,您不需要做任何事情来信任该证书。
如果没有,那么您需要特别信任Google SSL证书。
我个人使用InstallCert程序将证书下载并安装到默认的Java Truststore。
修改强>
以下是一些示例代码:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class GoogleMapsTest {
public static void main(String[] args) throws Exception {
URL url = new URL("https://maps.google.com/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
while((line = rd.readLine()) != null) {
System.out.println(line);
}
rd.close();
}
}
以上代码的灵感来自于How to send HTTP request in java?以及如何使用HttpURLConnection POST data to web server?