note
- openssl虽然对SM2有一定支持,但是在基于1.1.1版本签发证书和时间戳响应时都会存在问题,比如oid不支持SM2withSM3,签发时间戳会报错PKCS7_R_SIGNING_CTRL_FAILURE
- 推荐RSA使用OPENSSL,SM2使用GMSSL
自建CA
- 准备目录 mkdir -p private certs newcerts crl
- cd /etc/pki/CA
- 生成RSA2048密钥 openssl genrsa -out private/cakey.pem 2048
- 自签根证 openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300 -subj /C=CN/ST=BeiJing/CN=FCA
- touch index.txt serial
- echo 01 > serial
签发证书
- 创建目录用以存放用户密钥 mkdir userkeypair
- 生成RSA1024密钥 openssl genrsa -out userkeypair/user.key 1024
- 生成证书请求CSR openssl req -new -key userkeypair/user.key -out userkeypair/user.csr -subj /C=CN/ST=BeiJing/CN=user01
- 签发证书 openssl ca -in userkeypair/user.csr -out userkeypair/user.cer -days 3650 -batch
- 合成pfx文件 openssl pkcs12 -export -in userkeypair/user.cer -inkey userkeypair/user.key -certfile cacert.pem -out userkeypair/user.pfx -password pass:123456
签发包含subjectAltName证书
- 修改openssl.cnf
- [ req ] 增加 req_extensions = v3_req
- [ v3_req ] 增加 subjectAltName = @alt_names
- [ alt_names ] 增加 IP.1 = 1.2.3.4; DNS.1 = feng.cn
- 签发证书时增加选项 -extensions v3_req
签发时间戳证书
#可使用如下命令验证SM2的问题
##生成密钥
openssl ecparam -genkey -name SM2 -out private/tskey.pem
##生成证书请求
openssl req -new -key private/tskey.pem -out newcerts/ts.csr -subj /C=CN/ST=BeiJing/CN=FTSA -config openssl.cnf
##签发证书 (***检查openssl.cnf extendedKeyUsage = critical,timeStamping***)
openssl ca -in newcerts/ts.csr -out newcerts/ts.cer -days 1825 -batch -config openssl.cnf
##生成时间戳请求
openssl ts -query -sm3 -data data -tspolicy "1.2.3.4.5.6.7.8" -cert -config /etc/pki/CA/SM2/openssl.cnf -out ./ts.req
##生成时间戳响应
openssl ts -reply -config /etc/pki/CA/SM2/openssl.cnf -queryfile ts.req -out ts.resp
#签发RSA时间戳服务证书后,调用如下命令生成请求和响应
openssl ts -query -data data -cert -out ./ts.req
openssl ts -reply -queryfile ts.req -out ts.resp
证书验证
- 获取证书链各个证书的hash值hashvalue,并重命名为hashvalue.0,放到一个目录下如CApath,openssl x509 -hash -in ../userkeypair/subca.cer
- openssl verify -CApath CApath -show_chain userkeypair/subca_user1.cer
- 理论上用户证书和中间CA证书都需要进行CRL校验,但从效率考虑,一般只校验用户证书的吊销状态
- CA签发用户证书的私钥和签发CRL的私钥可以是不同的,甚至可以委托另一家CA签发CRL,但需要保持和签发证书的链一致
常用命令
#去除私钥p8保护密码
openssl rsa -in encryedprivate.key -out unencryed.key
#解析pfx中的证书
openssl pkcs12 -in user.pfx -password 123456 -clcerts -nokeys -out usercert.pem
#解析pfx中的私钥
openssl pkcs12 -in user.pfx -password 123456 -nocerts -out userkey.pem
#查看证书中的扩展项
openssl x509 -noout -in test.cer -ext basicConstraints
标签:openssl,userkeypair,证书,req,ts,OPENSSL,命令行,out
From: https://blog.csdn.net/summermeet/article/details/144967590