openssl3.2 - use openssl cmd create ca and p12

文章目录

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证书时设置的导出口令.

另外, 在导入应用证书时, 将根证书也导入了.

END

相关推荐
Lazy Dave9 天前
gmssl私钥文件格式
网络安全·ssl·openssl
沉在嵌入式的鱼1 个月前
RK3588移植Openssl库
linux·rk3588·openssl
黑屋里的马1 个月前
ssl相关命令生成证书
服务器·网络·ssl·openssl·gmssl
fangeqin1 个月前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
API开发2 个月前
苹果芯片macOS安装版Homebrew(亲测) ,一键安装node、python、vscode等,比绿色软件还干净、无污染
vscode·python·docker·nodejs·openssl·brew·homebrew
码农不惑2 个月前
Rust使用tokio(二)HTTPS相关
https·rust·web·openssl
liulilittle2 个月前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法并通过OPENSSL加密验证算法正确性。
linux·服务器·c++·算法·安全·加密·openssl
liulilittle2 个月前
OpenSSL 的 AES-NI 支持机制
linux·运维·服务器·算法·加密·openssl·解密
liulilittle2 个月前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法。
linux·服务器·c++·算法·安全·加密·openssl
花花少年2 个月前
Ubuntu系统下交叉编译openssl
openssl·交叉编译