2017-02-01 21 views
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で証明書を指定することができますか?

+0

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

答えて

1

私はあなたのことを正しく理解していると思いますが、このanswerの関連する質問は面白いかもしれません。認定の特定方法について説明します。