文章目录
-
- [openssl3.2 - use openssl cmd create ca and p12](#openssl3.2 - use openssl cmd create ca and p12)
- 概述
- 笔记
- 实验的openssl环境
- 建立CA
- 生成私钥和证书请求
- 生成CA证书
- 用CA签发应用证书
- 用CA对应用证书进行签名
- 将已经签名好的PEM证书封装为P12证书
- 验证P12证书是否可用
- END
openssl3.2 - use openssl cmd create ca and p12
概述
已经用官方perl脚本(CA.pl)做了关于建立CA和封装P12证书的实验(openssl3.2 - helpdoc - P12证书操作).
但是将官方perl脚本用的openssl命令行记录下来, 自己用openssl命令行重新做一遍实验时, 发现有些文件, 目录的名称是从配置文件来的(e.g. DemoCA), 显然自己要的CA名字不应该是这么随意的实验名字.
还有建立目录时, 目录的名称也是从配置文件来的. 如果此目录不存在, openssl命令行就会失败.
需要建立要操作的目录, 再去运行openssl命令行.
自己重新用openssl命令行做了一次实验, 做了自己的实验CA, 封装了自己的P12的证书用于应用实验.
笔记
实验的openssl环境
openssl是有默认配置文件的, 如果不是在全局环境变量中, 就需要自己在实验的cmd中临时加入PATH.
bash
@echo off
rem \file my_openssl_env_cmd.cmd
set OPENSSL=c:\openssl_3d2\bin\openssl
set OPENSSL_CONF=C:\openssl_3d2\common\openssl.cnf
set path=c:\openssl_3d2\bin;%path%
cmd
双击 my_openssl_env_cmd.cmd, 就有了openssl默认环境.
bash
cd /d D:\my_dev\my_local_git_prj\study\openSSL\openssl_cmd_exp\use_ossl_cmd_create_ca_and_p12
建立CA
生成私钥和证书请求
bash
mkdir .\private
openssl req -new -keyout .\private\my_root_ca_key.pem -out .\my_root_ca_key_req.pem
Enter PEM pass phrase: pwd_111111
Country Name (2 letter code) [AU]: CN
State or Province Name (full name) [Some-State]: SX
Locality Name (eg, city) []: TY
Organization Name (eg, company) [Internet Widgits Pty Ltd]: my_company
Organizational Unit Name (eg, section) []: RD
Common Name (e.g. server FQDN or YOUR name) []: my_root_ca
Email Address []: my_email@sina.com
A challenge password []: pwd_cha_111111
An optional company name []: my_company
生成CA证书
将 openssl安装目录中的C:\openssl_3d2\common\openssl.cnf 拷贝到实验目录下, 命名为 my_openssl.cnf
将CA_default节的dir值改为.
bash
####################################################################
[ CA_default ]
dir = . # Where everything is kept
新建目录
bash
mkdir .\newcerts
新建空文件
bash
type nul > index.txt
生成证书
bash
openssl ca -config .\my_openssl.cnf -create_serial -out .\my_root_ca_cert.pem -days 3650 -batch -keyfile .\private\my_root_ca_key.pem -selfsign -extensions v3_ca -infiles .\my_root_ca_key_req.pem
Using configuration from .\my_openssl.cnf
// 可以看到提示, 现在使用的是我们自己拷贝过来改名和改内容的配置文件
// 要求CA私钥证书口令时, 从前面的记录可以找到, CA私钥证书的口令为 pwd_111111
Enter pass phrase for .\private\my_root_ca_key.pem: pwd_111111
现在CA的证书已经生成好了.
用CA签发应用证书
bash
// 做应用证书的请求
openssl req -new -keyout my_app_key.pem -out my_app_req.pem -days 3650
Enter PEM pass phrase: pwd_app_222222
Country Name (2 letter code) [AU]: CN
State or Province Name (full name) [Some-State]: SX
Locality Name (eg, city) []: TY
Organization Name (eg, company) [Internet Widgits Pty Ltd]: my_company
Organizational Unit Name (eg, section) []: app
Common Name (e.g. server FQDN or YOUR name) []: my_app
Email Address []: my_email@sina.com
A challenge password []: pwd_cha_222222
An optional company name []: krgy
应用的key和请求做好了.
用CA对应用证书进行签名
修改配置文件中的CA私钥名称为自己CA的私钥
修改配置文件中的CA证书名称为自己的CA证书
bash
####################################################################
[ CA_default ]
# ...
certificate = $dir/my_root_ca_cert.pem # The CA certificate
# ...
private_key = $dir/private/my_root_ca_key.pem # The private key
对应用证书进行签名
bash
openssl ca -config .\my_openssl.cnf -policy policy_anything -out my_app_cert.pem -infiles my_app_req.pem
# 从上面记录可知, CA私钥口令为pwd_111111
Enter pass phrase for ./private/my_root_ca_key.pem: pwd_111111
# 需要签名
Sign the certificate? [y/n]: y
# 提交操作
1 out of 1 certificate requests certified, commit? [y/n] y
应用证书已经生成了.
将已经签名好的PEM证书封装为P12证书
bash
openssl pkcs12 -in my_app_cert.pem -inkey my_app_key.pem -certfile .\my_root_ca_cert.pem -out my_app_cert.p12 -export -name my_app_cert
# 由记录可知, 应用私钥证书的口令为 pwd_app_222222
Enter pass phrase for my_app_key.pem: pwd_app_222222
# 设置P12证书的导出口令
Enter Export Password: pwd_exp_333333
Verifying - Enter Export Password: pwd_exp_333333
p12证书已经做好了.
验证P12证书是否可用
openssl3.2 - 官方demo学习 - pkcs12 - pkwrite.c
可以看到, p12证书可以正常导入, 用的是封装P12证书时设置的导出口令.
另外, 在导入应用证书时, 将根证书也导入了.