Подтвердить что ты не робот

Защищенные websockets с самозаверяющим сертификатом

Я хочу использовать защищенные веб-узлы для повышения эффективности. Мне не нужно шифрование.

Как я могу видеть предупреждение при использовании безопасных Websockets (wss://example.com) с самозаверяющим сертификатом? Я попробовал его с Chrome 10, и я не вижу предупреждения, и он не просит меня принять сертификат. Он просто работает.

Является ли это ошибкой в ​​хроме или ожидаемом поведении? Смогу ли я использовать самозаверяющие сертификаты в будущем?

Спасибо

4b9b3361

Ответ 1

Да, что текущее поведение Chrome, но я бы не ожидал, что он будет оставаться политикой в ​​будущем. В firefox 4 (если вы включите WebSockets в about: config), вы получите предупреждение о сертификате. Чтобы утвердить сертификат, вам также может потребоваться ввести URL-адрес WebSockets в браузере (замените wss на https) и сначала подтвердите его там (поскольку предупреждение из подключения WebSockets о самозаверяющем сертификате может не дать вам возможности одобрить его).

Я бы ожидал, что все браузеры сходятся на правильном поведении, которое должно вызвать диалоговое окно с предупреждением, позволяющее утвердить самозаверяющий сертификат.

Ответ 2

Самоподписанные сертификаты отклоняются Chrome с версии v19 (http://crbug.com/53836). Если вы попытаетесь подключиться к URL-адресу wss, который использует самозаверяющий сертификат, запрос тихо будет отменен.
Чтобы разрешить использование самозаверяющих сертификатов, запустите Chrome с флагом --ignore-certificate-errors, e, g:

chromium --user-data-dir=/tmp/whatever --ignore-certificate-errors

Насколько я знаю, нет способа заставить Firefox принять ваш самозаверяющий сертификат для wss. Поэтому просто используйте ws:// для тестирования в Firefox. Если вы тестируете свое веб-приложение по https, вам нужно переключить предпочтение, чтобы разрешать подключения (небезопасные) ws:// URL-адреса:

  • Посетите about:config
  • Установите network.websocket.allowInsecureFromHTTPS в true

Ответ 3

Я получил его, выполнив следующие действия:

https://github.com/einaros/ws/blob/master/test/WebSocketServer.test.js#L514

Сначала создайте свои самоподписанные сертификаты:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 100 -nodes

Затем создайте свой httpsServer из экспресс-приложения с помощью node встроенного https-сервера:

var privateKey  = fs.readFileSync('sslcert/key.pem', 'utf8');
var certificate = fs.readFileSync('sslcert/cert.pem', 'utf8');

var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();

//... bunch of other express stuff here ...

//pass in your express app and credentials to create an https server
var httpsServer = https.createServer(credentials, app);
httpsServer.listen(8443);

Затем настройте сервер websocket (по иронии судьбы, он будет использовать тот же порт, что и http-сервер, я этого не знал, но я думаю, что протоколы могут обмениваться портами - это застало меня на некоторое время).

var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({
    server: httpsServer
  });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.send('something');
});

Теперь перейдите на https://0.0.0.0:8443 сервер и примите самозаверяющий сертификат в Chrome. Затем веб-порты теперь должны работать в браузере.

Откройте консоль chrome devtools и введите:

var ws = new WebSocket('wss://0.0.0.0:8443');
ws.send('foo');

.... или любой другой хост: порт, который вы использовали для httpsServer, здесь вы используете протокол wss://

На вашем веб-сервере node вы увидите сообщение, зарегистрированное на консоли. Запустите сервер с помощью node ./server.js

http://www.chovy.com/web-development/self-signed-certs-with-secure-websockets-in-node-js/

Ответ 4

Когда вы используете wscat, вы можете использовать флаг -n (-n, - -n o-check: не проверять наличие неавторизованных сертификатов)

wscat -c "wss://30.90.212.255:8000" -n