Socket.io + SSL +自签名CA证书在连接时出错

Gol*_*den 6 ssl node.js socket.io

我正在使用使用自签名CA证书创建的证书运行https服务器.

现在我想将Socket.io客户端连接到连接到https服务器的Socket.io服务器.不幸的是,我收到一个错误,告诉我:

Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE
    at SecurePair.<anonymous> (tls.js:1271:32)
    at SecurePair.EventEmitter.emit (events.js:92:17)
    at SecurePair.maybeInitFinished (tls.js:883:10)
    at CleartextStream.read [as _read] (tls.js:421:15)
    at CleartextStream.Readable.read (_stream_readable.js:293:10)
    at EncryptedStream.write [as _write] (tls.js:330:25)
    at doWrite (_stream_writable.js:211:10)
    at writeOrBuffer (_stream_writable.js:201:5)
    at EncryptedStream.Writable.write (_stream_writable.js:172:11)
    at write (_stream_readable.js:547:24)
    at flow (_stream_readable.js:556:7)
Run Code Online (Sandbox Code Playgroud)

基本上,此错误告诉我无法成功验证证书.这是因为相应的CA证书是自签名的.使用https请求时,我可以指定我信任的CA.

在这种情况下如何进行Socket.io连接?

PS:我正在运行Node.js 0.10.0和Socket.io 0.9.13.

DKe*_*ler 9

四年后,但对于这个职位和我一样,如果你需要强制客户端套接字不拒绝自签名证书的服务器,你需要的任何发现 rejectUnauthorized: false const socket = require('socket.io-client')('https://192.168.0.31', { transports: ['websocket'], rejectUnauthorized: false }) https://github.com/socketio/engine.io-client#methods

现在还有一个很好的免费证书来源,所以现在你甚至不必"廉价d*ck" https://letsencrypt.org/


zem*_*rco -17

\n

不要\xe2\x80\x99t 使用自签名证书\xef\xac\x81cates。只是 don\xe2\x80\x99t,某些浏览器在使用 WebSocket 时无法让您接受它们。而且你因为没有购买合适的证书而看起来像个廉价的混蛋。

\n
\n\n

他们看到我花粉,他们讨厌(第23页)。Socket.IO 核心团队成员 Arnout Kazemier (3rdEden) 的演讲。

\n

  • 那么这如何解决开发/暂存案例呢?我是否应该为我的所有临时服务器、Vagrant VM 和生产服务器购买证书? (13认同)
  • Node.js 0.10 已配置为自动拒绝自签名的 SSL 证书。您可以通过添加以下 ENV 变量来“撤消”此操作以进行开发:`NODE_TLS_REJECT_UNAUTHORIZED=0` 另外,是的,我对 SSL 的看法很狭隘;)但正如您可能经历过的那样,自签名证书会导致很多问题可以通过适当的证书来防止这种情况。至于开发/登台,购买通配符 ssl 证书或编辑您的“/etc/hosts”?;) (8认同)
  • 在某些情况下,使用自签名证书可能非常重要。您甚至不需要从浏览器访问 socket.io。如果您想进行自动化测试,则不应使用真正的生产站点密钥,任何人都应该能够运行测试。 (3认同)
  • @hg——完全正确!说“只是不要使用自签名证书”似乎非常狭隘。我的用例是 Swift &lt;-&gt; nodejs+socket.io。有人知道过去两年这个话题是否发生了变化? (2认同)