настройка https cookie в nodejs

Aug 23 2020

Я тоже пытаюсь настроить систему входа на свой сайт.

Слышал, что файлы cookie nodejs - хороший способ сделать это.

По следующим ссылкам:
https://stackoverflow.com/a/21809393/322537
https://nodejs.org/dist/latest-v8.x/docs/api/https.html
Я нашел пример того, как создаются https-серверы. Насколько я понимаю, функция createServer должна запускаться каждый раз, когда клиент делает запрос.

Итак, в моем коде есть следующее:

var server_https=modules.https.createServer({
    key: this.ssl_key,
    cert:this.ssl_cert
    },this.respond_to_client).listen(this.port);


mconnection.prototype.respond_to_client=function(request,response){
    console.log('responded to client');
    }

Похоже, что сервер работает нормально, так как веб-сайт работает. Но respond_to_client функция появляется никогда не запускать файл журнала nodejs никогда не бывает не указывает на то, «ответил на клиента» строку.

Как такое могло быть? Может ли это иметь какое-то отношение к тому, что я обновляю https-сервер до веб-сокета вскоре после этого в коде?

обновление:
вот файл сервера:
https://openage.org/s.js
вот модуль подключения:
https://openage.org/c.js

а вот программа чата, которую обслуживают
https://openage.org/chat/14/?page=index

Затем планируется создать файлы cookie для идентификации клиентов, а затем настроить систему входа в систему. Но я застрял в этом. /:

Ответы

3 factorypolaris Aug 26 2020 at 17:27

Я скопировал сценарии вашего узла для локального тестирования. Сначала я запустил что-то на http (vs https) и смог получить ответ нормально. Однако при переходе на https запрос никогда не принимается сервером. Браузер ДОЛЖЕН сначала установить безопасное соединение перед отправкой фактического запроса.

Я столкнулся с аналогичной проблемой при попытке запустить несколько серверов (https и ws) на одном порту. То, что у вас есть, очень близко, однако ваши настройки для https.createServer ({options}, handler) требуют корректировки.

Где у вас есть:

var server_https= https.createServer({
        key: this.ssl_key,
        cert:this.ssl_cert
},respond_to_client).listen(this.port);

Вам также необходимо добавить опцию для «ca»:

var server_https= https.createServer({
        key: this.ssl_key,
        cert: this.ssl_cert,
        ca: this.ssl_ca,  // also add this
},respond_to_client).listen(this.port);

Значение, которое я использовал для «ca», было содержимым файла: intermediate.crt, полученного от центра подписи сертификатов.


ВАЖНЫЙ

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


Так же, как вы сделали для других файлов сертификатов, вы должны сделать это и для файла intermediate.crt.

//Where you read your other cert files: add another.
this.ssl_ca = modules.fs.readFileSync(this.ssl_ca_pathfile);

Я обнаружил, что это сложно и плохо документировано. Я не эксперт по SSL / TSL, но быстрый поиск промежуточного сертификата появляется:

Промежуточный сертификат - это подчиненный сертификат, выпущенный доверенным корнем специально для выдачи сертификатов сервера конечного объекта. В результате получается цепочка сертификатов, которая начинается в доверенном корневом ЦС, через промежуточный и заканчивается выданным вам сертификатом SSL. Такие сертификаты называются связанными корневыми сертификатами. Источник

Intermediate.crt будет иметь следующую структуру:

-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----

Вот ответ в браузере.