nodejsでhttpscookieを設定する

Aug 23 2020

私は自分のウェブサイトにログインシステムをセットアップしようとしています。

nodejsCookieがそれを行うための良い方法であると聞いた。

次のリンクで:
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');
    }

Webサイトが稼働しているため、サーバーは正常に動作しているように見えます。ただし、nodejsのログファイルが「応答したクライアント」文字列を示すことはないため、respond_to_client関数は実行されないように見えます。

どうしてそうなの?コードの直後にhttpsサーバーをWebSocketにアップグレードしていることと関係がありますか?

更新:
ここにサーバーファイルがあります:
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の専門家ではありませんが、中間証明書をすばやく検索すると次のようになります。

中間証明書は、特にエンドエンティティサーバー証明書を発行するために信頼されたルートによって発行される従属証明書です。その結果、信頼されたルートCAで始まり、中間を通り、発行されたSSL証明書で終わる証明書チェーンが作成されます。このような証明書は、連鎖ルート証明書と呼ばれます。ソース

middle.crtの構造は次のとおりです。

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

これがブラウザでの応答です。