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