2

SSL_connect()ssl v3をサポートしていますか?私がこれを求めている理由は、サイトにアクセスしている間です:

https://secure53.onlineaccess1.com

SSL_connect(ssl)<0および5として、ERR_get_error()として0の戻り値を取得します。したがって、最終結果は、が5でSSL_get_error()あることがわかりました。SSL_get_error()

SSL_ERROR_SYSCALL

I/Oエラーが発生しました。OpenSSLエラーキューには、エラーに関する詳細情報が含まれている場合があります。エラーキューが空の場合(つまり、ERR_get_error()が0を返す場合)、retを使用してエラーの詳細を調べることができます。ret== 0の場合、プロトコルに違反するEOFが観察されました。ret == -1の場合、基礎となるBIOはI / Oエラーを報告しました(UnixシステムのソケットI / Oについては、errnoで詳細を確認してください)。

そして、ERR_get_error() 0を返すので、it means an EOF was observed that violates the protocol.

しかし、それはsslv3をサポートしていないという意味ですか?

curlを使用してコマンドラインでURLを試しましたが、v3を強制して次のように機能させる必要がありました。

curl -3 -v https://secure53.onlineaccess1.com

そして、このエラーを修正する方法はありますか?

4

3 に答える 3

3

SSLv23_method()接続を開始するために使用していました。しかし、私の一番の推測は、サーバーがsslv2を理解していないことです。この方法以降will send out SSLv2 client hello messages and will indicate that it also understands SSLv3 and TLSv1、サーバーは私が何を望んでいるかを理解せず、で接続を閉じましたEOF

だから私はSSLv3_method()このサーバーに接続するために使用してみました、そしてそれはうまくいきました。だから私が今していることはと接続しようとすることであり、それがforとforSSLv23_method()で失敗した場合は、接続をリセットして、からやり直します。最善の方法ではありません、私は知っています。しかし、それは機能します。SSL_ERROR_SYSCALLSSL_get_error()0ERR_get_error()SSLv3_method()

于 2013-03-21T07:49:50.007 に答える
2

マニュアルページにあるように:

SSLv23_method(void), SSLv23_server_method(void), SSLv23_client_method(void)

A TLS/SSL connection established with these methods will understand the SSLv2, SSLv3, and TLSv1
protocol. 
A client will send out SSLv2 client hello messages and will indicate that it also understands     
SSLv3 and TLSv1. 
A server will understand SSLv2, SSLv3, and TLSv1 client hello messages. 
This is the best choice when compatibility is a concern.

したがって、使用しているopenSSLのバージョンに応じて、SSLv23_client_method()を使用すると、クライアントはサーバーと共通して見つけることができる最高のプロトコルレイヤーをネゴシエートしようとします。

サーバーがTLSv1.0以降をサポートしていない可能性があります。私は次のことを試みます:

SSL_CTX *sslCTX = SSL_CTX_new(SSLv23_client_method());
SSL_CTX_set_options(sslCTX, SSL_OP_ALL | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1);

SSLv3とのネゴシエーションを効果的に試み、SSLv2へのフォールバックの可能性がある

于 2014-06-16T16:34:45.477 に答える
1

また、ERR_get_error()は0を返すため、プロトコルに違反するEOFが観察されたことを意味します。

いいえ。その場合は相談する必要があると書かれていますret(私の強調):

SSL_ERROR_SYSCALL

I/Oエラーが発生しました。OpenSSLエラーキューには、エラーに関する詳細情報が含まれている場合があります。エラーキューが空の場合(つまり、ERR_get_error()が0を返す場合)、retを使用してエラーの詳細を調べることができます。ret == 0の場合、プロトコルに違反するEOFが観察されました。ret == -1の場合、基礎となるBIOはI / Oエラーを報告しました(UnixシステムのソケットI / Oについては、errnoで詳細を確認してください)。

retに渡されたSSL_get_error()ので、元の呼び出しretからの戻りコードも渡されました。SSL_connect()から戻り値<0を取得したと述べましたSSL_connect()。-1で、UNIXシステムを使用している場合は、errno何が起こったのかを調べるために相談する必要があります(私の強調)。

SSL_ERROR_SYSCALL

I/Oエラーが発生しました。OpenSSLエラーキューには、エラーに関する詳細情報が含まれている場合があります。エラーキューが空の場合(つまり、ERR_get_error()が0を返す場合)、retを使用してエラーの詳細を調べることができます。ret== 0の場合、プロトコルに違反するEOFが観察されました。ret == -1の場合、基礎となるBIOはI / Oエラーを報告しました(UnixシステムのソケットI / Oについては、errnoで詳細を参照してください)

于 2015-05-02T15:01:08.620 に答える