0
我试图在Android应用程序和Python API之间实现SSL套接字。SSL套接字 - Java和证书?
下面的代码...
SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault();
Socket s = ssf.createSocket("10.0.2.2", 5001);
DataOutputStream myDataOut = new DataOutputStream(s.getOutputStream());
myDataOut.writeUTF("Hello Server");
myDataOut.flush();
myDataOut.close();
s.close();
不起作用,你可以看到:
590.0750 - Establishing connection to ('127.0.0.1', 50888)
590.0970 - Error while connecting
590.0970 - Error information: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:590)
我相信它不会因为我没有指定的证书。 见客户的Python的工作例如:
import socket, ssl, pprint
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(s,
ca_certs="server.crt",
cert_reqs=ssl.CERT_REQUIRED)
ssl_sock.connect(('localhost', 5001))
print repr(ssl_sock.getpeername())
print ssl_sock.cipher()
print pprint.pformat(ssl_sock.getpeercert())
ssl_sock.write("Hello from the client...")
我如何在Java中指定证书就像我在Python做?
您可以使用jvm参数* -Djavax.net.debug = ssl *来调试Java中的ssl问题。所以你可以看到客户端和服务器之间发生了什么。在你的情况下,我认为你的服务器拥有* localhost *的证书,并且在你的java程序中使用了ip。如果您在带证书的java中使用ip,请务必小心,因为您必须将主机名称用作* CN *。将IP地址作为DNS别名放入ssl v3扩展名中。 –