有時開發用或是自己防火牆內要用 HTTPS,就會需要用到自己簽 SSL 的部分
通常我會在機器上的位置例如 /etc/certs/awesome.domain
來做,一組憑證就一個資料夾這樣。
首先,先建立 ssl.conf
,這裡注意如果是開發網站用的尤其像是 chrome 會擋掉就算是本機信任的憑證,只要沒有寫 [alt_names]
DNS 的都不會理你。
假設我要開發的網站名稱是 awesome.domain.tw
好了,可以照以下的寫法。
[req]
prompt = no
default_md = sha256
default_bits = 2048
distinguished_name = dn
x509_extensions = v3_req
[dn]
C = TW
ST = Taiwan
L = Taipei
O = Duotify Inc.
OU = IT Department
emailAddress = admin@example.com
CN = awesome.domain.tw
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = awesome.domain.tw
DNS.2 = *.domain.tw
透過 OpenSSL 執行指令簽名,3650 是一次簽十年
openssl req -x509 -new -nodes -sha256 -utf8 -days 3650 -newkey rsa:2048 -keyout server.key -out server.crt -config ssl.conf
接下來我們會看到生成了兩支檔案,分別為公鑰和私鑰。
nginx 設定 https 可以如下
server {
listen 80 awesome.domain.tw;
# 將所有HTTP requests轉至HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl awesome.domain.tw;
server_name awesome.domain.tw;
ssl_certificate /etc/certs/awesome.domain/server.crt;
ssl_certificate_key /etc/certs/awesome.domain/server.key;
# 其他ssl參數設定
...
}
重啟 nginx 之前,可以用指令 nginx -t
去測試目前的檔案有沒有噴錯或無法讀取的狀況,如果遇到憑證無法讀取,請把 /etc/certs/awesome.domain
下的兩支檔案設定 chmod 744
應該就可以通過了。
接下來可以把公鑰匯出,放到自己電腦的 key chain,設定為永久信任,以下是步驟
MAC -> 搜尋框輸入「key chain」-> 左邊鑰匙圈選「系統」-> 把剛剛的 server.crt
丟進去並雙擊打開,將信任展開後設定為永久信任
或是指令版
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain server.crt
之後將 host 放到自己電腦中的 /etc/hosts
下,例如
10.10.10.1 awesome.domain.tw
打開瀏覽器進行訪問 https://awesome.domain.tw
應該就可以看到已經設置好的安全憑證。