まず、sslモジュールをinstall
$ sudo yum install mod_ssl
続いてkeyとcertを作成して読み込む
# 手順
## certificate file作成
openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt
## package.json
{ "name": "test-webrtc", "version": "0.0.1", "private": true, "dependencies": { "express": "4.x", "ejs": "3.0.1" } }
$ npm install
## server.js
var express = require('express'); var app = express(); var fs = require("fs"); var https = require("https"); var options = { key: fs.readFileSync('key.pem'), cert: fs.readFileSync('server.crt') } var server = https.createServer(options, app); console.log('server started'); app.get('/', function(req, res){ res.render('index.ejs'); }); server.listen(3000);
$ node server.js
# 駄目な方法
## certificate file作成
$ openssl genrsa > server.key
$ openssl req -new -key server.key > server.csr
$ openssl x509 -req -signkey server.key < server.csr > server.crt
var express = require('express'); var app = express(); var fs = require("fs"); var https = require("https"); var options = { key: fs.readFileSync('server.key'), cert: fs.readFileSync('server.crt') } var server = https.createServer(options, app); console.log('server started'); app.get('/', function(req, res){ res.writeHead(200); res.render('index.ejs'); }); server.listen(3000);
## server.js
keyがpemファイルでないので、エラーが出ます
$ node server.js
_tls_common.js:88
c.context.setCert(options.cert);
^
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Object.createSecureContext (_tls_common.js:88:17)
at Server (_tls_wrap.js:819:25)
at new Server (https.js:60:14)
at Object.createServer (https.js:82:10)
at Object.
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
vagrantでhttpsの環境を作ろうとした時、opensslとphpのビルトインサーバーでhttps環境を作っていましたが、フロントエンドだけならexpressで十分だということがわかりました。
expressはhttpのみかと勘違いしていたが、よくよく考えたら、できないわけない😂😂😂