10

stream_socket_server()を使用してソケット サーバーを作成しようとしています。

通常の接続は正常に機能しますが、証明書なしで接続を暗号化するサーバーを作成したいと考えています。これは ADH 暗号で達成できることを知っています。はい、理論的には証明書よりも安全性が低いことを知っています...

最初にこのサーバーを作成する理由は、クライアントが接続する別のサーバーをモックすることです (このプロトコルを介して、疑問に思っている場合)。

クライアントは、最初に証明書を要求し、ADH にフォールバックするように構成されています。実物でテストしたところ、問題なく接続されたので、問題はソケット サーバーにあります。

これまでに試したことはすべて、「ハンドシェイクの失敗」エラーが発生しました。

私が試した構成のいくつか:

<?php
$server = stream_socket_server(
        "tls://127.0.0.1:6667",
        $errorno,
        $errstr,
        STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,
        stream_context_create(
            array('ssl' => array('ciphers' => 'ADH'))
        )
    );
?>

<?php
$server = stream_socket_server(
        "tls://127.0.0.1:6667",
        $errorno,
        $errstr,
        STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,
        stream_context_create(
            array('ssl' => array('ciphers' => '-COMPLEMENTOFALL ADH'))
        )
    );
?>

また、テストのために、(上記の 2 番目の例のように) 無条件に ADH を使用するようにクライアントを調整しようとしましたが、それも失敗しました。

これは、私が試したすべての PHP バージョンで発生し、最新のものは 5.5.0 です。

何か案は?

4

2 に答える 2

5

Wireshark のようなツールを使用して、ワイヤ上を流れるビットを調べ、ハンドシェイクの何が問題なのかを正確に判断できるようにします。その能力がなければ、盲目的に飛行 (またはデバッグ) することになります。

握手で何がうまくいかないのかがわかれば、「理由」を理解できます。

于 2013-08-20T16:00:30.570 に答える
1

まず、サーバーで SSL が正しく設定されていることを確認しますか? サービスでSSL スキャナーを実行します。OpenSSL 呼び出しはキー ファイルなしでは実行されないため、まったく機能しないテスト スクリプトがあります。これは答えではありませんが、さらに調査する時間がありません...

ADH が弱い暗号化であることを認識していますか? ~ ほとんどのセキュリティ アドバイザリは、オフにすることを推奨しています。ADH http://wiki.openssl.org/index.php/Manual:Ciphers(1)に関する一般的な読み物

于 2013-08-31T05:38:21.310 に答える