-----sign ROOT CA Host Name(Common Name): Local ROOT CA------
openssl ecparam -out ./private/root-ca.key -name prime256v1 -genkey
openssl req -key ./private/root-ca.key -new -out ./csr/root-ca.csr -config ./root-ca.cnf
openssl ca -selfsign -config ./root-ca.cnf -in ./csr/root-ca.csr -extensions v3_ca -out ./certs/root-ca.pem
-----sign Intermediate CA Host Name(Common Name): Local Intermediate CA------
openssl ecparam -out ./private/intermediate-ca.key -name prime256v1 -genkey
openssl req -key ./private/intermediate-ca.key -new -out ./csr/intermediate-ca.csr -config ./root-ca.cnf
openssl ca -in ./csr/intermediate-ca.csr -out ./certs/intermediate-ca.pem -extensions v3_intermediate_ca -config ./root-ca.cnf
-----sign Server Cert Host Name(Common Name): localhost------
openssl ecparam -out ./private/localhost.key -name prime256v1 -genkey
openssl req -key ./private/localhost.key -new -out ./csr/localhost.csr -config ./intermediate-ca.cnf
openssl ca -in ./csr/localhost.csr -out ./certs/localhost.pem -config ./intermediate-ca.cnf -extensions server_cert
cat ./certs/localhost.pem ./certs/localhost.pem ./certs/root-ca.pem > ./certs/localhost-ca-bundle.pem
--查看CSR证书明细
openssl req -text -in ./csr/localhost.csr
--查看x509证书明细
openssl x509 -text -in ./certs/localhost-ca-bundle.pem
-----说明-------
1. index.cnf是openssl初始化后的配置文件,用于参考使用,当前的这套证书生成不需要,仅用于查历史老配置
2. root-ca.cnf: 配置ROOT CA(根证书)和Server CA(二级签发中心CA证书,Intermediate CA)的证书生成文件,如何使用请参考配置文件中的注释
a. Local ROOT CA是ROOT CA的host name,这里生成CSR文件时使用
b. Local Intermediate CA是Intermediate CA的host name,也就是二级CA
3. intermediate-ca.cnf: 签发服务器端证书使用的配置,这里的CA指定的是Intermediate CA
a. 三级证书host name按照签发的域名指定
b. 可按照需求修改intermediate-ca.cnf生成证书,比如alternative name,通配证书等等
4. -extensions: 指定生成证书的扩展配置,如果不指定会使用默认的配置生成,具体参考root-ca.cnf, intermediate-ca.cnf的注释
5. 开始使用的时候,还请修改root-ca.cnf, intermediate-ca.cnf的配置"CA_default"下面的"dir"配置为"root-ca"的绝对目录
6. 无论单向认证还是双向认证,对于服务器的证书验证分两种情况:
a. 如果服务器端下发的证书证书链不完整(root-ca -> intermediate-ca -> server-cert),只包含intermediate-cert,那么需要client端要指定证书链作为CA,至少要root-ca -> intermediate-ca
b. 如果服务器端下发的证书链完整,那么用root-ca作为CA校验即可,前提是ROOT CA的keyUsage包含digitalSignature, keyCertSign
c. 制造证书链文件是自下而上的存储方式(server-cert_intermediate-ca_root-ca),命令 cat ./certs/server-cert.pem ./certs/intermediate-ca.pem ./certs/root-ca.pem > ./certs/ca-bundle.pem
7. 初始化工程
a. 移除 certs rm -rf ./certs/*
b. 移除 csr rm -rf ./csr/*
c. 移除 newcerts rm -rf ./newcerts/*
d. 移除 private rm -rf ./private/*
e. 删除不必要的目录文件,下面是初始化目录,供参考
root-ca
- certs -- 公钥生成目录
- crl -- 证书吊销目录
- csr -- 证书签发请求文件目录
- db -- 证书数据库
- newcerts -- openssl生成的临时证书目录
- private -- 私钥目录
- index.cnf -- 参考的openssl配置
- index.txt -- 证书数据库目录,存储历史生成记录,重新生成证书时,需要删除对应的数据
- readme.txt -- 说明文件
- root-ca.cnf -- ROOT CA/Intermediate CA生成的配置
- serial -- 证书序列码配置文件,默认 01
- intermediate-ca.cnf -- 服务端/客户端证书生成的配置
f. 清空./index.txt
g. 初始化serial文件为01
8. 创建出来的证书在使用的工程中出现验证等问题,正常修改cnf文件配置重新创建即可解决。
9. 设置备用域名和IP,修改intermediate-ca.cnf下面的alt_names参数,可以指定备用域名和IP
10. 通配符域名common name设置为*.[DNS domain],前提是在alt_names上也要配置*.[DNS domain],如:*.local.com
11. 多域名证书是配置alt_names,我们这套是多域名证书,同时因alt_names也配置了*.local.com所以也支持通配域名(泛域名)