想要从商业 CA 获取数字证书需要向其支付一定的金钱,不过我们不用那么破费,可以自己成为 root CA,为自己发布证书。
在本实验中,我们将成为 root CA,并为该 CA 生成证书。不像其他 CA 需要被另外的 CA 认证, root CA 的证书是自己为自己认证的,一般 Root CA 的证书都已事先加载在大多数操作系统,浏览器或者依赖 PKI 的软件之中了。Root CA 的证书是被无条件信任的。
配置文件:openssl.conf
为了使用 openssl 生成证书,我们首先需要进行配置,配置文件扩展名为.cnf。openssl 的 ca, req, x509 命令常常会用到这份配置文件。你可以从 /usr/lib/ssl/openssl.cnf 获得一份拷贝。将文件拷贝到工作目录后,创建以下在配置文件中指定的子文件夹(详情查看配置文件[CA default]处)
首先我们新建一个工作目录:
$ cd /home/shiyanlou
$ mkdir openssl
$ cd openssl
需要的文件夹和文件配置在 openssl.cnf 中都能找到:1
2
3
4
5
6dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
new_certs_dir = $dir/newcerts # default place for new certs.
database = $dir/index.txt # database index file.
serial = $dir/serial # The current serial number
openssl.cnf 中相关配置截图:
在工作目录下我们需要创建如下这些文件夹和文件,这里给出文件目录树:1
2
3
4
5
6
7
8|-- demoCA
| |-- certs
| |-- crl
| |-- index.txt
| |-- newcerts
| `-- serial
`-- openssl.cnf
index.txt 只要创建空文件就行,至于 serial 文件,内容必须是字符串格式的数字(比如 1000)
具体执行命令如下:1
2
3
4
5
6
7$ sudo cp /usr/lib/ssl/openssl.cnf .
$ mkdir demoCA
$ cd demoCA
$ mkdir certs crl newcerts
$ touch index.txt
$ echo '1000' > serial
$ cd ..
一旦你设置好 openssl.cnf 就可以创建和发布证书了。
数字证书认证机构(CA)
我们需要为自己的 CA 生成自签名证书。这意味着该机构是被信任的,而它的证书会作为 root 证书。你可以运行以下命令为 CA 生成自签名证书:1
2$ openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf
它要求你提供信息和密码,可千万别忘记密码了(我这里输入的密码是 shiyanlou),因为每次为别人签证书的时候你都需要用到密码。信息包括城市名,通用名等等。命令的输出存储在两个文件中:ca.key 与 ca.crt 中。文件 ca.key 包括 CA 的私钥,而 ca.crt 包含了公钥证书。
现在,我们是 root CA 了,我们已经准备好为我们的客户签数字证书,我们的第一个客户是叫作 PKILabServer.com 的公司,这家公司从 CA 获取数字证书需要 3 个步骤:
- 生成公开/私有密钥对
该公司首先需要生成它自己的公开/私有密钥对。我们运行以下命令来生成 RSA 密钥对。你同时需要提供一个密码来保护你的密钥(我这里设置的密码是 pkilab)。密钥会被保存在 server.key 文件中。1
2$ openssl genrsa -des3 -out server.key 1024
- 生成证书签名请求
一旦公司拥有了密钥文件,它应当生成证书签名请求(CSR)。CSR 将被发送给 CA,CA 会为该请求生成证书(通常在确认 CSR 中的身份信息匹配后)。请将 PKILabServer.com 作为证书请求的通用名,并且请记住自己都输了些啥。1
2
3
$ openssl req -new -key server.key -out server.csr -config openssl.cnf
最开始输入的密码就是我们上面设置的密码(pkilab)
- 生成证书
生成证书。CSR 文件需要拥有 CA 的签名来构成证书。在现实世界中,CSR 文件常常被发送给可信任的 CA 签名。本实验中,我们将使用我们自己的 CA 来生成证书:1
2$ openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
输入的密码是我们在第一步设置的密码(shiyanlou)
如果 OpenSSL 拒绝生成证书,那很可能是因为你请求中的名字与 CA 所持有的不匹配。匹配规则在配置文件中指定([policy match]处),你可以更改名字也可以更改规则。都做到这了,就改规则吧。
此时的目录结构如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14.
|-- ca.crt
|-- ca.key
|-- demoCA
| |-- certs
| |-- crl
| |-- index.txt
| |-- newcerts
| `-- serial
|-- openssl.cnf
|-- server.crt
|-- server.csr
`-- server.key
本文来源于实验楼
本文链接: https://erik.xyz/2019/08/16/ca-zheng-shu-sheng-cheng/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!