Node.jsでhttp・httpsに両方対応/https統一の手順

Node.jsで次の場面に遭遇

  • SSL化を有効にして動かしたい
  • http・https両方に対応したい
  • http => httpsにリダイレクトしたい
  • つまりhttpsに統一したい

手順を知らないとやっぱり戸惑います。

何とか試行錯誤して正解を見つけたので、
Node.jsでのhttp ⇒ httpsの手順を解説します。

AWS環境でNode.jsをSSL化して動かしてた

ローカル環境でNode.jsをテスト開発、
そのあとクラウドなどの本番環境にデプロイ…

僕の場合はAWSを本番環境に選びました。

そしてSSL化まで成功します。

▼ このqiitaの記事がとても分かりやすかった

▼ 手順だけ箇条書きするとこんなの

  • 80番/443番ポートをAWS側で開放する
  • RSA秘密鍵を作成・パーミッション変更
  • 認証局に提出するCSRを作成
  • 証明書を作成・パーミッション変更
  • Node.jsでhttps接続できるよう改変

上記qiitaだと3000番ポートを解放すると書いてあります。ここではhttpは80番ポート・httpsは443番ポートを使うので解放したので、そこだけ違います。

あとはそこ以外は同じ手順です。

そしてNode.jsのコードも次のように改めました。

▼ index.jsの内容を一部抜粋

これでhttps接続することができました。

ブラウザで警告なども表示されません。OK

Chromeではhttpsのみ対応だと不都合なことが…

ここまでは良いけど、少し不都合が生じました。

それはhttps接続にしか対応してないこと

どうして不都合かというと次の事情があるからです。

  • Chromeブラウザの場合
    先頭にプロトコルを付けないで独自ドメイン(例 : hogehoge.com)だけでアクセスしたとする。その場合、httpプロトコルが暗黙で使われるからアクセスできない。
  • Chrome以外のブラウザの場合
    例えばFireFox・Edgetなどではプロトコルを省略するとhttps接続が暗黙的に選択される。プロトコルありなしでChromeと挙動が違う

その仕様は今後変わっていくかもしれません。

でも現時点ではhttp/httpsの両方に対応すると決めました。

http・https両方に接続できるコードに改善

普通にNode.jsを両方に対応させればいいだけです。

例を挙げるなら次のようなコードになります。

▼ 改良したindex.jsの一部抜粋

上記コードのこれだけです。

http・https両方は問題なく共存できます。

http ⇒ httpsにリダイレクト・統一する

そしてhttp ⇒ httpsにリダイレクトしました。

これもNode.jsコードをすこし改良するだけです。

▼ リダイレクトするようにindex.jsを改善

これでhttp・https関連では全てやりきった感じ

SSL化もできたし、httpsに統一も完了です!

ついでにNode.jsの関連記事

僕もNode.jsは分からないこと沢山です。
新しい発見とかがあれば記事にしてます。

だから役立ちそうな関連記事も紹介します。

▼ Node.jsのレスポンスでgzip圧縮有効化

▼ Node.jsでMySQLデータベース接続

▼ Node.jsで環境変数を.envから読込

https://pisuke-code.com/nodejs-how-to-setup-env-file/

手順さえ知ってれば開発がスムーズに進みます。

良ければご覧ください。

Node.jsでもhttps対応は必須事項

以上、Node.jsでhttp/https両方に対応・統一でした。

今まではhttps接続は任意という意識がありました。

でもこれからはhttps・SSL化はマストです。

▼ SSL化はもはや当たり前

数年前まではSSL証明書を使用したHTTPS通信の割合は50%程度でしたが、常時SSL化(パスワードや個人情報などの機微な情報の入力を求めるような場合に限定してHTTPS化していた従来とは異なり、無限定でHTTPS化する)の普及により、直近では90%近くまで上がっています。

引用元 : https://www.nttdata.com/jp/ja/data-insight/2021/0121/

今じゃ詐欺サイトですらSSL化してます。

そういう中でhttps対応してないことは、
作ったサービスが詐欺サイト以下になるってこと

マストなのでNode.jsでも対応必須ですね。