ustawienie pliku cookie https w nodejs

Aug 23 2020

Próbuję też skonfigurować system logowania w mojej witrynie.

Słyszałem, że ciasteczka nodejs to dobry sposób na zrobienie tego.

W poniższych linkach:
https://stackoverflow.com/a/21809393/322537
https://nodejs.org/dist/latest-v8.x/docs/api/https.html
Znalazłem przykład, jak powstają serwery https. Rozumiem, że funkcja createServer powinna być uruchamiana za każdym razem, gdy klient wysyła żądanie.

Mam więc w moim kodzie:

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');
    }

Wydaje się, że serwer działa poprawnie, ponieważ witryna internetowa jest uruchomiona. Ale wydaje się, że funkcja respond_to_client nigdy nie działa, ponieważ plik dziennika nodejs nigdy nie wskazuje ciągu „odpowiedział klientowi”.

Jak to możliwe? Czy może to mieć coś wspólnego z tym, że wkrótce w kodzie uaktualniam serwer https do gniazda sieciowego?

aktualizacja:
oto plik serwera:
https://openage.org/s.js
tutaj jest moduł łączący:
https://openage.org/c.js

a oto program do czatu, który obsługują
https://openage.org/chat/14/?page=index

Plan jest taki, aby następnie utworzyć pliki cookie w celu identyfikacji klientów, a następnie skonfigurować system logowania. Ale utknąłem w tym. /:

Odpowiedzi

3 factorypolaris Aug 26 2020 at 17:27

Zreplikowałem skrypty twojego węzła do testów lokalnych. Najpierw uruchomiłem rzeczy na http (w porównaniu z https) i udało mi się uzyskać dobrą odpowiedź. Jednak po przejściu na https żądanie nigdy nie jest odbierane przez serwer. Przeglądarka MUSI najpierw nawiązać bezpieczne połączenie przed wysłaniem rzeczywistego żądania.

Napotkałem podobny problem, próbując uruchomić wiele serwerów (https i ws) na tym samym porcie. To, co masz, jest bardzo blisko, jednak twoja konfiguracja dla https.createServer ({opcje}, handler) wymaga dostosowania.

Gdzie masz:

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

Musisz też dodać opcję „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);

Wartością, której użyłem dla "ca", była zawartość pliku: inner.crt otrzymanego od urzędu podpisującego certyfikat.


WAŻNY

Chociaż możliwe jest, aby to działało, używając certyfikatu z podpisem własnym, nigdy nie byłem w stanie tego zrobić, ponieważ nie ma organu podpisującego.


Tak więc, tak jak zrobiłeś to z innymi plikami certyfikatów, powinieneś to również zrobić dla pliku middle.crt.

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

Uważam, że jest to trudne i słabo udokumentowane. Nie jestem ekspertem od SSL / TSL, jednak pojawia się szybkie wyszukiwanie certyfikatu pośredniego:

Certyfikat pośredni to certyfikat podrzędny wydany przez zaufany katalog główny specjalnie w celu wystawiania certyfikatów serwera jednostki końcowej. Rezultatem jest łańcuch certyfikatów, który zaczyna się w zaufanym głównym urzędzie certyfikacji, poprzez pośrednik, a kończy na wydanym tobie certyfikacie SSL. Takie certyfikaty są nazywane łańcuchowymi certyfikatami głównymi. Źródło

middle.crt będzie miał następującą strukturę:

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

Oto odpowiedź w przeglądarce.