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



我正在尝试从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的正确方法。实现接口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());

最新更新