BG Development


Страници: (2) 1 [2]   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> WebSocket over HTTPS SSL not working
bishkot
Публикувано на: 08-02-2021, 16:10
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 385
Регистриран на: 17.05.05



Искам клеинта да е браузъра да речем Chrome, да изпратя съобщение до nodejs сървъра като на машината където е nodejs сървъра съм разрешил съответния порт, пренасочил съм порта от рутера към съответната машина където е сървъра.

Тъй като IP-то ми се сменя от време на време, ту е реално ту не е използвам ddns.net като настройките са зададени в рутера.

До момента нещата работят през http но не и през https.

На domain1 където е client.html имам SSL сертификат и искам да осъществя връзката с https

Това мнение е било редактирано от bishkot на 08-02-2021, 16:10
PMEmail Poster
Top
thrawn
Публикувано на: 08-02-2021, 16:19
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3076
Регистриран на: 17.01.17



Демек, имаш два сървъра, които евентуално комуникират помежду си.
Няма никакъв проблем да реализираш подобна схема. Но трябва да имаш в предвид, че сертификатът на domain1 няма да можеш да го ползваш на ddns-а (домейните са различни, все пак).

Решението е да си вземеш сертификат и за ddns-а (например letsencrypt).

От тук имаш два варианта - конфигурираш директно node.js -а да използва ssl или ползваш прокси (например nginx) което да управлява ssl-a.
Втория вариант ми се струва по-удачен, така проксито се явява допълнителна защита. Но пък това си изисква и повече работа по вдигане на целия цирк.
PMEmail Poster
Top
bishkot
Публикувано на: 22-02-2021, 23:59
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 385
Регистриран на: 17.05.05



За да не отварям нова тема.... при мен websocket-a през https така и не тръгна.

Добавих cert и key от хостинга където е клиента.

В момента

client1.php
CODE

<script type="text/javascript">
      let socket = new WebSocket("ws://my.ip.address:8010");
      socket.onopen = function(e) {
      socket.send("this is my message");
      };

      socket.onmessage = function(event) {
      };

      socket.onclose = function(event) {
        if (event.wasClean) {
     //....
                    
        } else {
     //...
        }
      };
      socket.onerror = function(event) {
   //...
      };
</script>


nodejs server1
CODE

const WebSocket = require('ws');
const ws = new WebSocket.Server({ port: '8010' ,host:'0.0.0.0',origins:'*', });

ws.on('connection', function connection(ws,request,client) {

ws.on('message', function message(message) {
console.log('Message: '+message)
});
});

ws.on('error', err => {
        /* handle error */
      });
      ws.on('close', (data) => {
          console.log('WS closed' );
      
      });



работи през http

пробвах следното

nodejs server2
CODE

const fs = require('fs');
const https = require('https');
const WebSocket = require('ws');

const server = https.createServer({
cert: fs.readFileSync('1.pem'),
key: fs.readFileSync('1.pem'),

});
const wss = new WebSocket.Server({ server });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
  console.log('received: %s', message);
});

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

server.listen(8010);


така и не работи, пробвах с и без web server´xampp провах също и порт 433

Идеи?
PMEmail Poster
Top
bishkot
Публикувано на: 23-02-2021, 01:09
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 385
Регистриран на: 17.05.05



забравих да кажа че, ddns отпадна т.е. имам client.html на споделен хостинг и nodejs server-a e remote
PMEmail Poster
Top
thrawn
Публикувано на: 23-02-2021, 01:33
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3076
Регистриран на: 17.01.17



Няма как да вземеш сертификат за ип адрес (май....) та ще ти трябва име.

Можеш да ползваш субдомейн от споделени хост (и ако сертификатът там позволява - ако е wildcard, да ползваш и него). В противен случай ти трябва и втори сертификат.
PMEmail Poster
Top
bishkot
Публикувано на: 23-02-2021, 01:39
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 385
Регистриран на: 17.05.05



Ясно, значи трябва като цяло да регистрирам домейн който да се хоства от машината където е сървъра и там да въведа сертификата а не този на домейна където е клиента
PMEmail Poster
Top
thrawn
Публикувано на: 23-02-2021, 09:26
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3076
Регистриран на: 17.01.17



Само да съм сигурен, че си на ясно.
Не е необходимо да плащаш за НОВ домейн. Достатъчно е да ползваш суб домейн. Например, ако сайтът е на example.com то можеш да си разпишеш api.example.com или service.example.com и да си вземеш отделен сертификат за него (да речем, letsencrypt). В последствие, обръщението към съответната услуга трябва да става само с името за което е издаден сертификатът, ако желаеш да става по https.
PMEmail Poster
Top
bishkot
Публикувано на: 23-02-2021, 09:29
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 385
Регистриран на: 17.05.05



Благодаря
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) 1 [2]  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0