在本地開發環境(Mac)中安裝自簽名證書,啓用https

0. 前言

今天一大早上班Chrome瀏覽器提示已經自動升級(Version 63)須要重啓瀏覽器,重啓以後發現本地的開發環境打開不,緣由是新版的瀏覽器強制將http轉換成https了,而我本地的開發環境沒有啓用https。解決方案有兩種:html

  1. 將本地開發環境的域名(例如test.local)加入瀏覽的一個白名單,告訴瀏覽器該域名不須要強制啓用https.
  2. 在本地生成一個自簽名證書,並啓用https.

第一種方式比較簡單,在瀏覽器地址欄中輸入chrome://net-internals/#hsts。在Delete domain 欄的輸入框中輸入要http訪問的域名,而後點擊delete地按鈕,便可完成配置。而後你能夠在Query domain欄中搜索剛纔輸入的域名,點擊逗query地按鈕後若是提示逗Not found即爲成功。可是,我同事們用此方法都成功了,就我沒有成功,無奈。。。遂研究第二種解決方案。node

對於第二種解決方案,網上找了幾個中文教程,可是新版本的瀏覽器已經再也不適用。最後仍是在強大的Google的幫助下找到此篇英文博客。https://deliciousbrains.com/https-locally-without-browser-privacy-errors/ 有興趣的能夠閱讀原文,本文也並無逐字翻譯原文。教程也只適用於Mac系統,Windows系統尚未研究。nginx

本教程假設本地域名爲test.localgit

1. 生成自簽名證書

  • 建立生成證書所需的配置文件

建立生成證書所需的配置文件,文件內容以下:chrome

[ req ]

default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

[ subject ]

countryName                 = Country Name (2 letter code)
countryName_default         = US

stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = NY

localityName                = Locality Name (eg, city)
localityName_default        = New York

organizationName            = Organization Name (eg, company)
organizationName_default    = Example, LLC

commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_default          = Example Company

emailAddress                = Email Address
emailAddress_default        = test@example.com

[ x509_ext ]

subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer

basicConstraints       = CA:FALSE
keyUsage               = digitalSignature, keyEncipherment
subjectAltName         = @alternate_names
nsComment              = "OpenSSL Generated Certificate"

[ req_ext ]

subjectKeyIdentifier = hash

basicConstraints     = CA:FALSE
keyUsage             = digitalSignature, keyEncipherment
subjectAltName       = @alternate_names
nsComment            = "OpenSSL Generated Certificate"

[ alternate_names ]

DNS.1       = test.local

注意將文件的最後一行的改爲本身的域名DNS.1=test.local。將文件保存並命名爲test.local.conf瀏覽器

  • 生成證書,在命令行中運行:
openssl req -config test.local.conf -new -sha256 -newkey rsa:2048 -nodes -keyout test.local.key -x509 -days 365 -out test.local.crt

生成證書時,會有一系列問題須要填寫,其餘的問題均可以敲回車直接跳過,只將common name填寫成你的域名,例如:dom

Common Name (e.g. server FQDN or YOUR name) []:test.local

命令運行成功會在當前目錄下生成兩個文件:test.local.crt, test.local.key工具

2. Nginx配置

關鍵的Nginx配置以下,其餘部分省略:ui

server {
    listen 80;
    listen 443 ssl http2;
    server_name test.local;
    
    ssl on
    ssl_certificate     /etc/nginx/ssl/test.local.crt;
    ssl_certificate_key /etc/nginx/ssl/test.local.key;
    
    ...
}

3. 本機配置

重啓nginx後,打開Chrome瀏覽器輸入https://test.local,此時瀏覽器應該會提示Your connection is not private。打開瀏覽器調試工具,選擇security選項卡,顯示以下:
圖片描述spa

將紅框中的證書圖標拖到桌面,會在桌面生成一個以cer爲後綴的文件,雙擊文件,打開Keychain Access(須要輸入密碼)
圖片描述

以後會打開一個列表:
圖片描述

找到test.local的證書並雙擊,打開以下對話框:
圖片描述

點擊紅框中的下拉菜單,將其設置爲Always trust,而後關閉對話框(會再次要求輸入密碼確認)。完成以後,刷新瀏覽器頁面便可正常打開,而且顯示已經正常啓用https。

參考文章:

https://deliciousbrains.com/h...
https://zhidao.baidu.com/ques...
相關文章
相關標籤/搜索