httpサーバで構築しているNode.jsアプリケーションをhttpsに切り替える際の手順です。
ハマりやすいポイントも解説していきます。
httpsサーバ構築手順
httpsサーバ構築するための手順は概ね以下の段階を踏む必要があります。
1. 独自ドメインを取得
2. サーバ証明書を作成
3. Node.jsアプリケーションの機動部分(Express.jsであればapp.js)をhttps接続になるように修正
独自ドメインは有料ですがそこまで高くありません。また、サーバ証明書もオープンソースで無料で取得できます。
大きなコストはかかりませんので、気軽に試してみてください。
1. 独自ドメインを取得
お名前.com等で独自ドメインを取得します。サーバ証明書を発行する際に必要ですので事前に取得しておきます。
自分で運用するだけであれば「.com」の部分は好きに選んで問題ありません。私は今回は「.xyz」にしました。
ただ、初年度1円とかでも2年目3000円とかのドメインもあるので、購入する前に2年契約等を選択して値段は確認しておきましょう。
独自ドメイン取得後はドメイン側のネームサーバ設定、VPS側のネームサーバ設定が必要です。
さくらのVPSの場合の独自ドメイン設定は公式サイトの手順を確認してください。
なお、ドメイン側に登録するネームサーバーはさくらのVPSのネームサーバを登録します。
2. サーバ証明書を作成
Let’s Encryptでサーバ証明書を取得すると無料で作成できます。
Getting Startedを参考にcertbotを使用します。
certbot公式サイトでSoftware:None of the above、System:CentOS/RHEL 7を選択すると手順が確認できます。
certbotをインストール
$ sudo yum install certbot
webサーバを止めた後にcertonly –standaloneコマンドで証明書を発行します。
$ sudo certbot certonly --standalone -d xxxxxxxx.xyz -d www.xxxxxxxx.xyz
rootのcronジョブにcertbot renew
sudo crontab -e 15 04 * * * certbot renew
CentOS7の場合、以下のディレクトリに証明書が保存されています。
/etc/letsencrypt/live/xxxxxxxx.xyz
ここではfirewalld設定、権限がハマりそうなので別記事で解説します。
(Express.js)HTTPSサーバ構築時にエラーが出た際の原因確認方法 – Node.jsで暗号資産アービトラージ
また、Let’s Encryptは90日以内に証明書更新が必要です。確認手順は以下記事にまとめています。
【90日間以内に更新要】Let’s Encryptの証明書の有効期限を確認する – Node.jsで暗号資産アービトラージ
3. Node.jsアプリケーションを修正
bin/wwwファイルを修正します。
Node.jsのcreateServerコマンドはNode.jsのAPIドキュメント参照
const http = require('http'); const https = require('https') option = { key: fs.readFileSync('/etc/letsencrypt/live/xxxxxxxx.xyz/privkey.pem'), cert: fs.readFileSync('/etc/letsencrypt/live/xxxxxxxx.xyz/cert.pem'), ca: fs.readFileSync('/etc/letsencrypt/live/xxxxxxxx.xyz/chain.pem') } const httpsServer = https.createServer(option, app); httpsServer.listen('4000');
httpサーバがポート3000、httpsサーバがポート4000で起動している状態です。
公式サイトにはchain.pemのところはありませんので注意してください。記載がないとブラウザでNo responseエラーが発生します。
key, cert, caは参照されているのでそのまま記載してください。pkeyとかにしてしまうとエラー(ERR_SSL_VERSION_OR_CIPHER_MISMATCH)になります。
エラーの確認方法は別記事で解説します。
ここまでの設定でブラウザからhttps接続できることが確認できます。
自作アプリケーション初心者にはさくらVPSが手軽でおすすめです。
コメントを残す