使用最新版本的Crossbar(0.13,从apt-get
Ubuntu 14.04 安装)我无法使用 SSL 和中间证书建立连接。
ca_certificates
如果我在密钥中没有属性的情况下设置服务器,tls
则服务器运行良好,并且可以通过wss
协议使用 Google Chrome 建立连接。但是尝试使用thruway建立连接失败并出现以下错误:
无法连接:无法完成 SSL/TLS 握手:stream_socket_enable_crypto():SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:14094410:SSL 例程:ssl3_read_bytes:sslv3 警报握手失败
与Thruway团队交谈似乎是证书问题 - 在我们的实时站点上,我们使用来自 Gandi 的中间和交叉签名证书,这是某些浏览器所需的,因此是一些 open-ssl 实现所必需的。
似乎虽然浏览器很乐意只使用密钥和证书建立 TLS 连接,但 Thruway 需要一个链。然而,以下使用 Gandi 提供的两个证书的配置不适用于Chrome或Thruway。Chrome 显示错误:
失败:WebSocket 打开握手被取消
使用.crossbar/config.json
下面的文件时。那么,这是我的配置、我的证书还是 Open-SSL 堆栈的其他部分的问题?
(下面的文件已被更改,以删除任何潜在的敏感信息,因此可能看起来由于其他原因无法正常工作。如果连接正常,则底层身份验证和其他组件工作正常,因此请保留有关 TLS 实施的答案/评论。注释不是有效的 JSON,但包含在内,因此读者可以看到正在使用的证书文件)
{
"version": 2,
"controller": {},
"workers": [
{
"type": "router",
"realms": [
{
"name": "test",
"roles": [
{
"name": "web",
"authorizer": "test.utils.permissions",
"disclose": {
"caller": true,
"publisher": true
}
},
{
"name": "no",
"permissions": []
}
]
}
],
"transports": [
{
"type": "websocket",
"endpoint": {
"type": "tcp",
"port": 9001,
"interface": "127.0.0.1"
},
"auth": {
"wampcra": {
"type": "static",
"users": {
"authenticator": {
"secret": "authenticator-REDACTED",
"role": "authenticator"
}
}
}
}
},
{
"type": "web",
"endpoint": {
"type": "tcp",
"port": 8089,
"tls": {
"key": "../ssl/key.pem",
"certificate": "../ssl/cert.pem",
"ca_certificates": [
"../ssl/gandi.pem", // https://www.gandi.net/static/CAs/GandiProSSLCA2.pem
"../ssl/gandi-cross-signed.pem" // https://wiki.gandi.net/en/ssl/intermediate#comodo_cross-signed_certificate
],
"dhparam": "../ssl/dhparam.pem"
}
},
"paths": {
"/": {
"type": "static",
"directory": "../web"
},
"ws": {
"type": "websocket",
"url": "wss://OUR-DOMAIN.com:8089/ws",
"auth": {
"wampcra": {
"type": "dynamic",
"authenticator": "test.utils.authenticate"
}
}
}
}
}
]
},
{
"type": "guest",
"executable": "/usr/bin/env",
"arguments": [
"php",
"../test.php",
"ws://127.0.0.1:9001",
"test",
"authenticator",
"authenticator-REDACTED"
]
}
]
}
还有其他问题可以解决与此类似的问题@