前言
SSL數(shù)字簽名實(shí)現(xiàn)網(wǎng)站的HTTPS化事示,可以使網(wǎng)站可信早像,防劫持、防篡改肖爵、防竊聽(tīng)卢鹦,是未來(lái)網(wǎng)站安全的發(fā)展趨勢(shì)。
今天,我將以個(gè)人的名義申請(qǐng)SSL數(shù)字證書(shū)冀自,并部署在node.js服務(wù)器上揉稚。
1.在阿里云申請(qǐng)免費(fèi)的個(gè)人SSL數(shù)字證書(shū)
阿里云的數(shù)字證書(shū)服務(wù)地址: https://www.aliyun.com/product/cas?spm=5176.8142029.388261.120.BiDYTi
注意到這里有多種類(lèi)型的證書(shū),個(gè)人網(wǎng)站的證書(shū)只要用DV即可(阿里云是免費(fèi)的)熬粗。
- 域名驗(yàn)證型SSL(Domain Validation SSL)搀玖,不顯示任何信息,是最基礎(chǔ)級(jí)的SSL證書(shū)驻呐」嘧纾可10分鐘快速頒發(fā),能起到加密傳輸?shù)淖饔煤珶o(wú)法向用戶(hù)證明網(wǎng)站的真實(shí)身份猜拾。目前市面上的免費(fèi)證書(shū)都是這個(gè)類(lèi)型的,只是提供了對(duì)數(shù)據(jù)的加密佣盒,但是對(duì)提供證書(shū)的個(gè)人和機(jī)構(gòu)的身份不做驗(yàn)證挎袜。
- 機(jī)構(gòu)驗(yàn)證型SSL(Organization Validation SSL),提供加密功能,對(duì)申請(qǐng)者做嚴(yán)格的身份審核驗(yàn)證,提供可信身份證明肥惭。適合電子商務(wù)盯仪、電子政務(wù)網(wǎng)站、企事業(yè)單位管理系統(tǒng)蜜葱、電子郵件系統(tǒng)使用全景,證書(shū)里顯示單位名稱(chēng)。
- 擴(kuò)展驗(yàn)證型SSL(Extended Validation SSL)牵囤,超安=EV=最安全蚪燕、最嚴(yán)格 超安EV SSL證書(shū)遵循全球統(tǒng)一的嚴(yán)格身份驗(yàn)證標(biāo)準(zhǔn),是目前業(yè)界安全級(jí)別最高的頂級(jí) (Class 4級(jí))SSL證書(shū)奔浅。適合銀行金融類(lèi)電子商務(wù)網(wǎng)站(網(wǎng)上購(gòu)物)使用馆纳,證書(shū)里顯示單位名稱(chēng),顯示綠色地址欄汹桦。
2.驗(yàn)證身份并增加域名解析
進(jìn)入后臺(tái)(證書(shū)服務(wù))鲁驶,根據(jù)提交你的資料。
如果你的域名是在阿里云的外網(wǎng)管理的舞骆,可勾選并自動(dòng)寫(xiě)入一個(gè)記錄钥弯;如果不是,那么不是督禽,則在提交驗(yàn)證資料后脆霎,按照提示進(jìn)入域名控制臺(tái)增加一個(gè)記錄。
3.下載證書(shū)
在身份驗(yàn)證通過(guò)并設(shè)置好解析后狈惫,在證書(shū)控制臺(tái)就可以看到這樣的內(nèi)容:
點(diǎn)擊“下載”:
發(fā)現(xiàn)并沒(méi)有node.js的類(lèi)型睛蛛。這個(gè)無(wú)所謂,選擇“其他”,直接下載證書(shū)即可忆肾。這樣下載的證書(shū)是最完整的荸频。
我們?cè)趎ode.js服務(wù)中,需要用到2個(gè)文件:
// 私鑰
xxxxx.key
// 證書(shū)
xxxxx.pem
4.啟用https服務(wù)
首先客冈, https服務(wù)需要監(jiān)聽(tīng) 443
端口旭从,所以在開(kāi)啟服務(wù)之前,先檢查 443
端口是否被占用场仲。如果已被占用和悦,需要關(guān)閉占用的服務(wù)。
我們先搭建一個(gè)Express框架的node.js服務(wù)器(如果不知道如何搭建渠缕,請(qǐng)閱讀 Node.js框架之Express)摹闽。
首先,我們?cè)诟夸浵聞?chuàng)建一個(gè)文件夾 cert
褐健,用于存放私鑰和證書(shū)。把下載到的兩個(gè)文件(私鑰xxxxx.key
和 證書(shū)xxxxx.pem
)放入此文件夾澜汤,分別將私鑰xxxxx.key
重命名為 private.key
和 證書(shū)xxxxx.pem
重命名為 file.crt
蚜迅。
在 bin/www
文件中,在監(jiān)聽(tīng)默認(rèn)端口后面增加下面代碼:
// ...
// server.listen(port);
// server.on('error', onError);
// server.on('listening', onListening);
// https
var https = require('https');
var fs = require('fs');
var privateKey = fs.readFileSync('./cert/private.key', 'utf8'),
certificate = fs.readFileSync('./cert/file.crt', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var httpsServer = https.createServer(credentials, app);
var SSLPort = 443;
httpsServer.listen(SSLPort, function() {
console.log('OneLib https is running', SSLPort);
});
// ...
然后在瀏覽器中輸入 https://
和 你的網(wǎng)站域名進(jìn)行訪(fǎng)問(wèn)俊抵;也可在本地進(jìn)行調(diào)試:
https://127.0.0.1
不過(guò)在本地調(diào)試谁不,一定會(huì)提示你證書(shū)風(fēng)險(xiǎn)或證書(shū)錯(cuò)誤的,因?yàn)槟闵暾?qǐng)到的證書(shū)在用于申請(qǐng)的域名的徽诲。
參考資料: