openssl证书CA国密PKI
这次向大家介绍一个开源项目,它可以快速的生成证书,满足测试或部署加密服务时遇到的证书需求。
该项目可以创建“客户端”和“服务器”证书,同时支持多种证书类型,包括:RSA、国密(SM2)和ECDSA。
并且可以快速的吊销证书,以及导出CA和CRL。
要说最具特色的应该是“虚拟环境”,类似于python的venv
,利用该虚拟环境,可以在同一个机器上创建多个“证书管理系统”,每个系统都是独立的,互不干扰。
比如我就会在自己的电脑上创建“测试证书”、“容器证书”、“VPN证书”、“公网服务证书”等几个证书系统,他们每个证书系统都有自己的CA,互不干扰。
项目地址:Github Homqyy/certm
部署起来也很简单,只需要一下几个步骤:
拉取代码,并进入项目目录:
git clone https://github.com/Homqyy/certm.git && cd certm
根据需要修改配置文件settings.conf
,比如你的名字为XiaoMing
,系统域名为*.example.com
,那么可以如下修改配置值:
g_conf_name="XiaoMing"
g_conf_domain_suffix=example.com
构建证书管理系统:
./build -i
经过上述的步骤就部署好了,接下来可以用于创建、吊销证书了:
进入证书环境:
source ./bin/activate.sh --name example
--name example
:用于设置证书环境的名称,方便识别。当然也可以不设置,不设置的话会使用默认名称制作证书:
客户端 RSA 证书:
certm-mkcert cert1
cert1
:证书名称,可以自定义,比如cert1
、cert2
等等output/clients/cert1.example.com/
,其中clients
是存储客户端证书的目录,cert1.example.com
是由配置文件settings.conf
中的$g_conf_domain_suffix
跟cert1
拼起来的。服务器 RSA 证书:
certm-mkcert --server cert1
注意:
--type sm2
即可--type ecdsa
即可吊销证书:
吊销客户端证书:
certm-revoke cert1
cert1
:证书名称,即上文certm-mkcert
命令中的参数cert1
吊销服务器证书:
certm-revoke --server cert1
注意:
settings.conf
中的$g_conf_password
定义,默认为root
。certm-gencrl
--type sm2
即可--type ecdsa
即可生成crl:
certm-gencrl
output/ca/
导出CA证书:
certm-genca
output/ca/
退出环境:
deactivate
对于RSA和ECDSA证书,生成的文件如下:
rsa | ecdsa
├── cert.p12
├── cert.pem
├── chain.pem
├── csr.conf
├── priv.csr
└── privkey.pem
cert.p12
:客户端或服务器证书和私钥,格式为PKCS12cert.pem
:客户端或服务器证书,不包含任何中间证书,格式为PEMchain.pem
:客户端或服务器证书,包含中间证书,格式为PEMprivkey.pem
:客户端或服务器证书的私钥,格式为PEMcsr.conf
:生成证书请求时的配置文件priv.csr
:证书请求对于国密证书,生成的文件如下:
sm2/
├── cert.p12
├── cert.pem
├── chain.pem
├── csr.conf
├── enc-cert.p12
├── enc-cert.pem
├── enc-chain.pem
├── enc-csr.conf
├── enc-priv.csr
├── enc-privkey.pem
├── priv.csr
└── privkey.pem
enc-
作为前缀:
enc-cert.p12
:客户端或服务器的加密证书和私钥,格式为PKCS12enc-cert.pem
:客户端或服务器加密证书,不包含任何中间证书,格式为PEMenc-chain.pem
:客户端或服务器加密证书,包含中间证书,格式为PEMenc-privkey.pem
:客户端或服务器加密证书的私钥,格式为PEMenc-csr.conf
:生成加密证书请求时的配置文件enc-priv.csr
:加密证书请求CA目录(output/ca/
)下的文件如下:
ca
├── ca-all.pem.crt
├── ca-chain-gm.pem.crt
├── ca-chain.pem.crt
├── ca-gm.pem.crt
├── ca.pem.crt
├── gm-sub-ca.pem.crl
└── sub-ca.pem.crl
certm-genca
命令生成:ca-all.pem.crt
:包含所有CA证书,包括RSA、ECDSA和国密ca-chain-gm.pem.crt
:国密CA证书链,包含了国密根CA及中间CA证书ca-chain.pem.crt
:RSA和ECDSA证书的CA证书链,包含了根CA及中间CA证书ca-gm.pem.crt
:国密根CA证书ca.pem.crt
:RSA和ECDSA证书的根CA证书certm-gencrl
命令生成:gm-sub-ca.pem.crl
:国密中间CA证书的CRLsub-ca.pem.crl
:RSA和ECDSA证书的中间CA证书的CRL