<commit_before># 自签泛域名证书
此工具用于颁发泛域名证书，方便开发环境调试。

请勿用于生产环境，生产环境还是购买正式的证书。  
或者到 [Let's Encrypt](https://letsencrypt.org/) 可以申请到免费证书  
（没有泛域名，但是可以指定多域名）。

## 优点
1. 你可以创建任意网站证书，只需导入一次根证书，无需多次导入；
1. 减少重复又无谓的组织信息输入，创建证书时只需要输入域名；
1. 泛域名证书可以减少 `nginx` 配置，例如你要模拟 CDN：
假设你的项目网站是 `example.dev`，CDN 网站设置为 `cdn.example.dev`，
你只需在 `nginx` 里面配置一个网站，`server_name` 同时填写  `example.dev`  
和 `cdn.example.dev`，它们可以使用同一个 `*.example.dev` 的证书。

## 系统要求
1. Linux，openssl
1. 事先用 `hosts` 或者 `dnsmasq` 解析你本地开发的域名，  
例如把 `example.dev` 指向 `127.0.0.1`

## 使用
### 1. 用 gen.root.sh 生成根证书
根证书只需要生成一次，如果已经运行过，则跳过这一步。

```bash
./gen.root.sh
```
生成的根证书私钥位于：  
`ssl/out/root.key.pem`  
生成的根证书位于：  
`ssl/out/root.cert.pem`  

成功之后，把根证书导入到操作系统里面，信任这个证书。

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

### 2. 用 gen.cert.sh 生成网站证书
```bash
./gen.cert.sh <domain><commit_msg>docs(ssl): fix typesetting in readme<commit_after># 自签泛域名证书
此工具用于颁发泛域名证书，方便开发环境调试。

请勿用于生产环境，生产环境还是购买正式的证书。  
或者到 [Let's Encrypt](https://letsencrypt.org/) 可以申请到免费证书  
（没有泛域名，但是可以指定多域名）。

## 优点
1. 你可以创建任意网站证书，只需导入一次根证书，无需多次导入；
1. 减少重复又无谓的组织信息输入，创建证书时只需要输入域名；
1. 泛域名证书可以减少 `nginx` 配置，例如你要模拟 CDN：  
假设你的项目网站是 `example.dev`，CDN 网站设置为 `cdn.example.dev`，  
你只需在 `nginx` 里面配置一个网站，`server_name` 同时填写  `example.dev`  
和 `cdn.example.dev`，它们可以使用同一个 `*.example.dev` 的证书。

## 系统要求
1. Linux，openssl
1. 事先用 `hosts` 或者 `dnsmasq` 解析你本地开发的域名，  
例如把 `example.dev` 指向 `127.0.0.1`

## 使用
### 1. 用 gen.root.sh 生成根证书
根证书只需要生成一次，如果已经运行过，则跳过这一步。

```bash
./gen.root.sh
```
生成的根证书私钥位于：  
`ssl/out/root.key.pem`  
生成的根证书位于：  
`ssl/out/root.cert.pem`  

成功之后，把根证书导入到操作系统里面，信任这个证书。

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

### 2. 用 gen.cert.sh 生成网站证书
```bash
./gen.cert.sh <domain>
{'fraction_non_alphanumeric': 0.16873889875666073, 'fraction_numerical': 0.017761989342806393, 'mean_word_length': 4.6521739130434785, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3339213', 'n_tokens_mistral': 1248, 'n_tokens_neox': 1406, 'n_words': 143}