Bootstrap

数字证书实战经验——自建CA中心签发证书

用途

  • 企业IT内部自建CA中心,或用产品,或用工具,但一般都会考虑一个点用openssl去自建CA中心,且成本低,见效快,非常好用,非常实用,且用处非常广泛。
  • 通常企业内部自建CA中心,看实际情况设计1个或多个root ca(区分加密算法或者分不同领域,按需设计),再签发中间CA,最后实际采用中间CA签发的3级证书。这么做的好处在于树形化管控证书上下级关系,同时便于制定证书的信任策略。

openssl自建CA

        本文采用EC证书,也可以采用RSA,可做参考,以下内容要求对openssl有一定的了解和使用经验。

设计关系树

首先我们设计一套用于企业内部的CA中心组织关系;如下图所示

  • ROOT CA:根证书(CA)
  • Sub CA:中间证书(CA)
  • LV 3: 通常3级证书,非CA
  • 大致分为3步骤(建立3级,重复这些步骤):
    • 自建私钥key
    • 生成证书请求csr
    • key签发csr生成crt/cer

工程目录介绍

        采用标准等openssl工程目录结构,openssl自建证书通常需要两种配置文件,可通过cnf配置文件修改证书签发的配置项。

  • root ca的cnf配置文件
  • 中间证书的cnf配置文件(intermediate ca cnf)
+ root-ca
	-	certs -- 公钥生成目录
	-	crl -- 证书吊销目录
	-	csr -- 证书签发请求文件目录
	-	db -- 证书数据库
	-	newcerts -- openssl生成的临时证书目录
	-	private -- 私钥目录
	-	index.cnf -- 参考的openssl目录
	-	index.txt -- 证书数据库目录,存储历史生成记录,重新生成证书时,需要删除对应的数据
	-	root-ca.cnf -- ROOT CA/Server CA生成的配置
	-	serial -- 证书序列码配置文件,默认 01
	-	intermediate-ca.cnf -- 服务端/客户端证书生成的配置

创建两级CA中心

  • 生成root ca密钥对
    • 生成root ca key (Shell: openssl ecparam)
    • 用root ca key指定 root ca cnf配置生成证书请求csr(Shell: openssl req)
    • 用自签发命令用root ca key指定 root ca cnf配置对csr做自签发生成root ca cer (Shell: openssl 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

  • 生成sub ca密钥对
    • 生成sub ca key
    • 用 sub ca key指定 root ca cnf配置生成证书请求csr
    • 用root ca key指定root ca cnf配置对csr做签发生成sub ca cer
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

签发三级证书

        使用Sub CA签发三级证书

  • CA自建完成,设计了多少sub ca重复操作即可,实际使用过程中直接签发3级证书
    • 生成3级证书key
    • 用lv3 key指定intermediate ca cnf配置生成证书请求csr
    • 用 sub ca key指定intermediate ca cnf配置对csr做签发生成lv3 cer
  • CA中心建立基本不会重新签发新CA,用对应的Sub CA签发LV3即可
  • 附件root-ca文件夹提供了完整自建CA工程及操作手册,附件工程创建的是ecc,如果用rsa,参考openssl rsa的方式即可,步骤都是一样的。
  • 学习建议:
    • openssl指令
    • cnf配置项
    • X509协议
openssl ecparam -out ./private/serverside.key -name prime256v1 -genkey 

openssl req -key ./private/serverside.key -new -out ./csr/serverside.csr -config ./intermediate-ca.cnf

openssl ca -in ./csr/serverside.csr -out ./certs/serverside.pem -config ./intermediate-ca.cnf  -extensions server_cert 

常用openssl指令

  • x509,可操作查看x509证书文件信息,通常签发之后的文件都是x509文件
  • ec,可操作查看ECC加密key
  • ecparam,ec密钥生成
  • rsa,rsa操作查看rsa加密key
  • pkcs7,操作查看pkcs7文件(.p7b)
  • req, 操作查看证书申请文件(.csr)
  • pkcs8,操作查看pkcs8,比如将openssl默认生成的pkcs1格式证书转为java支持的pkcs8证书格式
  • pkcs12,操作查看pkcs12,比如将私钥和公钥打包成pkcs12文件格式,并使用java keytool将pkcs12文件转为java key store文件
  • ca,操作签发CA证书
  • s_client,ssl客户端,可测试SSL通道

openssl证书工程

整理了一个openssl证书工程,要求本机装了openssl,工程内有说明文档。采用了本文中的"工程目录"。

请查看本文的绑定的资源即openssl的证书工程。

;