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

时间:2018-09-06 17:42:26

标签: java sockets android-studio ssl ssl-certificate

我正在尝试从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);

如何扩展它以使其使用证书?预先感谢!

1 个答案:

答案 0 :(得分:1)

默认情况下,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());