我们已经设置了一个安全套接字服务器,它在使用SecureServer保护之前一直在运行。运行php脚本成功,但在尝试从应用程序连接时,浏览器会抛出SSL_ERROR_NO_CYPHER_OVERLAP错误。
我们的php脚本可能有问题。有人知道如何解决这个问题吗?
我们的代码:
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Ratchet\Wamp\WampServer(
$pusher
)
)
),
new React\Socket\SecureServer(
$webSock,
$loop,
array(
'local_cert' => 'xxx',
'allow_self_signed' => true,
'verify_peer' => false,
// Not sure what to put in ciphers ??
'ciphers' => 'EECDH+AES:EDH+AES:-SHA1:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5:!RC4:!MEDIUM'
)
)
);
有些文章建议摆弄浏览器配置,但连接应该对所有访问者都可用..(没有摆弄)
编辑:我们在错误的地方使用了SecureServer,并在更正的代码中添加了答案。
答案 0 :(得分:1)
当服务器使用的cipher suites列表没有与客户端或浏览器使用的条目相同的条目时,可能会发生此错误。我会查看您的'ciphers'
行,确保您正确列出套件,并确保在现代浏览器中使用modern suites。
密码套件的OpenSSL文档有full list个可用套件,proper format用于指定它们。特别是,我发现更容易明确地列出套件,而不是当前的符号,这使得很容易意外地排除所有或大多数套件。您也可以只指定一个系列,例如列表中的TLSv1.2
。
答案 1 :(得分:1)
使用React \ Socket \ SecureServer和Ratchet:
// Set up secure React server
$webSock = new React\Socket\SecureServer(
new React\Socket\Server($loop),
$loop,
array(
'local_cert' => 'xxxx/combined.pem',
//'allow_self_signed' => true,
'verify_peer' => false
)
);
$webSock->listen(8080, '0.0.0.0'); // Binding to 0.0.0.0 means remotes can connect (127.0.0.1 || 0.0.0.0)
// Ratchet magic
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Ratchet\Wamp\WampServer(
$pusher
)
)
),
$webSock
);