0
Android Appと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の実施例を参照してください:私は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で証明書を指定することができますか?
Javaでsslの問題をデバッグするには、jvmパラメータ* -Djavax.net.debug = ssl *を使用します。クライアントとサーバーの間に実際に何が起こったのかを知ることができます。あなたのケースでは、あなたのサーブが* localhost *の証明書を持っていると思っています。あなたのjavaプログラムではipを使用しています。証明書付きのjavaでipを使用する場合は、ホスト名を* CN *として使用する必要があるので注意してください。 IPアドレスをssl v3の拡張子にDNSエイリアスとして入れます。 –