見出し画像

Expressで作ったNode.jsアプリでhttpsを有効にするには?

シグナル・コンポーズ株式会社の大和です。

今月9月から11月に渡って「岐阜クリエーション工房2020」にて委託事業として、ワークショップ「“新しい日常”から生まれる DanceDrivenMusic〜音楽を見つけるためのワークショップ〜」を行っています。おかげさまでオンラインでの難しい開催ではありますが参加者も集まり若い学生の皆さんと先日一回目を楽しく終えることが出来ました。

で、そこでは弊社の森田、大石のディレクションの元で、大久保雅基さんとNode.js, Express, Socket.io, Teachable machineといった内容でワークショップ用のウェブアプリケーションを組んでいます。このワークショップではウェブカメラをブラウザから使う必要があるのですが、ブラウザからカメラを使う場合httpsで接続をしないとカメラが有効になりません。オレオレ証明書でも良いかな、と思ってやってみましたが、

・今はそれも手順が増える
・参加者への負担が増える(設定など)
・今となっては https://letsencrypt.org などを使えばきちんとした証明書を発行することも楽になっている(3ヶ月毎の更新が必要になりますが)

ということで、普通にドメインをとって証明書を発行しようと思います。ドメインはexample.com とし、実際のアプリケーションはapp.example.com として考えてみます。

サブドメインまでを一つの証明書にしても良かったのですが、appがつかない方のexample.comなどはアーカイブページとして別にGithub Pages などでプロジェクトのページを作る可能性があるので、今回の証明書はapp.example.com で取っています。手順としては以下のような感じになります。

1. Expressでhttps, httpが有効になったアプリケーションを作る
2. CertBotで証明書を作る
3. その過程でACMEチャレンジを1. のhttpが有効になったディレクトリで行い証明書の発行を行う
4. 証明書の保存先へのアクセス権限を変更する
5. Expressでhttpsの証明書の設定をする

です。一つひとつやり方を書いていくととても長くなるのと自分も他の方のページを参考にしながら進めたのでそこを下記におきます。

まず、1. 4. 5. に関しては以下のページを参考にしました。

こちらのページでの以下の部分

http / https 両方でのアクセスに対応するには以下のように改良します:

のところのソースを参考にするとまずhttp / https両方でのアクセスができるようになります。後からhttpsだけにリダイレクトする方法も書いてあるので、必要に合わせてhttp側の処理は考えれば良いでしょう。

【HTTP 通信をしない(HTTPS へ転送)】
最後に、上記プログラムを更に改良して HTTP 通信をしない(強制的に HTTPS 通信に転送する)ための設定を加えます。それには Strict-Transport-Security ヘッダを付けてレスポンスを返すことで実現できます:

そして2. 3. の部分については、こちらを参考にしました。

brewではいるcertbotの現在のバージョンは、、

➜  ~ certbot --version
certbot 1.8.0

このようになりますが、特に上記と違いはありません。で、今回はドメイン全体ではなくサブドメインの範囲の証明書が欲しかったのでドメインを入力するところではapp.example.comとしています。

という感じでライトな記事になりましたが、お役に立てれば幸いです。シグナル・コンポーズ株式会社では、音楽・アート/デザイン/プログラミングといった幅広いお仕事をお受けしています。弊社のパートナーサイトも最近できましたので、こちらから弊社及びパートナーのお仕事も見ていただくことが出来ます。

どうぞお気軽にお問い合わせください!!

この記事が気に入ったらサポートをしてみませんか?