【问题标题】:socket.io `net::ERR_INSECURE_RESPONSE` on custom domain connection -- works with Openshift url自定义域连接上的 socket.io `net::ERR_INSECURE_RESPONSE` -- 适用于 Openshift url
【发布时间】:2014-08-22 17:13:12
【问题描述】:

如果我将客户端连接到:

https://prod-myapp.rhcloud.com:8443

我得到了一个有效的 socket.io 连接。

但是,如果我更改为我的自定义域:

https://www.myapp.me:8443

我收到 net::ERR_INSECURE_RESPONSE 错误。

我的客户端连接代码如下,host是上述网址之一:

var socket = io.connect(host, { query: 'currentUser=' + currentUserId,
                                                      secure: true });

如何让我的自定义域正常工作?


编辑

好吧,这正式让我发疯了。正如@developercorey 建议的那样,我使用 Openshift CSR 创建了一个新的 SSL 证书。

当我通过我的自定义域 - https://www.myapp.me 访问我的网站时 - 我在 Chrome 中获得了一个绿色锁,当我点击它时,它显示为 www.myapp.me - Identity Verified

这是我在 Chrome 中单击挂锁并转到 certificate information 时看到的内容:

但是,如果我转到 https://www.myapp.me:8443/socket.io/,我会得到:

   This is probably not the site you are looking for!
   You attempted to reach www.myapp.me, but instead you 
   actually reached a server identifying itself as *.rhcloud.com.

所以我的SSL Cert 似乎工作正常,但与 socket.io 的连接不起作用。


第二次编辑

因此,如果我 openssl 我的自定义域,我将获得证书,然后:

    subject=/serialNumber=LnhzJHxcX0bIdlH2ITnDgaewey8ce5g3/C=US/ST=North Carolina/L=Raleigh/O=Red Hat Inc/OU=RHC Cloud Opoerations/CN=*.rhcloud.com
issuer=/C=US/O=GeoTrust, Inc./CN=GeoTrust SSL CA
---
No client certificate CA names sent
---
SSL handshake has read 2468 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: FB3AD94948150496CD7269AED4A426EE2C2F4604653D129BBC93702B89CEA52E
    Session-ID-ctx: 
    Master-Key: 97EA9B89E9B2FA9342F83E5FF10A18008B8D462334822D2C83F203C44D90D13B37C9F91C503B45CB90684B5156796138

    Key-Arg   : None
    Start Time: 1408758948
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

我唯一能看到的是 - No client certificate CA names sent - 这是问题所在吗?

【问题讨论】:

  • 你能解决这个问题吗?

标签: ssl socket.io openshift


【解决方案1】:

您是否为您的域安装了自定义 SSL 证书?如果不是,则 app-domain.rhcloud.com ssl 证书对您的自定义域无效(就像您在 Web 浏览器中访问它一样,您会收到警告)

【讨论】:

  • 我让它使用我的自定义域在 Heroku 上工作,现在正在迁移到 Openshift,因为 Heroku 不能很好地处理 websocket,所以我假设我自己域上的 SSL 证书仍然有效,因为我刚刚更改了我的 DNS 上的 CNAME。
  • 好的,所以我需要使用来自新主机 Openshift 的 CSR 创建一个新的 SSL。感谢您为我指明正确的方向。
  • 实际上,在从 Openshift 生成带有 CSR 的新 SSL 证书后,仍然从 socket.io 收到相同的错误,net::ERR_INSECURE_RESPONSE
  • 它是自签名的吗?如果是这样,您可能仍然会收到该错误,因为信任链不真实。
  • 不,它是由 Openshift 签名的……见我上面的编辑。当我打开自定义域本身时,证书显示受信任。但是,问题出在 socket.io 连接上。这就是被拒绝为不安全的原因。
【解决方案2】:

您的 DNS 已损坏:

$ openssl s_client -connect www.myapp.me:8443 -debug
gethostbyname failure
connect:errno=0

事实上,我没有收到任何 DNS 服务器(权威或非权威)的响应:

$ dig www.myapp.me a

; <<>> DiG 9.8.5-P1 <<>> www.myapp.me a
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 45813
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.myapp.me.          IN  A

;; Query time: 3177 msec
;; SERVER: 172.16.1.10#53(172.16.1.10)
;; WHEN: Fri Aug 22 21:10:47 EDT 2014
;; MSG SIZE  rcvd: 30

修复 DNS,它应该可以工作。这是假设你的服务器有一个有效的证书并且它在端口 8443 上监听。

【讨论】:

  • 嘿,很抱歉造成混乱。我用myapp代替了真实姓名。但是,我刚刚尝试了 openssl 并将结果粘贴到上面的编辑中。
猜你喜欢
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2014-08-21
  • 2021-10-02
相关资源
最近更新 更多