使用ADH的PHP套接字服务器.怎样


PHP socket server that uses ADH. How?

我正在尝试使用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'))
        )
    );
?>

我还尝试过调整客户端以无条件使用ADH(就像上面的第二个例子一样),只是为了测试,但这也失败了。

我尝试过的每一个PHP版本都会出现这种情况,最新版本是5.5.0。

有什么想法吗?

我会使用像Wireshark这样的工具来检查通过电线的比特,这样我就可以准确地确定握手出了什么问题。如果没有这种能力,你将是盲目的飞行(或调试)。

一旦你知道握手出了什么问题,你就可以找出"原因"。

首先检查SSL是否在服务器中正确设置?在服务上运行SSL扫描程序。我有一个测试脚本根本不起作用,因为OpenSSL调用在没有密钥文件的情况下无法运行。这不是一个答案,但我没有时间进行更多的调查。。。

你知道ADH是一种弱加密吗?~大多数安全建议都建议关闭它。ADH的一般阅读http://wiki.openssl.org/index.php/Manual:Ciphers(1)