openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert

发布时间:2024年01月22日

openssl3.2 - 官方demo学习 - test - certs - 001 - Primary root: root-cert

概述

实验前置条件为 openssl3.2 - linux脚本(.sh)调用openssl命令行参数的简单确认方法

笔记

官方原版.sh实验

#! /bin/bash

# \file setup001.sh

# Primary root: root-cert
./mkcert.sh genroot "Root CA" root-key root-cert

exit 0

执行完后, 经修改后的openssl记录下了执行的openssl命令序列

# \file my_openssl_log_001.txt
# Primary root: root-cert
./mkcert.sh genroot "Root CA" root-key root-cert

openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 -out root-key.pem 
openssl req -new -sha256 -key root-key.pem -config /dev/fd/63 
openssl x509 -req -sha256 -out root-cert.pem -extfile /dev/fd/63 -signkey root-key.pem -set_serial 1 -days 36525 

/dev/fd/63 经修改过的openssl记录的管道内容, 这个配置内容改名cfg_001.txt, 作为第2步的配置文件用.

string_mask=utf8only
[req]
prompt = no
distinguished_name = dn
[dn]
CN = Root CA

自己来分3步走做实验

my_openssl_log_001_doc_1.txt

# \file my_openssl_log_001_doc_1.txt

# 要运行的openssl命令行
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 -out root-key.pem 

# openssl 对入参的处理判断流程

# 判断是否无参数(-v, -help)
openssl

# 进行什么任务?
openssl genpkey

# 如果是产生私钥, 请问算法是什么?
openssl genpkey -algorithm rsa

# 输出文件是什么?
openssl genpkey -algorithm rsa -out root-key.pem

# 扩展参数是什么?
openssl genpkey -algorithm rsa -out root-key.pem rsa_keygen_bits:2048

# 参数都拿到了, 开始正式干活
产生输出文件(私钥.pem) root-key.pem 


my_openssl_log_001_doc_2.txt

# \file my_openssl_log_001_doc_2.txt

# 要运行的openssl命令行
openssl req -new -sha256 -key root-key.pem -config /dev/fd/63
/dev/fd/63 已经记录到了 cmd_line_pipe_in_linux_001.txt, 将 cmd_line_pipe_in_linux_001.txt 改名为 cfg_001.txt
# 需要自己加一个 -out 输出文件, 否则没有输出
# 脚本调用时, 用重定向输出的.
openssl req -new -sha256 -key root-key.pem -config cfg_001.txt -out root-req.pem

# openssl 对入参的处理判断流程

# 判断是否无参数(-v, -help)
openssl

# 进行什么任务?
openssl req

# 进行什么子任务?
openssl req new

# 请问算法是什么?
#对于req来说, 指定摘要算法无效, 摘要算法就是sh256, 无法指定为其他算法
openssl req new -sha256

# 私钥文件是什么?
openssl req new -sha256 -key root-key.pem

# 配置文件是什么?
# -config 后面指定的最好是一个落地后的文件名, 方便单步调试
# 如果是运行时, 可以用脚本来指定临时的管道文件名(e.g. /dev/fd/63), 不用落地
openssl req new -sha256 -key root-key.pem -config cfg_001.txt

# 输出文件名是啥?
openssl req new -sha256 -key root-key.pem -config cfg_001.txt -out root-req.pem

# 参数都拿到了, 开始正式干活
输出了 root-req.pem



my_openssl_log_001_doc_3.txt

# \file my_openssl_log_001_doc_3.txt

# 要运行的openssl命令行
openssl x509 -req -sha256 -out root-cert.pem -extfile /dev/fd/63 -signkey root-key.pem -set_serial 1 -days 36525 
/dev/fd/63 是空的(我在日志里面看到的) , 因为官方原版程序使用脚本做的, 没有将文件落地.
如果-extfile跟着一个有内容的文件, 就会报错.
如果-extfile跟着一个没内容的文件, 就有警告. 在代码中单步, 已经看到了警告.


这里就先看看, 官方正式例子中, 也有生成root证书的操作, 是没有警告的. 等用到时, 再比对一下.

# 根据openssl的报错提示, 增加了-in选项, 将上一步生成的证书请求文件作为in内容
# 这也能看出来, 官方自己测试用的证书操作, 仅仅是用于测试, 参数细节给的也不是全对, 需要自己单步openssl, 来看参数是否给的是否正确?
# 官方自己测试用的.sh例子, 生成证书时, 并没有用到上一步产生的证书请求文件, 这就是bug了.

openssl x509 -req -sha256 -in root-req.pem -out root-cert.pem -signkey root-key.pem -set_serial 1 -days 36525 

# openssl 对入参的处理判断流程

# 判断是否无参数(-v, -help)
openssl

# 进行什么任务?
openssl x509

# 进行什么子任务?
openssl x509 -req

# 请问算法是什么?
#对于req来说, 指定摘要算法无效, 摘要算法就是sh256, 无法指定为其他算法
openssl x509 -req -sha256

# 输入文件是啥?
openssl x509 -req -sha256 -in root-req.pem

# 输出文件是啥?
openssl x509 -req -sha256 -in root-req.pem -out root-cert.pem

# 私钥文件是什么?
openssl x509 -req -sha256 -in root-req.pem -out root-cert.pem -signkey root-key.pem

# 序列号sn是啥?
openssl x509 -req -sha256 -in root-req.pem -out root-cert.pem -signkey root-key.pem -set_serial 1

# 证书有效天数
# 如果不设置证书有效天数, 默认是30天的证书
openssl x509 -req -sha256 -in root-req.pem -out root-cert.pem -signkey root-key.pem -set_serial 1 -days 36525

# 参数都拿到了, 开始正式干活
输出了 root-cert.pem



备注

./test/certs目录中的.sh写的也不咋对(经过单步openssl处理命令行参数就明白参数写的不对)

但是官方这个目录的证书操作也不是用于make test的.
应该是openssl工程自己攒下来的脚本, 用于证书操作的内部测试.

因为这个目录, 官方没有文档说明. 如果要想为己用, 就要用openssl工程来调试, 看看哪些参数不合适(有警告也不行, 一定是哪里参数给错了).
然后看是否能生成符合要求的输出文件.

这个001的.sh, 官方调用命令行时, 没有使用 in 参数, 给出上一步生成的证书请求文件, 所以有警告.
自己加了 -in 证书请求文件, 同时将-extfile去掉, 才正常.

END

文章来源:https://blog.csdn.net/LostSpeed/article/details/135726539
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。