概述
在前端開發(fā)領(lǐng)域某些特性下需要依賴HTTPS,例如:navigator.geolocation.getCurrentPosition / new Notification 等。
由于大多數(shù)開發(fā)環(huán)境中都只是HTTP協(xié)議下,所以會導(dǎo)致調(diào)試比較困難, 這個時候就需要給本地配置HTTPS了。
給本地配置SSL證書一般情況下都是自己 生成自簽名CA證書 , 這種方式最大的問題就是無法建立安全, 然而這樣并沒有什么卵用。
為了解決這個問題, 這里使用了 mkcert。
mkcert是一個簡單的零配置工具,可以使用您喜歡的任何名稱制作本地可信賴的SSL開發(fā)證書,是google某位工程師用Go開發(fā)出來的。
安裝mkcert
mac用戶
brew install mkcert brew install nss
windows用戶
前提先安裝 Chocolatey
choco install mkcert
安裝CA
mkcert自動在系統(tǒng)根存儲中創(chuàng)建并安裝本地CA
mkcert -install
生成證書
每個域名以空格進(jìn)行分割,下面3個本地域名基本是能夠滿足大部分場景的,除非使用IP
mkcert localhost 127.0.0.1 ::1
會在當(dāng)前目錄下生成2個文件,生成的證書有效期是10年,足夠用了,并且可以給本地所有端口使用,所以只生成一次即可。
配置HTTPS
有了證書之后就是配置的事情了,相當(dāng)簡單:
Nginx
server { listen 7777; server_name localhost; ssl on; root html; index index.html index.htm; # 把生成的證書路徑引入進(jìn)來即可 ssl_certificate ../localhost+2.pem; ssl_certificate_key ../localhost+2-key.pem; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root /www; index index.html index.htm; } }
node.js
Node不使用系統(tǒng)根存儲,因此它不會自動接受mkcert證書。必須設(shè)置 NODE_EXTRA_CA_CERTS 環(huán)境變量:
export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync('../localhost+2.pem'), cert: fs.readFileSync('../localhost+2-key.pem') }; https.createServer(options, (req, res) => { res.writeHead(200); res.end('hello worldn'); }).listen(8000);
最后
生成的證書只能用于本地測試,不要在線上使用。
目前幾乎所有的網(wǎng)站都開啟了SSL,為了使自己在開發(fā)中方便調(diào)試,建議本地配置上,只是2分鐘的事情。