0

openSSLの例を実行しようとしています(ソースはここからダウンロードされます)。私はそれを構築し、ポート4433で「wserver」の例を実行することができました(VirtualBoxを使用してUbuntu 12.10仮想マシンで実行)

次に、Windows 8からクライアントを起動しようとしましたがSSL accept error、サーバーの端末で番組が表示され続けます。

この投稿を見て、受け入れられた回答からbashスクリプトをコピーし、それを使用して、新しいroot.pemおよびその他の証明書を作成できましたが、それでも同じエラーが発生します

(重要かどうかはわかりませんが、VMが何らかの理由で443にバインドできなかったため、ポート4433を使用しています。はい、クライアントでも変更しました)

また、サーバーはCで記述されています。

何か案は?ありがとう!

編集

この行でエラーが発生していることがわかりました

r=SSL_accept(ssl);

を使用してrに返されたエラーを確認しました

SSL_get_error(ssl,r);

そしてそれはSSL_ERROR_SYSCALL

確認したところ 意味ERR_get_error();が返ってきた0

ret == 0の場合、プロトコルに違反するEOFが観察されました

それが何を意味するのかまだわかりません。

編集2

クライアントのリターンコードを確認しました12045 が、MSDNによるとエラーです。

ERROR_INTERNET_INVALID_CA

12045

この関数は、サーバーの証明書を生成した認証局に精通していません。

ただし、仮想マシンから提供されたクライアントを使用する場合、接続は正常であり、証明書の問題はありません

ここ12045でMicrosoftによって示されているようにオーバーライドすると、エラーが発生します。12038

ERROR_INTERNET_SEC_CERT_CN_INVALID

           SSL certificate common name (host name field) is incorrect.
           For example, if you entered www.server.com and the common
           name on the certificate says www.different.com.

これは役に立ちますか?再度、感謝します!

4

2 に答える 2

1

エラーコードがSSL_ERROR_SYSCALLであり、rがゼロであったため、クライアントは基になるTCP接続を適切に閉じました(close()またはを呼び出すことによってshutdown())。

クライアントコードから、TCP接続が閉じられる原因を確認する必要があります。

編集:質問のedit2によると:

証明書にはいくつかの問題があります。

証明書チェーンの問題を回避するために、テスト中に自己署名証明書を使用することをお勧めします。すべてが正常に機能したら、より複雑な証明書の使用を開始します。

を取得するためERROR_INTERNET_SEC_CERT_CN_INVALID、証明書に間違ったcommon nane(CN)が含まれている可能性があります。Subject:証明書のフィールドを確認してください。件名にありCN=xxxxxます。xxxxxは、ホストのIP/ホスト名と同じである必要があります。

または、クライアントコードから一般名チェックを削除することもできます。例からおそらく次のコードがあります。

if(require_server_auth)
  check_cert(ssl,host);

コメントアウトまたは設定しrequire_server_auth=0ます。そして、もう一度やり直してください。

于 2012-12-13T09:43:08.793 に答える
0

これは、SSLハンドシェイクのAcceptフェーズ中にエラーが発生したことを意味している可能性があります。

また、openSSLには詳細なオプションがあると思います。-v私は思います。

デバッグに役立つパケットスニファ(Wireshark、Ethereal)を使用していますか?

于 2012-12-13T08:54:08.487 に答える