nodejs expressでhttps通信を開発環境でできるようにするう
参考資料:
- 【とっても簡単】開発中のNode.js ExpressでのSSLのhttps設定 | アールエフェクト
- localhostで開発中にGoogle Chromeで「この接続はプライバシーが保護されません」が出たときの対処法【NET::ERR_CERT_INVALID】 - Qiita
djangoの開発環境でhttps通信させるのが面倒そうだったのでnodejsでhttps通信できる環境を調べたところ案外かんたんにできそうなのでこちらを試してみた。 これにはcognitoを使う場合https通信をしないと認証できないことを知った背景がある。。。
手順
1.開発準備
// projectディレクトリを作成する mkdir nodejs_https_sample cd nodejs_https_sample // package.json等作成 npm init // expressをインストール npm install express
2. http通信対応するスクリプトをとりあえず作る
// ファイル名:index.js const express = require('express') const app = express() const port = 3000 app.get('/', function(req, res){ res.send('Hello World!') } ) app.listen(port, () => console.log(`Listening on port ${port}!`))
この状態だとhttp://localhost:3000/にアクセスすればHello Worldが表示されるが、 https://localhost:3000/にアクセスすると表示できない。これをできるようにするには以下の手順を実行する。
3. httpsに対応させる
1.証明書を作成する
// プロジェクトルート以下にcertディレクトリを作成する mkdir cert cd cert
certディレクトリ以下に privatekey.pemとcert.pemを作成する。
openssl req -x509 -newkey rsa:2048 -keyout privatekey.pem -out cert.pem -nodes -days 365
このコマンドについてはこちらを参照するとよい。 https://reffect.co.jp/node-js/node-js-https#i
2.index.jsを修正する
// index.js // 以下のように書き換える const express = require('express') const app = express() const port = 3000 const fs = require('fs'); const option = { key: fs.readFileSync('./cert/privatekey.pem'), cert: fs.readFileSync('./cert/cert.pem'), } const server = require('https').createServer(option, app) app.get('/', (req, res) => res.send('Hello World!')) server.listen(port, () => console.log(`Listening on port ${port}!`))