我有一个与PHP服务器并行运行的NodeJS服务器,以获取用户的实时通知。 Node服务器运行expressJS和socket.io。
要使用我做的证书创建我的服务器:
var express = require('express');
var app = express();
var config = require('./config');
var http = require('https');
var fs = require('fs');
var options = {
key: fs.readFileSync(config.key),
cert: fs.readFileSync(config.certificate),
requestCert: true
};
var server = http.createServer(options, app);
var io = require('socket.io').listen(server);
server.listen(config.port);
用户使用以下方式连接到服务器:
connectHTTPS: function() {
ChatBox.socket = io.connect(ChatBox.serverAddress, {
port: ChatBox.serverPort,
secure: true,
});
},
代码非常简单,除Mac用户和Android用户外,工作正常。 Mac用户的问题是,他们会被提示一个窗口,要求他们选择证书来验证自己。证书类似于“com.apple.idms.appleid.prd。(一些随机字符串)”。 对于Android用户,系统会提示他们警告他们在设备上使用安全设备(图钉,图案等)。
此连接仍适用于Mac用户,但不能在Android上运行。我相信这与为某个域发布的证书有关,而与NodeJS服务器的连接是相同的域但具有不同的端口。