toolfree

CSR 產生器

用 WebCrypto 在這個分頁裡產生私密金鑰與憑證簽署請求(CSR)。沒有東西被上傳,因為這個頁面根本沒有可以上傳的伺服器。

在你的瀏覽器中執行

憑證要用的網域,例如 example.com 或 *.example.com

兩個英文字母,例如 TW、HK、CN、GB

一行一個,或用逗號分隔。可以是網域、萬用網域、IP 位址與電子郵件。CN 會自動加進去——瀏覽器根本不看 CN,只比對這份清單,所以少了它的憑證連自己的網域都不成立。

金鑰對由你的瀏覽器產生,完全不會離開這個分頁。這個頁面根本沒有伺服器參與。

線上 CSR 產生器只有一件事重要

憑證簽署請求(CSR)是一份公開文件。你把它寄給憑證中心,裡面沒有任何祕密——只有你要申請的名稱, 和一把公開金鑰。

跟著一起產生的私密金鑰,才是這張憑證的全部安全性。拿到它的人,就能在憑證有效期間內冒充這張 憑證所簽發的網站。

所以對任何線上 CSR 產生器,該問的問題只有一個:金鑰對是在哪裡產生的?如果答案是「在我們的伺服器 上」,那台伺服器比你更早拿到你的私密金鑰,而它拿去做了什麼,你沒有辦法知道。有些網站對這件事很 誠實。大多數什麼都不說。

這個頁面在你的瀏覽器裡產生金鑰,用的是瀏覽器內建的 WebCrypto API。金鑰匯出一次、顯示給你看, 然後就丟掉。它沒有被儲存、沒有被記錄、也沒有被傳送——本站沒有可以接收它的端點,而這件事你可以在 開發者工具的網路分頁裡自己確認:產生金鑰的過程一個請求都不會發出。

這也表示金鑰救不回來。重新整理頁面,它就沒了。離開之前先存起來。

欄位怎麼填

一般名稱(CN) 是網域,也是唯一必填的欄位:example.com,萬用憑證則是 *.example.com。 它不是網址——不要 https://、不要結尾斜線、不要連接埠。

其他名稱(SAN) 才是真正決定這張憑證能用在哪裡的欄位。2017 年起,所有主流瀏覽器比對主機 名稱時完全不看 CN,只看 subject alternative name 這個擴充欄位。一張有 CN、沒有 SAN 的憑證, 連自己的網域都會被判定為無效。這個頁面會自動把 CN 補進 SAN 清單,所以不會發生這件事;其餘的你 自己加:www.example.com、其他主機名稱、IP 位址。

國碼(C) 是兩個字母的 ISO 3166-1 代碼,憑證中心會驗。台灣是 TW、香港是 HK、中國是 CN;英國要填 GB 而不是 UK,因為 UK 不是 ISO 國碼。

組織(O) 與其他欄位是選填的,而且對大多數人買的憑證來說根本不看。網域驗證(DV)憑證只證明 網域、不證明別的,憑證中心會把它沒查證過的組織欄位直接拿掉。只有在申請 OV/EV 憑證時才需要 認真填,而且要跟公司登記文件完全一致。

選哪一種金鑰

RSA 2048 是安全的預設值。每一家憑證中心都簽,而且只要講過 TLS 的東西都收。

ECDSA P-256 更小更快,握手短得多,而且除了十年前的嵌入式裝置以外,支援度已經可以視為全面。 如果你清楚會有什麼東西來連,選它。

RSA 4096 是可以跳過的那一個。它讓每一次握手都變慢,換來的安全性沒有人需要——2048 位元的 RSA 沒有已知的實際攻擊,而萬一哪天有了,4096 也撐不了多久。真的對 2048 不放心,該換的是 ECDSA。

P-384 存在的理由是某些法遵規範會指名要它。

簽章雜湊全程是 SHA-256,P-384 則是 SHA-384。SHA-1 自 2016 年起就沒有公開憑證中心會收,這裡不 提供。

拿到兩份東西之後

  1. 把私密金鑰存起來,檔名如 example.com.key,放在有備份、而且只有你讀得到的地方, chmod 600
  2. 把 CSR ——那段 CERTIFICATE REQUEST ——送給憑證中心。它不是祕密,用電子郵件寄沒問題。
  3. 憑證中心回一張憑證。你的伺服器需要它加上第 1 步那把私密金鑰。沒有金鑰的憑證是廢紙。
  4. 在憑證裝好、網站確實打得開之前,什麼都不要刪。

送出之前先看一眼你要送的是什麼:

openssl req -in request.csr -noout -text -verify

它會印出主體與 SAN 清單,而 verify 會確認簽章確實是由裡面那把公開金鑰對應的私密金鑰做的—— 這一步抓得到組裝錯誤的 CSR。

CSR 決定不了的事

憑證的有效期間、簽發者、能不能再去簽別的憑證、帶哪些延伸金鑰用途,全都是憑證中心決定的,不是你。 CSR 做的事是「申請這些名稱,這是我的公開金鑰」;憑證中心可以無視其他所有欄位,而且通常真的無視。

這也是為什麼 CSR 不會過期。它是一份申請,不是一份憑據——只要你手上還有對應的金鑰,同一份可以再 送一次。

先確認你需不需要花錢

如果你只是要在公開的網頁伺服器上放一張網域驗證憑證,先想想有沒有必要。Let’s Encrypt 和 ZeroSSL 免費簽發 DV 憑證,而它們的 ACME 用戶端——certbot、acme.sh、Caddy,或你主機商內建的那個——會替你 產生金鑰與 CSR 並自動續簽。手動做 CSR 適用的場合是:付費的 OV/EV 憑證、用戶端憑證、自建的內部 憑證中心、某台管理介面硬是要你貼一份 CSR 的設備,或程式碼簽章。

相關

我的 IP 位址WebSocket 測試是把 TLS 弄 起來的另一半;UUID 產生器同樣是用瀏覽器自己的密碼學介面產生的。