我正在使用 NodeJS 的 eniaros/ws 模块,使用 Web 套接字在 iOS 应用程序和 NodeJS 服务器之间进行实时通信。
应用程序运行良好,但现在我必须使用 wss 来保护服务器和 iOS 应用程序之间的通信。我有我的 Rapid SSL 证书和密钥,并且我在服务器上使用以下代码:
var fs = require('fs');
var cfg = {
ssl: true,
port: 8081,
ssl_key: 'key.key',
ssl_cert: 'cert.crt'
};
var httpServ = ( cfg.ssl ) ? require('https') : require('http');
var app = null;
// dummy request processing
var processRequest = function( req, res ) {
res.writeHead(200);
res.end("All glory to WebSockets!\n");
};
if ( cfg.ssl ) {
app = httpServ.createServer({
// providing server with SSL key/cert
key: fs.readFileSync( cfg.ssl_key ),
cert: fs.readFileSync( cfg.ssl_cert )
}, processRequest ).listen( cfg.port );
} else {
app = httpServ.createServer( processRequest ).listen( cfg.port );
}
// passing or reference to web server so WS would knew port and SSL capabilities
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer( { server: app } );
代码几乎是 GitHub 上的 ws/examples/ssl.js 文件中给出的示例,但由于某种原因,NodeJS/ws 服务器不接受任何 wss 套接字连接。
我使用正确的路径 wss://REMOTE_SERVER_IP:8081/ 并且我正在使用 http://www.websocket.org/echo.html .
进行测试我进行了广泛的搜索,但似乎没有关于如何使用 eniaros/ws 设置安全 wss 的最新教程。
3个月后我重新审视这个问题并解决了问题。
代码正确。
我的错误是我尝试使用服务器的 IP (wss://xx.xx.xx.xx:8081) 连接客户端,而不是使用为其颁发证书和密钥的子域 (wss:/ /secure.subdoma.in:8081).