クラス用の単純なサーバーを作成していて、「クリエイティブ」コンポーネントがあるため、それに SSL を追加したいと考えています。接続を SSLSocket でラップしようとしていますが、2 つの異なるエラーが発生しますが、それらを理解できません。ソケットをラップしようとすると、Safariで最初に発生し、次のようになります。
Traceback (most recent call last):
File "./junk.py", line 12, in <module>
connstream = ssl.wrap_socket(connected_socket,certfile="cert.pem",keyfile="cert.pem",server_side=True,cert_reqs=ssl.CERT_NONE,ssl_version=ssl.PROTOCOL_TLSv1,suppress_ragged_eofs=True)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 372, in wrap_socket
ciphers=ciphers)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 134, in __init__
self.do_handshake()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 296, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [Errno 8] _ssl.c:503: EOF occurred in violation of protocol
Safari が証明書が有効ではないことをユーザーに伝えた場合 (コマンドを使用して自己署名証明書を作成しました: openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
)、証明書が問題ないことを伝えると、次回は通過します。
ただし、Firefox では、クライアント (Firefox) がサーバーに送信したものを読み取ろうとすると、まったく別のエラーが発生します。
Traceback (most recent call last):
File "./junk.py", line 13, in <module>
recieved = connstream.read()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 151, in read
return self._sslobj.read(len)
ssl.SSLError: [Errno 1] _ssl.c:1354: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca
以下は私が使用したコードです:
1 #!/usr/bin/python
2 import socket
3 import ssl
4
5 serverPort = 22222
6 serverSocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
7 serverSocket.bind( ( '127.0.0.1', serverPort ) )
8 serverSocket.listen( 10 )
9
10 while True:
11 connected_socket, from_addr = serverSocket.accept()
12 connstream = ssl.wrap_socket(connected_socket,certfile="cert.pem",keyfile="cert.pem",server_side=True,cert_reqs=ssl.CERT_NONE,ssl_version=ssl.PROTOCOL_TLSv1,suppress_ragged_eofs=True)
13 recieved = connstream.read()
14 print recieved
15 connstream.unwrap()
16 connected_socket.close()
誰でも私が理解するのを手伝ってくれますか:
1) これらのエラーの意味
2) 取得する理由
3)これらを修正するにはどうすればよいですか
(思いつく限りの方法で検索しました)
ありがとう、
アンドリュー