前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >证书管理系统

证书管理系统

作者头像
Homqyy
发布2024-08-23 20:04:07
780
发布2024-08-23 20:04:07
举报
文章被收录于专栏:知行合一

openssl证书CA国密PKI

证书管理系统

前言

这次向大家介绍一个开源项目,它可以快速的生成证书,满足测试或部署加密服务时遇到的证书需求。

该项目可以创建“客户端”和“服务器”证书,同时支持多种证书类型,包括:RSA、国密(SM2)和ECDSA。

并且可以快速的吊销证书,以及导出CA和CRL。

要说最具特色的应该是“虚拟环境”,类似于python的venv,利用该虚拟环境,可以在同一个机器上创建多个“证书管理系统”,每个系统都是独立的,互不干扰。

比如我就会在自己的电脑上创建“测试证书”、“容器证书”、“VPN证书”、“公网服务证书”等几个证书系统,他们每个证书系统都有自己的CA,互不干扰。

项目介绍

项目地址:Github Homqyy/certm

部署起来也很简单,只需要一下几个步骤:

拉取代码,并进入项目目录:

代码语言:javascript
复制
git clone https://github.com/Homqyy/certm.git && cd certm

根据需要修改配置文件settings.conf,比如你的名字为XiaoMing,系统域名为*.example.com,那么可以如下修改配置值:

代码语言:javascript
复制
g_conf_name="XiaoMing"
g_conf_domain_suffix=example.com

构建证书管理系统:

代码语言:javascript
复制
./build -i

经过上述的步骤就部署好了,接下来可以用于创建、吊销证书了:

进入证书环境:

代码语言:javascript
复制
source ./bin/activate.sh --name example
  • --name example:用于设置证书环境的名称,方便识别。当然也可以不设置,不设置的话会使用默认名称

制作证书:

客户端 RSA 证书:

代码语言:javascript
复制
certm-mkcert cert1
  • cert1:证书名称,可以自定义,比如cert1cert2等等
  • 证书和密钥文件存储在路径:output/clients/cert1.example.com/,其中clients是存储客户端证书的目录,cert1.example.com是由配置文件settings.conf中的$g_conf_domain_suffixcert1拼起来的。

服务器 RSA 证书:

代码语言:javascript
复制
certm-mkcert --server cert1

注意:

  • 如果想生成 国密 证书,使用参数--type sm2即可
  • 如果想生成 ECDSA 证书,需要使用参数--type ecdsa即可

吊销证书:

吊销客户端证书:

代码语言:javascript
复制
certm-revoke cert1
  • cert1:证书名称,即上文certm-mkcert命令中的参数cert1

吊销服务器证书:

代码语言:javascript
复制
certm-revoke --server cert1

注意:

  • 吊销时需要输入密码,密码在settings.conf中的$g_conf_password定义,默认为root
  • 吊销后,应当更新CRL,更新方式为certm-gencrl
  • 如果想吊销 国密 证书,使用参数--type sm2即可
  • 如果想吊销 ECDSA 证书,需要使用参数--type ecdsa即可

生成crl:

代码语言:javascript
复制
certm-gencrl 
  • CRL文件存储在路径:output/ca/

导出CA证书:

代码语言:javascript
复制
certm-genca
  • CA证书存储在路径:output/ca/

退出环境:

代码语言:javascript
复制
deactivate

证书文件说明¶

对于RSA和ECDSA证书,生成的文件如下:

代码语言:javascript
复制
rsa | ecdsa
├── cert.p12
├── cert.pem
├── chain.pem
├── csr.conf
├── priv.csr
└── privkey.pem
  • cert.p12:客户端或服务器证书和私钥,格式为PKCS12
  • cert.pem:客户端或服务器证书,不包含任何中间证书,格式为PEM
  • chain.pem:客户端或服务器证书,包含中间证书,格式为PEM
  • privkey.pem:客户端或服务器证书的私钥,格式为PEM
  • csr.conf:生成证书请求时的配置文件
  • priv.csr:证书请求

对于国密证书,生成的文件如下:

代码语言:javascript
复制
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
  • 国密证书相较于RSA和ECDSA的区别在于多了“加密证书”和“加密私钥”,它们用enc-作为前缀:
    • enc-cert.p12:客户端或服务器的加密证书和私钥,格式为PKCS12
    • enc-cert.pem:客户端或服务器加密证书,不包含任何中间证书,格式为PEM
    • enc-chain.pem:客户端或服务器加密证书,包含中间证书,格式为PEM
    • enc-privkey.pem:客户端或服务器加密证书的私钥,格式为PEM
    • enc-csr.conf:生成加密证书请求时的配置文件
    • enc-priv.csr:加密证书请求

CA目录(output/ca/)下的文件如下:

代码语言:javascript
复制
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证书的CRL
    • sub-ca.pem.crl:RSA和ECDSA证书的中间CA证书的CRL
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 证书管理系统
    • 前言
      • 项目介绍
        • 证书文件说明¶
        相关产品与服务
        SSL 证书
        腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档