gpt4 book ai didi

android - 如何为将来的连接存储 "untrusted/selfsigned"证书

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:33 25 4
gpt4 key购买 nike

在 Android 上使用 HttpsUrlConnection 时,如果我使用不受信任的证书(很可能是自签名证书)连接到服务器,我将收到错误消息。例如,当浏览器中发生类似情况时,我仍然可以选择接受该证书。

  1. 计划是正常运行 URL 连接。
  2. 如果发生证书错误,请使用 Dummy“trust all”重新运行设置,当然仍然会尽快断开连接已收到证书(在 X509TrustManager 和然后是 HostNameVerifier)。在 HostNameVerifier 中返回 false做得很好。
  3. 询问用户是否真的想使用这个证书。

现在,我如何将此证书添加到应用程序的存储区,以便下次连接到该服务器时使用它?

或者我是否需要自己制作 X509TrustManager/HostNameVerifier,并将传入的证书数据与存储的证书数据进行比较,同时保持所有 CA 签名证书的正常功能。

换句话说。

  1. 从服务器检索公共(public)证书(完成)
  2. 询问用户是否仍要使用它。
  3. 将该公共(public)证书导入应用自己的商店中的某处,以供将来连接使用。
  4. 回退到所有 CA 信任证书的常规信任链。

因为我在所有其他问题中都看到过类似的问题,人们开始提供所有错误的解决方案。我想要一个 AcceptAllVerifier。我可以使用任何需要我手动导入证书的东西。

最佳答案

如果我正确理解您的问题,那么您不必像您的问题中那样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);
}
});

更多关于cert文件,getSSLSocketFactory...可以引用以下问题(当然HttpsUrlConnection也可以申请):

Does Android Volley support SSL?

Volley SSL - Hostname was not verified

希望这对您有所帮助!

关于android - 如何为将来的连接存储 "untrusted/selfsigned"证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com