Наш веб-сайт работает на внутренней тестовой машине, к которой могут получить доступ все компьютеры в сети.
Теперь мы хотим развернуть этот веб-сайт на веб-сервере (Apache2), чтобы сделать его доступным для нашего клиентов. Мы хотим использовать https, и именно здесь мы столкнулись с проблемой.
Клиент Socket.io не может подключиться к серверу node.js с момента переключения на https. Мы используем подписанный сертификат от доверенного центра сертификации. Я перепробовал каждое решение, которое смог найти, но ни одно из них не подходит для нашего случая.
Конструктор, используемый с ngx-socket-io в angular:
constructor() {
super({url: 'https://mywebPage.com:8080',options:{secure: true, origin: '*', transport:['websocket']}})
}
Наш сертификат действителен, поскольку он работает для нашей страницы angular. Мы также можем отправлять запросы HTTPS GET / POST к нашему API, который находится на том же сервере.
node.js код сервера socket.io:
var options = {
key: fs.readFileSync('/etc/apache2/folder/certificate.com.key'),
cert: fs.readFileSync('/etc/apache2/folder/certificate.com.public.crt'),
ca: fs.readFileSync('/etc/apache2/folder/certificate-intermediate.crt'),
requestCert: true
};
let server = require('https').createServer(options);
let io = require('socket.io')(server);
server.listen(8080);
console.log("Server started on Port 8080");
клиент пытается подключиться к сокету-серверу, но не удается и получает net::ERR_CONNECTION_CLOSED
, остальная часть веб-страницы загружается нормально и имеет действительный сертификат
Мы также проверили, доступен ли порт на веб-сервере, и он Кажется, что он открыт в netstat и nma.
Если потребуется какая-либо дополнительная информация, я рад предоставить.
РЕДАКТИРОВАТЬ: протестировал установку с rejectUnauthorized:false
на стороне клиента, но это не помогло не изменить ошибку. похожие вопросы переполнения стека, которые я рассмотрел при решении этой проблемы:
socket.io net :: ERR_CONNECTION_CLOSED
Настройка связи сервер-сервер SSL с использованием socket.io в node.js
EDIT 2: добавлено requestCert: false, rejectUnauthorized: false
в мои node.js опции. Теперь предыдущая ошибка была устранена:
error during WebSocket handshake: Unexpected response code: 400