menyiapkan cookie https di nodejs

Aug 23 2020

Saya mencoba juga menyiapkan sistem login di situs saya.

Mendengar bahwa cookie nodejs adalah cara yang baik untuk melakukannya.

Di tautan berikut:
https://stackoverflow.com/a/21809393/322537
https://nodejs.org/dist/latest-v8.x/docs/api/https.html
Saya telah menemukan contoh bagaimana server https dibuat. Menurut pemahaman saya, fungsi createServer harus dijalankan setiap kali klien membuat permintaan.

Jadi saya memiliki yang berikut di kode saya:

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

Server tampaknya berfungsi dengan baik saat situs web aktif dan berjalan. Tetapi fungsi respond_to_client tampaknya tidak pernah berjalan karena file log nodejs tidak pernah menunjukkan string 'menanggapi klien'.

Bagaimana bisa? Mungkinkah itu ada hubungannya dengan saya meningkatkan server https ke websocket tidak lama kemudian dalam kode?

update:
berikut adalah file servernya:
https://openage.org/s.js
berikut adalah modul koneksi:
https://openage.org/c.js

dan berikut adalah program obrolan yang disajikan
https://openage.org/chat/14/?page=index

Rencananya adalah membuat cookie untuk mengidentifikasi klien dan kemudian menyiapkan sistem login. Tapi saya terjebak dalam hal ini. /:

Jawaban

3 factorypolaris Aug 26 2020 at 17:27

Saya telah mereplikasi skrip node Anda untuk pengujian lokal. Saya pertama kali menjalankan semuanya di http (vs https), dan bisa mendapatkan respons dengan baik. Namun, setelah berpindah ke https, permintaan tersebut tidak pernah diterima oleh server. Browser HARUS terlebih dahulu membuat sambungan aman sebelum permintaan sebenarnya dikirim.

Saya mengalami masalah serupa ketika mencoba menjalankan beberapa server (https dan ws) di port yang sama. Apa yang Anda miliki sudah sangat dekat, namun penyiapan Anda untuk https.createServer ({options}, handler), memerlukan penyesuaian.

Dimana Anda memiliki:

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

Anda juga perlu menambahkan opsi untuk "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);

Nilai yang saya gunakan untuk "ca" telah menjadi konten file: intermediate.crt yang diterima dari otoritas penandatanganan sertifikat.


PENTING

Meskipun mungkin untuk membuat ini bekerja menggunakan sertifikat yang ditandatangani sendiri, saya tidak pernah bisa melakukannya karena tidak ada otoritas penandatanganan.


Jadi seperti yang telah Anda lakukan untuk file sertifikat lainnya, Anda juga harus melakukan ini untuk file intermediate.crt.

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

Menurut saya ini sulit dan tidak terdokumentasi dengan baik. Saya bukan ahli SSL / TSL, namun pencarian cepat pada sertifikat perantara muncul:

Sertifikat perantara adalah sertifikat subordinat yang dikeluarkan oleh akar tepercaya secara khusus untuk menerbitkan sertifikat server entitas akhir. Hasilnya adalah rantai sertifikat yang dimulai di root CA tepercaya, melalui perantara dan diakhiri dengan sertifikat SSL yang dikeluarkan untuk Anda. Sertifikat semacam itu disebut sertifikat akar berantai. Sumber

intermediate.crt akan memiliki struktur berikut:

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

Berikut adalah respon di browser.