gpt4 book ai didi

java - 如何在 Java/Android Studio 中将服务器的证书添加到客户端

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

我正在尝试从 Android 手机连接到使用 Python 实现的 SSL 服务器。我自签了证书 server.crt 并想在 Android 应用程序中使用此证书。

我如何在 Java 中执行此操作?在 Python 中,这可以通过以下方式完成:

sock = socket.socket(socket.AF_INET6)
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, cafile = 'server.crt')
conn = context.wrap_socket(sock, server_hostname = HOST)
conn.connect((HOST, PORT))

我当前的 Java 代码如下所示:

SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) factory.createSocket(HOST, PORT);

我如何扩展它以使其使用证书?提前致谢!

最佳答案

默认情况下,Java 使用 cacerts 文件,该文件存储受信任的证书颁发机构。它位于 jre/lib/security/cacerts。你可以在那里添加它。此外,您可以通过 Java 加密选项指定不同的 CA 存储。

如果你想用代码来做,你可以。但这并不是 IMO 的正确方法。实现接口(interface) X509TrustManager。然后是这样的:

X509TrustManager[] arr = new YourX509TrustManager []{new YourTrustManager()};
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), arr, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

关于java - 如何在 Java/Android Studio 中将服务器的证书添加到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52209572/

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