nodejs'de https çerezi kurma

Aug 23 2020

Web sitemde de bir giriş sistemi kurmaya çalışıyorum.

Nodejs çerezlerinin bunu yapmanın iyi bir yolu olduğunu duydum.

Aşağıdaki bağlantılarda:
https://stackoverflow.com/a/21809393/322537
https://nodejs.org/dist/latest-v8.x/docs/api/https.html
Https sunucularının nasıl oluşturulduğuna dair bir örnek buldum. Benim anlayışıma göre, createServer işlevi, bir istemci her istekte bulunduğunda çalıştırılmalıdır.

Bu yüzden kodumda aşağıdakiler var:

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

Web sitesi hazır ve çalışır durumda olduğu için sunucu iyi çalışıyor gibi görünüyor. Ancak response_to_client işlevi hiçbir zaman node.js'nin günlük dosyası 'istemciye yanıt verdi' dizesini göstermediğinden çalışmıyor gibi görünüyor.

Bu nasıl olabildi? Kodda kısa bir süre sonra https sunucusunu bir web soketine yükseltmemle bir ilgisi olabilir mi?

güncelleme:
işte sunucu dosyası:
https://openage.org/s.js
işte bağlantı modülü:
https://openage.org/c.js

ve işte hizmet veren sohbet programı
https://openage.org/chat/14/?page=index

Plan, daha sonra müşterileri tanımlamak için çerezler yapmak ve ardından bir oturum açma sistemi kurmaktır. Ama ben buna sıkışıp kaldım. /:

Yanıtlar

3 factorypolaris Aug 26 2020 at 17:27

Yerel test için düğüm komut dosyalarınızı kopyaladım. İlk önce http (vs https) üzerinde çalışan şeyleri aldım ve gayet iyi yanıt alabildim. Bununla birlikte, https'ye geçildiğinde, istek sunucu tarafından asla alınmaz. Tarayıcının asıl istek gönderilmeden önce güvenli bir bağlantı kurması GEREKİR.

Aynı bağlantı noktasında birden çok sunucu (https ve ws) çalıştırmaya çalışırken benzer bir sorunla karşılaştım. Sahip olduklarınız çok yakın, ancak https.createServer ({options}, işleyici) için kurulumunuzun ayarlanması gerekiyor.

Sahip olduğun yer:

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

Ayrıca "ca" için bir seçenek eklemeniz gerekir:

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" için kullandığım değer dosyanın içeriğiydi: intermediate.crt, sertifika imzalama yetkilisinden alındı.


ÖNEMLİ

Kendinden imzalı bir sertifika kullanarak bunu çalıştırmak mümkün olsa da, imzalama yetkisi olmadığı için bunu asla yapamadım.


Yani diğer sertifika dosyalarınız için yaptığınız gibi, bunu intermediate.crt dosyası için de yapmalısınız.

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

Bunu zor buldum ve yeterince belgelenmemişti. SSL / TSL konusunda uzman değilim, ancak ara sertifikayla ilgili hızlı bir araştırma ortaya çıkıyor:

Ara sertifika, güvenilen kök tarafından özellikle son varlık sunucu sertifikalarını vermek için verilen bir alt sertifikadır. Sonuç, güvenilen kök CA'da ara aracılığıyla başlayan ve size verilen SSL sertifikasıyla biten bir sertifika zinciridir. Bu tür sertifikalara zincirleme kök sertifikalar denir. Kaynak

intermediate.crt aşağıdaki yapıya sahip olacaktır:

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

İşte tarayıcıdaki yanıt.