Веб-сокеты Nginx + SSL не работает (net :: ERR_CERT_COMMON_NAME_INVALID) - PullRequest
0 голосов
/ 03 июля 2018

У меня проблема с запуском сервера веб-сокетов в Nginx. Это мой Nginx default.conf:

upstream websocket {
    server xx.xx.xx.xx:8080;
}

server {
    listen 80;
    listen [::]:80;
    server_name domain.com *.domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;

    root /var/www/html;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name domain.com *.domain.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    location /ws {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
    }

}

Я получаю следующую ошибку в chrome :

(индекс): 2 Соединение WebSocket с 'wss: //xx.xx.xx.xx/ws: 8080' не удалось: ошибка при установлении соединения: net :: ERR_CERT_COMMON_NAME_INVALID

Я думаю, что это как-то связано с сертификатами (SSL), но я действительно не знаю, как это исправить!

Заранее спасибо!

Edit:

Мой файл index.php -

<script>
    var conn = new WebSocket('wss://xx.xx.xx.xx/ws');
    conn.onopen = function(e) {
    console.log("Connection established!");
};
</script>

Когда я меняю xx.xx.xx.xx на domain.com, я получаю код ошибки рукопожатия 504.

Кстати, я запускаю сервер веб-сокетов через php (php server.php) с храповым механизмом, следуя этому примеру: http://socketo.me/docs/hello-world

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

В вашем предоставленном коде нет упоминания о порте, но вы пытаетесь установить безопасное соединение веб-сокета напрямую из браузера с вашим сервером веб-сокета, который работает на порту 8080. Отсюда это сообщение:

(индекс): 2 Сбой подключения WebSocket к 'wss: //xx.xx.xx.xx/ws: 8080': Ошибка при установлении соединения: net :: ERR_CERT_COMMON_NAME_INVALID

Что вы должны сделать, это подключиться к Nginx, который прослушивает порт 443 и затем разрешает Nginx прокси-запрос. На вашей странице должен быть какой-то код, указывающий порт 8080.

Избавься от этого.

0 голосов
/ 03 июля 2018

Настройка SSL для восходящего потока - Nginx

Предпосылки

  1. NGINX Plus R6 и более поздних версий или последняя версия NGINX с открытым исходным кодом, скомпилированная с параметрами конфигурации --with-stream и with-stream_ssl_module
  2. Прокси-сервер TCP или вышестоящая группа TCP-серверов
  3. SSL-сертификаты и закрытый ключ

Пример конфигурации:

stream {
        upstream websocket {
             server backend1.example.com:8080;

    }

    server {
        listen                8080 ssl;
        proxy_pass            websocket;

        ssl_certificate       /etc/ssl/certs/server.crt;
        ssl_certificate_key   /etc/ssl/certs/server.key;
        ssl_protocols         SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers           HIGH:!aNULL:!MD5;
        ssl_session_cache     shared:SSL:20m;
        ssl_session_timeout   4h;
        ssl_handshake_timeout 30s;
    …
     }
}

Для получения более подробной информации перейдите по этой ссылке https://docs.nginx.com/nginx/admin-guide/security-controls/terminating-ssl-tcp/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...