Skip to content

Latest commit

 

History

History
86 lines (62 loc) · 3.32 KB

README.md

File metadata and controls

86 lines (62 loc) · 3.32 KB

自签泛域名证书

此工具用于颁发泛域名证书,方便开发环境调试。

请勿用于生产环境,生产环境还是购买正式的证书。
或者到 Let's Encrypt 可以申请到免费证书
(支持多域名和泛域名)。

优点

  1. 你可以创建任意网站证书,只需导入一次根证书,无需多次导入;
  2. 减少重复又无谓的组织信息输入,创建证书时只需要输入域名;
  3. 泛域名证书可以减少 nginx 配置,例如你要模拟 CDN:
    假设你的项目网站是 example.dev,CDN 网站设置为 cdn.example.dev
    你只需在 nginx 里面配置一个网站,server_name 同时填写 example.dev
    cdn.example.dev,它们可以使用同一个 *.example.dev 的证书。
  4. 现在你只需要一个证书,就可以搞定所有项目网站!

使用 SAN 来支持多域名和泛域名:

subjectAltName=DNS:*.one.dev,DNS:one.dev,DNS:*.two.dev,DNS:two.dev,DNS:*.three.dev,DNS:three.dev

系统要求

  1. Linux,openssl
  2. 事先用 hosts 或者 dnsmasq 解析你本地开发的域名,
    例如把 example.dev 指向 127.0.0.1

使用

./gen.cert.sh <domain> [<domain2>] [<domain3>] [<domain4>] ...

<domain> 替换成你的域名,例如 example.dev

运行的输出像这样:

Output Screen

如果有多个项目网站,可以把所有网站都加上去,用空格隔开。

生成的证书位于:

out/<domain>/<domain>.crt
out/<domain>/<domain>.bundle.crt

证书有效期是 2 年,你可以修改 ca.cnf 来修改这个年限。

根证书位于:
out/root.crt
成功之后,把根证书导入到操作系统里面,信任这个证书。

根证书的有效期是 20 年,你可以修改 gen.root.sh 来修改这个年限。

证书私钥位于:
out/cert.key.pem

其中 <domain>.bundle.crt 是已经拼接好 CA 的证书,可以添加到 nginx 配置里面。
然后你就可以愉快地用 https 来访问你本地的开发网站了。

清空

你可以运行 flush.sh 来清空所有历史,包括根证书和网站证书。

配置

你可以修改 ca.cnf 来修改你的证书年限。

default_days    = 730

可以修改 gen.root.sh 来自定义你的根证书名称和组织。

也可以修改 gen.cert.sh 来自定义你的网站证书组织。

参考 / 致谢

Vault and self signed SSL certificates

利用OpenSSL创建自签名的SSL证书备忘

Provide subjectAltName to openssl directly on command line

关于 Let's Encrypt 客户端

官方客户端 certbot 太复杂了,推荐使用 acme.sh

关于 .dev 域名

Chrome to force .dev domains to HTTPS via preloaded HSTS (2017-9-16)

关于 Chrome 信任证书问题

看到有人反映 Chrome 下无法信任证书,可参考 这个文档