CSR 产生器
用 WebCrypto 在这个分页里产生私钥与证书签署请求(CSR)。没有东西被上传,因为这个页面根本没有可以上传的服务器。
在你的浏览器中运行
证书要用的域名,例如 example.com 或 *.example.com
两个英文字母,例如 CN、HK、TW、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 年起就没有公开证书颁发机构会收,这里不 提供。
拿到两份东西之后
- 把私钥存起来,档名如
example.com.key,放在有备份、而且只有你读得到的地方,chmod 600。 - 把 CSR ——那段
CERTIFICATE REQUEST——送给证书颁发机构。它不是秘密,用电子邮件寄没问题。 - 证书颁发机构回一张证书。你的服务器需要它加上第 1 步那把私钥。没有密钥的证书是废纸。
- 在证书装好、网站确实打得开之前,什么都不要删。
送出之前先看一眼你要送的是什么:
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 产生器同样是用浏览器自己的密码学接口产生的。