over 1 year ago

最近存了一陣子的錢,決定來買個網域搭配憑證,佈建自己的HTTPS網站

購買網域與憑證

網域名和憑證我都是在GoDaddy台灣代理購買,網域名註冊了yuanchieh.com兩年只要350元,跟種花電信比起來便宜許多XD
另外憑證的部分比較貴,一年就要1500元,在購買憑證之前必須先有網域,並且將網域的聯絡人(whois)中的連絡信箱務必填寫可以收到的信箱,因為之後憑證會寄到信箱,最主要是確保憑證對應網域是相同的擁有人
生成憑證也蠻簡單,步驟參考Generate a CSR with OpenSSL,基本上就是用OpenSSL先生成domain.com.key

openssl genrsa -out ~/domain.com.ssl/domain.com.key 2048

這個Key要儲存好! 接著使用該Key生成CSR

openssl req -new -sha256 -key ~/domain.com.ssl/domain.com.key -out ~/domain.com.ssl/domain.com.csr

此時Terminal上會叫你開始填聯絡資料,要特別注意Common Name (e.g. server FQDN or YOUR name) []:這個欄位,這裡記得輸入你的網域名,例如我的是 yuanchieh.com,之後GoDaddy會自動將憑證對應該域名,並把下載連結寄到該域名的whois聯絡信箱中,務必要注意!
HTTPS加密原理與憑證原理可以參考我之前的網誌

使用NodeJS與Express佈建HTTPS

完成網域名認證後,到GoDaddy下載憑證,裡頭包含兩個檔案,一個是亂碼.crt,這一個是網站憑證,我將它改名為自己的domain name;令一個是gdig2_bundle.crtCA的憑證
在Nodejs中有原生支援HTTPS,跟HTTP只差在一個option而已

const express = require('express');
const app = express();
const fs = require('fs');

const ssl = {
    key: fs.readFileSync('./ssl/yuanchieh.com.key', 'utf8'),
    cert: fs.readFileSync('./ssl/yuanchieh.com.crt', 'utf8'),
    ca: [fs.readFileSync('./ssl/gdig2_bundle.crt', 'utf8')]
};

const server = require('https').createServer(ssl, app);
const io = require('socket.io')(server);

app.use(express.static(__dirname + '/bower_components'));
app.get('/', function (req, res, next) {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function (client) {
...
});

server.listen(4200, ()=> {
    "use strict";
    console.log('server start at 4200');
});
← WebRTC-介紹與實戰 AWS-IAM設定與ECS Repo使用 →
 
comments powered by Disqus