android - 由于带有 https url 的设备日期时间错误,无法在 Android 中加载 api 响应
问题描述
当我调用托管在安全服务器 SSL(https) 上的 API 时,如果系统的日期时间错误(手动设置),那么我们会出现以下错误。
javax.net.ssl.SSLHandshakeException: Chain validation failed
java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date
java.security.cert.CertPathValidatorException: Could not determine revocation status
即使移动日期和时间错误,是否有任何方法允许应用程序加载响应表单 api?
奇怪的问题是所有其他应用程序都可以正常工作,即使那些有带有 https 的 api。我需要做哪些更改,它允许移动应用程序也以错误的日期时间调用 api(https)。
解决方案
添加证书访问
private static SSLSocketFactory getSSLSocketFactory() {
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
return sslSocketFactory;
} catch (KeyManagementException | NoSuchAlgorithmException e) {
return null;
}
}
现在添加 SSL 套接字工厂,如下所示
httpClient.sslSocketFactory(getSSLSocketFactory());
httpClient.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
推荐阅读
- java - 如何防止在通过 JNI 加载之前修改 Java 中的 DLL 文件?
- angular - Angular中*ngFor中的“=”(等号)和“of”有什么区别?
- java - 带有 Postman 测试的 Spring RequestBody
- intellij-idea - 如何让 Intellij 自动将类名转换为 Javadocs 中的 @link?
- c++ - QGraphicsScene 中的 QPushButton 需要双击而不是单击
- reactjs - 请为 Reactjs Select 下拉菜单提供一些最佳实践的代码建议
- solr - 有什么方法可以在 solr 中实现自定义(除了 index/count )分面值排序吗?
- docker - Net Core 部署到 Docker 配置
- java - 自动删除旋转的 gc.log 文件
- database - 如何通过原始数据文件(即没有 API 或连接器)访问 hsql 数据库?