1

Ruby で SMTP サーバーを作成しています。SSL/TLS エラー「復号化に失敗したか、レコードが正しくありません」を処理する正しい方法を理解しようとしています。

操作を再試行すると、#read_nonblock からランダムなガベージが吐き出され、失礼で接続を閉じる以外に、何をすべきかわかりません

4

2 に答える 2

3

あなた自身がここでサーバーであるため、メッセージは、OpenSSL がクライアントから送信された TLS レコードを適切に復号化できなかったか、MAC 計算が失敗したことを示します。つまり、クライアントのタグが計算したものと一致しません。

バグやネットワーク エラー (EJP が述べたように) とは別に、これは誰かが送信したコンテンツを積極的に変更した場合、間違ったメッセージが送信された場合、または部分的なメッセージのみが送信された場合などにも発生する可能性があります。

いずれにせよ、サーバーとして、そのような接続を救おうとはしません。結局のところ、それは攻撃になる可能性があります。このイベントを処理する適切な方法は、SSLSocket#closeを実行しようとするを呼び出すことSSL_shutdownです。これは、「クローズ通知」アラートをクライアントに送信しようとします。これは、これをクローズしようとしていることをピアに伝える適切な TLS の方法です。繋がり。

これが発生したクライアントとの通信を再開するには、ゼロから開始した新しい接続をネゴシエートします。

于 2012-06-17T15:13:13.770 に答える
2

あなたはそれを処理することはできません。SSL ライブラリまたはピアのエラーであるか、非常にまれなネットワーク エラーです。接続を閉じるだけです。

于 2012-06-16T19:06:12.803 に答える