1

我有一个与 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 用户,他们会收到一条警告提示,要求他们在设备上使用安全措施(pin、pattern 等)。

该连接在 Mac 用户上仍然有效,但在 Android 上无效。我相信这与为某个域颁发的证书有关,而与 NodeJS 服务器的连接是同一个域但具有不同的端口。

4

0 回答 0