在Android上使用HttpsUrlConnection,如果我连接到具有不受信任证书的服务器,很可能是自签名证书,我将收到错误。 例如,当在浏览器中发生类似的事情时,无论如何我都可以选择接受该证书。
现在,如何将此证书添加到应用程序的商店,以便在下次与该服务器建立连接时使用它?
或者我是否需要自己制作X509TrustManager / HostNameVerifier,并将传入的证书数据与存储的证书数据进行比较,同时保持所有CA签名证书的正常功能。
换句话说。
因为我已经在所有其他问题中看到了这个问题,因为人们开始提供所有错误的解决方案。我 NOT 想要一个AcceptAllVerifier。我可以不使用任何需要我手动导入证书的内容。
答案 0 :(得分:0)
如果我正确理解了您的问题,那么您不必像问题中那样 AcceptAllVerifier 。
以下代码是我认为您可以参考的示例:
假设您的服务器应用程序托管在服务器计算机内,该服务器计算机具有服务器证书,例如“颁发给” “localhost”。然后,在verify
方法内部,您可以验证“localhost”。
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setSSLSocketFactory(getSSLSocketFactory());
urlConnection.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
return hv.verify("localhost", session);
}
});
有关证书文件的更多信息,getSSLSocketFactory
...您可以参考以下问题(当然它们可以应用于HttpsUrlConnection
):
Does Android Volley support SSL?
Volley SSL - Hostname was not verified
希望这有帮助!