【问题标题】:SSL certificate Socket.ioSSL 证书 Socket.io
【发布时间】:2013-01-25 21:59:15
【问题描述】:

我创建了自己的 Livechat,它工作正常,但在我尝试添加我的 SSL 证书后,它就不能正常工作了。

我尝试了不同的代码。

var fs = require('fs');
var express = require("express");

var options = { 
    key:  fs.readFileSync('ca.key'), 
    cert: fs.readFileSync('ca.crt')
}; 

var expres = express()
  , app = require('https').createServer(options, expres)
  , io = require('socket.io').listen(app, { });

app.listen(8080);

var fs = require('fs');
var express = require("express");

var options = {
    key:    fs.readFileSync('ca.key'),
    cert:   fs.readFileSync('ca.csr'),
    ca:     fs.readFileSync('ca.crt'),
    requestCert:        true,
    rejectUnauthorized: false
};

var expres = express()
  , app = require('https').createServer(options, expres)
  , io = require('socket.io').listen(app, { });

 app.listen(8080);

这三个文件与内容一起存在。 (ca.key、c​​a.csr 和 ca.crt)

有时我得到一个 107 (ERR_SSL_PROTOCOL_ERROR) 或者有时服务器甚至没有启动。

谢谢,

【问题讨论】:

  • 你在 'app = require('https').createServer(options, expres)' 中有错字,它应该是 express 而不是 express
  • 我不认为这是问题所在?无论如何,谢谢。
  • 您是在尝试验证来自连接客户端的密钥(这是第二个示例将执行的操作),还是仅尝试通过 SSL 托管应用程序本身? ca.* 文件的名称似乎表明您正在做前者......
  • 我正在尝试与此“服务器”建立 SSL 连接,客户端将连接到 https://[url]。
  • 只是想知道 - 客户端如何连接?你有 {secure: true} 选项吗?

标签: javascript node.js ssl socket.io


【解决方案1】:

如果您检查 https 服务器 API http://nodejs.org/api/https.html#https_class_https_server。你会发现它是 tls.Server 的子类

Class: https.Server
This class is a subclass of tls.Server and emits events same as http.Server.

在检查 tls.server API http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener 时,您会看到 tls 或 https 服务器需要什么:

key: A string or Buffer containing the private key of the server in PEM format. (Required)
cert: A string or Buffer containing the certificate key of the server in PEM format. (Required)

由于您仅将以上两个用作一个示例。您应该使用所需的 PEM 格式对其进行验证/测试。您可以使用此处提供的说明创建它http://nodejs.org/api/tls.html#tls_tls_ssl

openssl genrsa -out ryans-key.pem 1024
openssl req -new -key ryans-key.pem -out ryans-csr.pem
openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem

在此之后您可以检查其他选项是否是罪魁祸首,在使用上述证书进行测试时将其删除。

//requestCert:        true,  
//rejectUnauthorized: false

【讨论】:

  • 此生成 SSL 证书的说明使用 openssl。你会推荐这种生产方式吗?如果没有,那我们应该从大佬那里购买什么样的证书(去爸爸,急流等)?据我所知,如果您从证书颁发机构购买 SSL,则不会导出 KEY。
  • @AdrianSalazar 这仅供个人使用。您可能希望在生产中查看 TLS 而不是 SSL。请参阅luxsci.com/blog/ssl-versus-tls-whats-the-difference.html 了解它们的比较方式。你真的应该在serverfault.com 中问这个问题,因为他们可以更好地回答,并告诉他们之间有什么区别,哪一个最适合你。
  • 因此,考虑到我的网站是公开的,因此不使用普遍支持的 SSL 并使用您的链接说它被全球不到 1% 的浏览器接受的 tls,似乎是错误的决定
  • @AdrianSalazar 它在哪里说的。除此之外,这篇文章写于 2008 年。现在 TLS 是 SSL 的继任者。所有主流浏览器都支持 TLS。
猜你喜欢
  • 2017-03-14
  • 2015-09-26
  • 2018-08-23
  • 2013-02-28
  • 2017-06-13
  • 2019-03-29
  • 2014-01-05
  • 2012-04-13
相关资源
最近更新 更多