[解決済み] Python - SSL - バージョン番号が間違っている
質問
これは多分、ただの未解決スレッドになると思いますが、とりあえず情報を記入します。
SSLが一瞬たりともまとまりません。 私のwrap_socket()とdo_handshake()で何が間違っているのか、何かアイデアはありますか?
鍵ファイルは100%完璧に見えます。ハンドシェイクの前に.recv()を入れても入れなくても試してみました。 それはちょうど私がrecv()を置く場所によってこれらを発生させる。
SSL3_GET_CLIENT_HELLO:間違ったバージョン番号
SSL3_GET_RECORD:バージョン番号に誤りがあります。
class Server():
def __init__(self, listen = '', port = 8080, ssl = False):
self.sock = socket.socket()
self.sock.bind((listen, port))
self.sock.listen(5)
def accept(self):
newsocket, fromaddr = self.sock.accept()
newsocket.recv(32)
newsocket.setblocking(0)
sslsock = ssl.wrap_socket(newsocket,
server_side=True,
certfile="./kernel/sock/server.crt",
keyfile="./kernel/sock/server.key",
cert_reqs=ssl.CERT_NONE,
ssl_version=ssl.PROTOCOL_TLSv1,
do_handshake_on_connect=False,
suppress_ragged_eofs=True)
sslsock.do_handshake()
return sslsock, fromaddr
ちなみに、明らかでない場合や私が間違っている場合は、失敗するのはハンドシェイクです :)
コードを少し修正し、SSLv3を試してみたり、折り返しの位置を少し変えてみたりしています。
import socket, ssl, time, select
class Server():
def __init__(self, listen = '', port = 443, ssl = False):
self.sock = socket.socket()
self.sock.bind((listen, port))
self.sock.listen(5)
def accept(self):
self.sock = ssl.wrap_socket(self.sock,
server_side=True,
certfile="./kernel/sock/server.crt",
keyfile="./kernel/sock/server.key",
cert_reqs=ssl.CERT_NONE,
ssl_version=ssl.PROTOCOL_SSLv3,
do_handshake_on_connect=False,
suppress_ragged_eofs=True)
newsocket, fromaddr = self.sock.accept()
print [newsocket.recv(32)]
newsocket.setblocking(False)
newsocket.do_handshake()
return newsocket, fromaddr
s = Server()
ns, na = s.accept()
print ns.recv(1024)
今、私は newsocket.recv(32) で取得します。
<ブロッククオートssl.SSLError: [Errno 1] _ssl.c:1331: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure
となし。
ssl.SSLError: [Errno 2] _ssl.c:490: 操作が完了しませんでした (読み取り)
また 私はTwistedを使うのを拒否しています。
物事を縮小すること。
import socket, ssl, time, select
from OpenSSL import SSL
class Server():
def __init__(self, listen = '', port = 443, ssl = False):
ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.use_privatekey_file("server.pem")
ctx.use_certificate_file("server.pem")
self.sock = SSL.Connection(ctx, socket.socket())
self.sock.bind((listen, port))
self.sock.listen(5)
def accept(self):
newsocket, fromaddr = self.sock.accept()
return newsocket, fromaddr
s = Server()
ns, na = s.accept()
print ns.recv(1024)
これは、"native" sslライブラリと同じように動作します。 しかし、現在ではこのエラーが発生します。
OpenSSL.SSL.Error。[('SSL routines', 'SSL23_READ', 'ssl handshake failure')] となります。
これが今の私の状況です。
import socket, ssl, time #, select
class Server():
def __init__(self, listen = '', port = 443, ssl = False):
self.sock = socket.socket()
self.sock.bind((listen, port))
self.sock.listen(5)
def accept(self):
self.ssl_sock = None
while not self.ssl_sock:
self.ssl_sock = ssl.wrap_socket(self.sock,
server_side=True,
certfile=r"C:\moo.pem",
keyfile=r"C:\moo.key",
cert_reqs=ssl.CERT_NONE,
ssl_version=ssl.PROTOCOL_TLSv1)
newsocket, fromaddr = self.ssl_sock.accept()
print([newsocket.recv()])
return newsocket, fromaddr
s = Server()
ns, na = s.accept()
print(ns.recv(1024))
これはFirefoxでは完璧に動作するのですが ない をGoogle Chromeで表示させることができます。 なぜでしょうか、何が違うのでしょうか?-.-
解決方法は?
Pythonを全く知らないので、コードに問題があるのかどうかわかりません。
しかし、エラーは明確です。クライアントがサポートしている
SSLv3
で、サーバーは
TLSv1
.
のサポートを有効にする必要があります。
SSLv3
またはクライアントをアップグレードしてください。
この行が問題になっているようです。
ssl_version=ssl.PROTOCOL_TLSv1
. おそらく、次のように追加することもできます。
SSLv3
ここで?
更新しました。
ブラウザ間で問題が発生しているようですね。以下を参照してください。
SSLv3
がCromeで有効になっている。
IEでは、例えば以下のようになります。
Internet Options
->
Advanced Tab
.
Chromeでも似たようなものがあるはずです。無効化する
SSv3
を有効にし
TLSv1
代わりに
関連
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない