thiết lập cookie https trong nodejs

Aug 23 2020

Tôi cũng đang cố gắng thiết lập hệ thống đăng nhập trên trang web của mình.

Nghe nói rằng cookie nodejs là một cách tốt để làm điều đó.

Trong các liên kết sau:
https://stackoverflow.com/a/21809393/322537
https://nodejs.org/dist/latest-v8.x/docs/api/https.html
Tôi đã tìm thấy một ví dụ về cách máy chủ https được tạo. Tôi hiểu rằng hàm createServer sẽ chạy mỗi khi khách hàng đưa ra yêu cầu.

Vì vậy, tôi có những thứ sau trong mã của mình:

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

Máy chủ dường như chạy tốt khi trang web đang hoạt động. Nhưng hàm response_to_client dường như không bao giờ chạy vì tệp nhật ký của nodejs không bao giờ chỉ ra chuỗi 'phản hồi với ứng dụng khách'.

Làm thế nào mà có thể được? Nó có thể liên quan đến việc tôi đang nâng cấp máy chủ https lên websocket ngay sau đó trong mã không?

cập nhật:
đây là tệp máy chủ:
https://openage.org/s.js
đây là mô-đun kết nối:
https://openage.org/c.js

và đây là chương trình trò chuyện mà họ đang phục vụ
https://openage.org/chat/14/?page=index

Kế hoạch là tạo cookie để xác định khách hàng và sau đó thiết lập hệ thống đăng nhập. Nhưng tôi bị mắc kẹt ở đây. /:

Trả lời

3 factorypolaris Aug 26 2020 at 17:27

Tôi đã sao chép các tập lệnh nút của bạn để thử nghiệm cục bộ. Đầu tiên, tôi thấy mọi thứ đang chạy trên http (so với https) và có thể nhận được phản hồi tốt. Tuy nhiên, khi chuyển sang https, máy chủ sẽ không bao giờ nhận được yêu cầu. Trước tiên, trình duyệt PHẢI thiết lập một kết nối an toàn trước khi yêu cầu thực sự được gửi đi.

Tôi đã gặp sự cố tương tự khi cố gắng chạy nhiều máy chủ (https và ws) trên cùng một cổng. Những gì bạn có là rất gần, tuy nhiên thiết lập của bạn cho https.createServer ({options}, trình xử lý), cần được điều chỉnh.

Ở đâu mà bạn có:

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

Bạn cũng cần thêm một tùy chọn cho "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);

Giá trị tôi đã sử dụng cho "ca" là nội dung của tệp: trung gian.crt nhận được từ cơ quan ký chứng chỉ.


QUAN TRỌNG

Mặc dù có thể làm được điều này bằng cách sử dụng chứng chỉ tự ký, nhưng tôi chưa bao giờ có thể làm như vậy vì không có cơ quan ký.


Vì vậy, giống như bạn đã làm cho các tệp chứng chỉ khác của mình, bạn cũng nên thực hiện việc này cho tệp trung gian.crt.

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

Tôi thấy điều này là khó khăn và kém tài liệu. Tôi không phải là chuyên gia về SSL / TSL, tuy nhiên, một tìm kiếm nhanh về chứng chỉ trung gian sẽ cho kết quả:

Chứng chỉ trung gian là chứng chỉ cấp dưới do gốc đáng tin cậy cấp đặc biệt để cấp chứng chỉ máy chủ thực thể cuối. Kết quả là một chuỗi chứng chỉ bắt đầu tại CA gốc đáng tin cậy, thông qua trung gian và kết thúc bằng chứng chỉ SSL được cấp cho bạn. Các chứng chỉ như vậy được gọi là chứng chỉ gốc chuỗi. Nguồn

Intermediate.crt sẽ có cấu trúc sau:

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

Đây là phản hồi trong trình duyệt.