志不强者智不达,言不信者行不果。这篇文章主要讲述Android Volley Self签名证书相关的知识,希望能为你提供帮助。
我试图从我的android应用程序访问HTTPS网址。我的服务器端有自签名证书(server_certificate.cer)。
我想知道如何将自签名证书添加到排球网络请求以信任我的自签名证书。尝试与http://blog.applegrew.com/2015/04/using-pinned-self-signed-ssl-certificate-with-android-volley/
并获取javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。
答案我成功地遵循了该教程。
您需要创建一个密钥库文件(例如“cert_keystore.pkcs12”)以包含您的服务器证书并将其添加到您的应用程序。
我发现最简单的方法是将PKCS12格式用于密钥库文件。 (使用-deststoretype PKCS12
转换密钥库时添加keytool
param)
我的测试服务器在IP地址上,我必须禁用主机名验证才能使用我的自签名证书。这个other tutorial很有用。
我不得不将HttpsURLConnection.setDefaultHostnameVerifier()
与自定义HostnameVerifier和HttpsURLConnection.setDefaultSSLSocketFactory ()
添加到newSslSocketFactory()。
(newSslSocketFactory()用于Volley.newRequestQueue(mCtx.getApplicationContext(), new HurlStack(null, newSslSocketFactory())
)
【Android Volley Self签名证书】新的newSslSocketFactory()函数现在是:
private SSLSocketFactory newSslSocketFactory()
{
try
{
KeyStore trusted = KeyStore.getInstance ("PKCS12");
// Get the raw resource, which contains the keystore with
// your trusted certificates (root and any intermediate certs)
InputStream in = mCtx.getApplicationContext().getAssets ().open ("cert_keystore.pkcs12");
try {
// Initialize the keystore with the provided trusted certificates
// Provide the password of the keystore
trusted.load (in, "password".toCharArray ());
} finally {
in.close();
}String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(trusted);
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify (String hostname, SSLSession session) {return hostname.equals ("192.168.1.10");
//The Hostname of your server}
};
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory sf = context.getSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory (sf);
return sf;
}
catch (Exception e)
{
throw new AssertionError(e);
}
}
推荐阅读
- Grommet(专为ReactJS设计的设计系统)
- 如何在mybatis的mapper接口中为更新查询编写foreach循环
- Dockerized webapp - 热重新加载
- WebApplication ASP.Net C#。取消屏蔽文本框,也称为显示密码
- 解决Azure Web App 500内部服务器错误超时问题并对其进行故障排除
- 如何在不使用webView的情况下在Android应用程序中显示Web内容
- Webapp地址与.war文件名不同
- 使用Google Apps脚本Web应用添加到Google表格
- 对于任何不匹配的URL,Jetty ConstraintMapping()