我正在尝试使用以下代码从JSON端点获取令牌:
public class FetchToken extends AsyncTask<String, Void, Void> {
String data = "";
String token = "";
public TokenDelegate delegate = null;
@Override
protected Void doInBackground(String... identity) {
try {
if (identity.length == 1) {
URL url = new URL(identity[0]);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while (line != null) {
line = bufferedReader.readLine();
data = data + line;
}
JSONObject JO = new JSONObject(data);
token = JO.get("token").toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
当我运行代码时,我收到以下错误:javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
之前使用相同的代码,我能够查询不同的JSON端点。现在我已切换到这个新服务器,我只收到此错误。
我查看了我公司以前的开发人员的另一个实现,查询同一个服务器。他们的代码中没有引用任何加载的证书,任何信任管理器或任何类型的任何证书。在他们(单独的)Android应用程序中,他们有一个.crt文件位于assets文件夹中,但它似乎没有包含在任何地方的应用程序中。
有没有办法在我的应用程序中安装证书?如果没有,有什么迹象表明我做错了吗?我试图查看对同一错误的其他引用,但它们没有说明如何在不使用CertificateFactory或类似的东西的情况下查询此端点。