将 Lets Encrypt SSL 证书与 crossbar WAMP 路由器 (0.13) 结合使用

Using Lets Encrypt SSL certificates with crossbar WAMP router (0.13)

证书已从 Let's Encrypt 生成并安装到现有(工作中的)crossbar 服务器上,如下(和 the documentation suggests):

"endpoint": {
    "type": "tcp",
    "port": 8089,
    "tls": {
      "key": "../ssl/key.pem",
      "certificate": "../ssl/cert.pem"
    }
  },

当通过 Java 连接时(我相信如果在其他 API 中措辞不同,结果也会相似)结果是:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found

确定这可能是因为需要 Let's Encrypt's intermediate certificate 链接如下:

"endpoint": {
    "type": "tcp",
    "port": 8089,
    "tls": {
      "key": "../ssl/key.pem",
      "certificate": "../ssl/cert.pem",
      "ca_certificates": [
           "../ssl/intermediate.cert.pem"
       ],
    }
  },

不幸的是,这也不起作用,导致握手错误(我没有记下确切的措辞)。

深入研究我发现 this example 的文档,它明确引用了一个 lets encrypt 中间体,但密钥参数的名称不同:

"chain_certificates": [
     "lets-encrypt-x3-cross-signed.pem"
],

尝试这个导致了同样的问题(握手失败)

然后我尝试了以下方法:

  • 将证书文件与 Let's Encrypt 的中间文件连接起来
  • 仅使用证书和密钥参数恢复到初始配置

所以基本上是这样的:

  "tls": {
      "key": "../ssl/key.pem",
      "certificate": "../ssl/cert-plus-intermediate.pem"
    }

再次重新启动服务器后(每次更改 SSL 设置都需要重新启动)连接正确建立。另请注意,一旦你有了一个有效的配置,你应该确保密钥文件只能由系统上的受信任用户读取,理想情况下,只要哪个用户 crossbar 将 运行 as (chmod 600 key.pem)