Android 改装失败的响应回调,java.security.cert.CertificateException
我正在尝试使用改装来调用此api: 以下是正在进行连接的代码:Android 改装失败的响应回调,java.security.cert.CertificateException,android,ssl,retrofit,Android,Ssl,Retrofit,我正在尝试使用改装来调用此api: 以下是正在进行连接的代码: retrieveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Retrofit retrofit = new Retrofit.Builder() .baseUr
retrieveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASEURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
ISSApi api = retrofit.create(ISSApi.class);
Call<ISS> ISS = api.getLocation();
ISS.enqueue(new Callback<ISS>() {
@Override
public void onResponse(Response<ISS> response) {
System.out.println("booya");
}
@Override
public void onFailure(Throwable t) {
System.out.println("failure");
System.out.println(t.getMessage().toString());
t.printStackTrace();
}
});
retrieveButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
改装改装=新改装.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
ISSApi=改装.create(ISSApi.class);
调用ISS=api.getLocation();
ISS.enqueue(新回调(){
@凌驾
公共响应(响应){
System.out.println(“booya”);
}
@凌驾
失效时的公共无效(可丢弃的t){
系统输出打印项次(“失败”);
System.out.println(t.getMessage().toString());
t、 printStackTrace();
}
});
因此,在启动onFailure回调时,它似乎至少能够找到API,但我收到了以下错误:
javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚点
一些注意事项:
我以前在启用SSL的API中使用过OkHTTP,而且我从未处理过证书。此外,我注意到,如果我在Nexus 5上访问API端点,我会得到以下信息:。也许这与问题有关
感谢您的帮助。使用改型2.0.0。您尝试连接的服务器没有适用于Android的有效SSL证书 这很奇怪,因为我可以在我的计算机上访问它而没有任何问题,但显然,Android缺少签署此证书的CA 您可以做什么:
SslSocketFactory
另一种方法是查找谁是此服务器证书的证书颁发机构,然后添加它(它将与#1和#2一起使用) 检查以了解如何使用OkHttp覆盖证书验证
编辑:证书颁发者似乎是RapidSSL(信息)。没错。我可以在我的电脑上访问端点,但在移动设备上我发现了错误。我不确定这部分的意思:“另一种方法是查找谁是此服务器证书的证书颁发机构,然后添加它。”(它将与#1和#2一起工作)。”你能详细说明一下吗?另外,在你链接的示例中,他们正在使用他们机器上的证书文件。我没有这个API,我如何获得证书?编辑:另外,很奇怪RapidSL默认不受信任…它是获取SSL的最流行资源之一…回答你的两个问题。1)SSL身份验证可以在多个级别工作。您拥有服务器证书本身以及颁发者。如果您检查颁发者的证书,您可能会发现颁发者也是谁,从而创建一个证书链。服务器中的证书可能每3个月更改一次,但颁发者可能会持续更长时间。安卓如何验证证书用于保存世界上最受信任的颁发者的证书,并在证书链中导航以对其进行测试。2)您可以使用以下方法获取.cert文件: