nginx 自簽憑證:為 localhost 與 IP 建立
這個工具會把你本機網站使用的名稱,變成可直接用在開發伺服器的憑證與私密金鑰。所有步驟都在瀏覽器中完成,不會上傳或儲存任何資料。最後你可以把 server.crt 和 server.key 打包成一個 ZIP 下載。
為 localhost、網域與 IP 建立自簽憑證
你輸入的每個名稱都會進入 Subject Alternative Name(SAN)清單,這正是現代瀏覽器會檢查的部分。你不需要另外設定或貼上任何東西。
金鑰組由瀏覽器的 WebCrypto 建立,憑證也是直接在這個頁面上組成並簽署。
建立自簽憑證的步驟
- 檢查網域與 IP 位址欄位。一開始是
localhost, 127.0.0.1,請換成或補上你用的名稱,例如localhost, 127.0.0.1, 192.168.1.5。 - 需要的話,開啟設定,調整有效天數或 RSA 金鑰長度。
- 按下產生憑證。短暫顯示正在產生你的憑證…之後,會出現你的憑證已完成。
- 按下下載 ZIP。
local-ssl-certificate.zip內含 server.crt(憑證)與 server.key(私密金鑰)。 - 參考在你的電腦上信任它,把 server.crt 加入電腦的信任存放區,再用這兩個檔案設定你的伺服器。
- 想更改名稱或設定時,按下變更名稱或設定,再重新產生一次。
網域與 IP 欄位要輸入什麼
請用逗號、空格或換行分隔每個項目。每個項目都會自動歸類為 DNS 名稱或 IP 位址:
- 像
localhost或dev.example.test這樣的主機名稱 - 像
*.example.test這樣的萬用字元(只對應一層子網域) - 像
192.168.1.5的 IPv4 與像::1的 IPv6,有沒有方括號都可以 - 含重音符號或非拉丁字母的名稱(會自動轉成 punycode,也就是 xn-- 的形式)
一張憑證最多可涵蓋 50 個名稱。請只輸入主機名稱或位址:含有 https:// 這類通訊協定或連接埠號碼的項目會被拒絕,錯誤訊息也會列出究竟是哪些項目無效。你在瀏覽器網址列輸入的名稱,必須是憑證中的其中一個名稱,否則瀏覽器仍會顯示警告。
設定:有效期限與金鑰長度
有效天數可填 1 到 397 天,預設是 365 天。超出範圍的數字會被調整成最接近的上限或下限。憑證從你產生的那一刻起生效,結果中的有效期限會顯示結束日期。到期後,請重新產生一張。
RSA 金鑰長度預設為 2048 位元,速度快,而且到處都能用。如果想要更長的金鑰,可選 4096 位元,建立時可能要幾秒鐘。
結果會顯示涵蓋(所有名稱)、有效期限、金鑰與 SHA-256 指紋。憑證是 X.509 第 3 版的自簽憑證,以自己的金鑰用 SHA-256 搭配 RSA 簽署。通用名稱(common name)是你輸入的第一個項目,但瀏覽器讀取的是 SAN 清單。序號是隨機產生的。
在 Windows、macOS、Linux 信任憑證
在加入信任存放區之前,瀏覽器會對自簽憑證顯示警告。請解壓縮 ZIP,在該資料夾開啟終端機,執行適合你系統的指令。每個指令也會以方便複製的形式顯示在在你的電腦上信任它底下。
- macOS:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain server.crt - Windows(以系統管理員身分執行 PowerShell):
Import-Certificate -FilePath .\server.crt -CertStoreLocation Cert:\LocalMachine\Root - Debian 與 Ubuntu:
sudo cp server.crt /usr/local/share/ca-certificates/server.crt,接著執行sudo update-ca-certificates - Fedora 與 RHEL:
sudo cp server.crt /etc/pki/ca-trust/source/anchors/,接著執行sudo update-ca-trust
Firefox 有自己的清單,Linux 上的 Chrome 也是。請在那裡的「設定」「憑證」「授權單位」中匯入 server.crt。部分開發工具也有自己的清單,請在它們的設定中指定 server.crt。信任完成後,請重新啟動瀏覽器。
在 nginx 與 Apache 使用憑證
把網頁伺服器的憑證設定指向 server.crt,私密金鑰設定指向 server.key,然後重新啟動伺服器。在 nginx 中是 ssl_certificate 和 ssl_certificate_key,在 Apache 中是 SSLCertificateFile 和 SSLCertificateKeyFile。接著用憑證裡的任一個名稱,前面加上 https:// 開啟你的網站。
請妥善保管 server.key:任何拿到它的人都能冒充你的本機網站。不要把它提交到公開的程式碼儲存庫。這個工具僅供本機開發使用,請勿把自簽憑證用在公開網站上。
常見問題
localhost 的自簽憑證要怎麼建立?
保留「網域與 IP 位址」欄位裡原本的 localhost, 127.0.0.1,按下「產生憑證」,再按「下載 ZIP」。你會得到 server.crt 和 server.key。讓本機網頁伺服器使用這兩個檔案,並把 server.crt 加入電腦的信任存放區,瀏覽器就不會再顯示警告。
可以為 IP 位址建立憑證嗎?
可以。在「網域與 IP 位址」欄位輸入位址,例如 192.168.1.5。IPv4 與 IPv6 都行,[::1] 這種有方括號的寫法也可以。每個 IP 都會以 IP 位址項目寫進憑證,瀏覽器開啟 https://192.168.1.5 時檢查的就是這一項。請只輸入位址,不要加 https:// 或連接埠。
SAN 要怎麼設定?
你輸入的每個名稱都會自動成為 Subject Alternative Name:網域是 DNS 名稱,IP 位址是 IP 位址項目,不需要設定或貼上任何東西。結果裡的「涵蓋」會列出所有放進去的名稱。通用名稱會設為你輸入的第一個項目,但瀏覽器讀取的是 SAN。
可以建立萬用字元憑證嗎?
可以。輸入像 *.example.test 這樣的萬用字元,就會以 DNS 名稱加入。萬用字元只對應一層:*.example.test 適用於 app.example.test,但不適用於 example.test 本身,也不適用於 a.b.example.test。需要的話,請另外輸入 example.test。
建立憑證需要 OpenSSL 嗎?
不需要。金鑰組由瀏覽器內建的 WebCrypto 建立,憑證則在頁面上組成並簽署,所以不必執行任何指令,也不用安裝任何軟體。只有在你之後想把檔案轉成其他格式時,才會用到 OpenSSL。
在 Windows 與 Mac 上要怎麼信任憑證?
在 Windows 上,以系統管理員身分開啟 PowerShell,進入解壓縮檔案的資料夾,執行 Import-Certificate -FilePath .\server.crt -CertStoreLocation Cert:\LocalMachine\Root。這會把憑證複製到 Chrome 與 Edge 讀取的受信任根憑證授權單位存放區。在 Mac 上,進入有 server.crt 的資料夾,執行 sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain server.crt。
在 Ubuntu 與 Firefox 上要怎麼信任憑證?
在 Debian 與 Ubuntu 上,把 server.crt 複製到 /usr/local/share/ca-certificates/,再執行 sudo update-ca-certificates。curl 這類命令列工具之後就會接受它。Firefox 不使用系統的信任存放區,請在它的設定中開啟「憑證」的「授權單位」分頁,匯入 server.crt,並勾選信任網站的選項。
可以取得 PFX 檔、CSR 或 Let's Encrypt 憑證嗎?
不行。這個工具只會建立一張 PEM 格式的自簽憑證,也就是 server.crt 和 server.key。它不會產生憑證簽署要求(CSR)、由憑證授權單位簽署的憑證或公開憑證,也不會另外建立根 CA。如果你需要 PFX,可以用 OpenSSL 的 pkcs12 指令從這兩個檔案建立。