私は、ファイルと文字列を通信し、転送するためにPython上のクライアントとJava上のサーバを構築しています。私は最初に(サーバーとクライアントを接続する以外に)行う必要があると思っていますが、SSLハンドシェイクは完了です。以下は、私のPythonクライアントコードと私が実装したJavaサーバコードです:クライアントとサーバとのSSLハンドシェイクの失敗
のPythonクライアントコード
import socket
import ssl
import struct
import io
import threading
import optparse
import os
import sys
HOST = "localhost"
PORT = 777
ADDR = (HOST,PORT)
def sock_connection():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
time.sleep(1)
ssl_sock = ssl.wrap_socket(sock)
try:
time.sleep(1)
ssl_sock.connect(ADDR)
print('CONNECTED!')
except socket.error as e:
print('ERROR', e)
exit(1)
return ssl_sock
def main():
sock_connection()
main()
のJava Serverコード:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
public
class Server {
private static final int PORT = 777;
public
static
void
main(String[] arstring) {
try {
SSLServerSocketFactory sslserversocketfactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket =
(SSLServerSocket) sslserversocketfactory.createServerSocket(PORT);
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();
InputStream inputstream = sslsocket.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String string = null;
while ((string = bufferedreader.readLine()) != null) {
System.out.println(string);
System.out.flush();
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
私は正常に実行され、最初のサーバーを実行します私はクライアントを実行し、私は、サーバーの端末で次のエラーが表示されます:
javax.net.ssl.SSLHandshakeException:共通の暗号スーツなし
とPythonで次
ERROR [SSL:SSLV3_ALERT_HANDSHAKE_FAILURE]のSSLv3警告ハンドシェイクに失敗(_ssl.c:645)
任意およびすべてのヘルプをいただければ幸いです。
おかげ
ありがとうございました! ああ、私は参照してください。さて、サーバーで使用する証明書をセットアップして、クライアントが証明書が有効であることをどのように確認する必要がありますか? –
@ D.Crusaf:はい、証明書をセットアップする必要があります。クライアントがそれを受け入れるかどうかは、誰が証明書を発行したか、およびクライアントがこの発行者を信頼しているかどうかによって決まります。 TLSがどのように機能し、どのように証明書検証がより詳細に行われるかを説明することは、この質問の範囲外です。私は[SSL/TLSはどのように動作するのですか?](http://security.stackexchange.com/questions/20803/how-does-ssl-tls-work)を読むことをお勧めします。 –
ありがとうございました!私はサーバーの証明書を作成しようとします。リンクありがとう、非常に感謝します。 –