openssl3.2 - 官方demo学习 - certs
文章目录
- openssl3.2 - 官方demo学习 - certs
- 概述
- 笔记
- 官方的实验流程
- mkcerts.sh - 整理
- ocsprun.sh - 整理
- ocspquery.sh - 整理
- 从mkcerts.sh整理出来的27个.bat
- a1_create_certificate_directly.cmd
- a2_Intermediate_CA_request_first.cmd
- a3_Sign_request_CA_extensions.cmd
- a4_Server_certificate_create_request_first.cmd
- a5_Sign_request_end_entity_extensions.cmd
- a6_Client_certificate_request_first.cmd
- a7_Sign_using_intermediate_CA.cmd
- a8_Revoked_certificate_request_first.cmd
- a9_Sign_using_intermediate_CA.cmd
- a10_OCSP_responder_certificate_request_first.cmd
- a11_Sign_using_intermediate_CA_and_responder_extensions.cmd
- a12_First_DH_parameters.cmd
- a13_Now_a_DH_private_key.cmd
- a14_Create_DH_public_key_file.cmd
- a15_dh_cert_req.cmd
- a16_Sign_dh_req.cmd
- a17_gen_dh_client_priv_key.cmd
- a18_gen_dh_client_pub_key.cmd
- a19_dh_clint_cert_req.cmd
- a20_dh_client_cert_sign.cmd
- a21_gen_crl_without_ca.cmd
- a22_add_cert_sha1_server.cmd
- a23_add_cert_sha1_client.cmd
- a24_add_cert_sha1_revoke.cmd
- a25_gen_crl.cmd
- a26_revoke_cert.cmd
- a27_gen_crl_new_one.cmd
- run_ax_bat.cmd
- 从ocsprun.sh整理出来的1个.bat
- ocsprun.cmd
- 从ocspquery.sh整理出来的4个.bat
- query1.cmd
- query2.cmd
- query3.cmd
- query_all.cmd
- 备注
- 生成测试用的根CA证书
- 生成二级CA(中间CA)
- 应用服务器的证书
- 客户端的证书
- 用于吊销演示的证书
- OCSP证书
- DH服务器证书
- DH客户端证书
- 建立本地CA需要的数据库
- 向本地CA数据库中登记服务器证书
- 向本地CA数据库登记客户端证书
- 向本地数据库登记用于吊销演示用的证书
- 产生证书吊销列表
- 吊销一个证书
- 产生(更新)证书吊销列表
- 本地实验需要的文件列表
- END
openssl3.2 - 官方demo学习 - certs
概述
打开官方demos的certs目录, 没看到.c. 茫然了一下.
官方在这个目录中要展示啥呢?
看了readme, 懂了.
原来官方在这个目录中, 要展示如何使用openssl.exe的命令行来操作证书(建立证书, 证书入库, 吊销证书, 查询证书).
官方通过3个.sh来展示证书操作.
mkcerts.sh - 一组操作, 用来建立证书, 证书入库
ocsprun.sh - 建立一个ocsp查询的服务器.
ocspquery.sh - 向ocsp服务器查询证书的有效性.
在cygwin64下, 这3个.sh都好使.
但是, 如果只是运行一下这3个.sh学不到东西. 如果自己有自签名的证书要操作, 还是得一个一个命令的都搞懂才行.
我先将这3个.sh翻译成.bat, 然后每一条命令做一个.bat, 一个一个.bat来运行, 观察运行结果.
整了一遍之后, 再整理.bat, 证书操作基本懂了. 用了2天时间.
如果不整理官方的.sh, 命令行参数中的的文件官方命名很容易将自己看糊涂.
在保证和官方实现一致的前提下, 将文件名改为自己能懂的. 加上注释, 以后就能知道, 每个命令行干啥活.
笔记
官方的实验流程
先运行 mkcerts.sh, 将后续要操作的证书都做出来.
再运行ocsprun.sh, 建立ocsp服务器.
最后运行 ocspquery.sh, 查询证书的有效性.
在mkcerts.sh中, 如果只是运行一次听个响, 27个操作, 一堆操作输出, 根本不能理解这个.sh到底干了啥.
同理, ocspquery.sh有4个操作, 只是运行一次, 啥也不懂.
所以要想理解官方的这3个.sh展示了啥, 需要将这3个.sh中, 每个命令行都自己单独做一次, 每个命令行执行完, 都观察一下有啥输出.
mkcerts.sh - 整理
#!/bin/sh# \file mkcerts.shOPENSSL=./openssl
OPENSSL_CONF=./openssl.cnf
export OPENSSL_CONF# Root CA: create certificate directly
# a1_create_certificate_directly.cmd
# 生成测试用的根证书, 私钥和证书都在一个文件(.pem)中
# %OPENSSL% req -config ca.cnf -x509 -nodes -keyout root_ca.pem -out root_ca.pem -newkey rsa:2048 -days 3650 > opt_log_A1.txt 2>&1
CN="Test Root CA" $OPENSSL req -config ca.cnf -x509 -nodes -keyout root.pem -out root.pem -newkey rsa:2048 -days 3650# Intermediate CA: request first
# a2_Intermediate_CA_request_first.cmd
# 中间CA证书 - 请求
# %OPENSSL% req -config ca.cnf -nodes -keyout inter_ca_priv_key.pem -out inter_ca_req.pem -newkey rsa:2048 > opt_log_A2.txt 2>&1
CN="Test Intermediate CA" $OPENSSL req -config ca.cnf -nodes -keyout intkey.pem -out intreq.pem -newkey rsa:2048# Sign request: CA extensions
# a3_Sign_request_CA_extensions.cmd
# 中间CA证书请求 - 签名
# %OPENSSL% x509 -req -in inter_ca_req.pem -CA root_ca.pem -days 3600 -extfile ca.cnf -extensions v3_ca -CAcreateserial -out inter_ca_req_sign.pem > opt_log_A3.txt 2>&1
$OPENSSL x509 -req -in intreq.pem -CA root.pem -days 3600 -extfile ca.cnf -extensions v3_ca -CAcreateserial -out intca.pem# Server certificate: create request first
# a4_Server_certificate_create_request_first.cmd
# 服务器证书请求
# %OPENSSL% req -config ca.cnf -nodes -keyout server_priv_key.pem -out server_req.pem -newkey rsa:1024 > opt_log_A4.txt 2>&1
CN="Test Server Cert" $OPENSSL req -config ca.cnf -nodes -keyout skey.pem -out req.pem -newkey rsa:1024# Sign request: end entity extensions
# a5_Sign_request_end_entity_extensions.cmd
# 对服务器证书请求 进行 签名
# %OPENSSL% x509 -req -in server_req.pem -CA inter_ca_req_sign.pem -CAkey inter_ca_priv_key.pem -days 3600 -extfile ca.cnf -extensions usr_cert -CAcreateserial -out server_req_sign.pem > opt_log_A5.txt 2>&1
$OPENSSL x509 -req -in req.pem -CA intca.pem -CAkey intkey.pem -days 3600 -extfile ca.cnf -extensions usr_cert -CAcreateserial -out server.pem# Client certificate: request first
# a6_Client_certificate_request_first.cmd
# 客户端证书申请
# %OPENSSL% req -config ca.cnf -nodes -keyout client_priv_key.pem -out client_req.pem -newkey rsa:1024 > opt_log_A6.txt 2>&1
CN="Test Client Cert" $OPENSSL req -config ca.cnf -nodes -keyout ckey.pem -out creq.pem -newkey rsa:1024# Sign using intermediate CA
# a7_Sign_using_intermediate_CA.cmd
# 用中间CA签名客户端证书请求
# %OPENSSL% x509 -req -in client_req.pem -CA inter_ca_req_sign.pem -CAkey inter_ca_priv_key.pem -days 3600 -extfile ca.cnf -extensions usr_cert -CAcreateserial -out client_req_sign.pem > opt_log_A7.txt 2>&1
$OPENSSL x509 -req -in creq.pem -CA intca.pem -CAkey intkey.pem -days 3600 -extfile ca.cnf -extensions usr_cert -CAcreateserial -out client.pem# Revoked certificate: request first
# a8_Revoked_certificate_request_first.cmd
# 吊销证书的申请
# %OPENSSL% req -config ca.cnf -nodes -keyout revoke_priv_key.pem -out revoke_req.pem -newkey rsa:1024 > opt_log_A8.txt 2>&1
CN="Test Revoked Cert" $OPENSSL req -config ca.cnf -nodes -keyout revkey.pem -out rreq.pem -newkey rsa:1024# Sign using intermediate CA
# a9_Sign_using_intermediate_CA.cmd
# 吊销证书申请的签名
# %OPENSSL% x509 -req -in revoke_req.pem -CA inter_ca_req_sign.pem -CAkey inter_ca_priv_key.pem -days 3600 -extfile ca.cnf -extensions usr_cert -CAcreateserial -out revoke_req_sign.pem > opt_log_A9.txt 2>&1
$OPENSSL x509 -req -in rreq.pem -CA intca.pem -CAkey intkey.pem -days 3600 -extfile ca.cnf -extensions usr_cert -CAcreateserial -out rev.pem# OCSP responder certificate: request first
# a10_OCSP_responder_certificate_request_first.cmd
# OCSP证书申请
# %OPENSSL% req -config ca.cnf -nodes -keyout ocsp_priv_key.pem -out ocsp_req.pem -newkey rsa:1024 > opt_log_A10.txt 2>&1
CN="Test OCSP Responder Cert" $OPENSSL req -config ca.cnf -nodes -keyout respkey.pem -out respreq.pem -newkey rsa:1024# Sign using intermediate CA and responder extensions
# a11_Sign_using_intermediate_CA_and_responder_extensions.cmd
# OCSP证书申请的签名
# %OPENSSL% x509 -req -in ocsp_req.pem -CA inter_ca_req_sign.pem -CAkey inter_ca_priv_key.pem -days 3600 -extfile ca.cnf -extensions ocsp_cert -CAcreateserial -out ocsp_req_sign.pem > opt_log_A11.txt 2>&1
$OPENSSL x509 -req -in respreq.pem -CA intca.pem -CAkey intkey.pem -days 3600 -extfile ca.cnf -extensions ocsp_cert -CAcreateserial -out resp.pem# Example creating a PKCS#3 DH certificate.# First DH parameters
# a12_First_DH_parameters.cmd
# 产生DH证书参数文件
# %OPENSSL% genpkey -genparam -algorithm DH -pkeyopt dh_paramgen_prime_len:1024 -out dh_param.pem > opt_log_A12.txt 2>&1
[ -f dhp.pem ] || $OPENSSL genpkey -genparam -algorithm DH -pkeyopt dh_paramgen_prime_len:1024 -out dhp.pem# Now a DH private key
# a13_Now_a_DH_private_key.cmd
# 产生DH证书私钥
# %OPENSSL% genpkey -paramfile dh_param.pem -out dh_priv_key.pem > opt_log_A13.txt 2>&1
$OPENSSL genpkey -paramfile dhp.pem -out dhskey.pem# Create DH public key file
# a14_Create_DH_public_key_file.cmd
# 产生DH证书公钥
# %OPENSSL% pkey -in dh_priv_key.pem -pubout -out dh_pub_key.pem > opt_log_A14.txt 2>&1
$OPENSSL pkey -in dhskey.pem -pubout -out dhspub.pem# Certificate request, key just reuses old one as it is ignored when the request is signed
# a15_dh_cert.cmd
# DH证书申请
# %OPENSSL% req -config ca.cnf -new -key server_priv_key.pem -out dh_req.pem > opt_log_A15.txt 2>&1
CN="Test Server DH Cert" $OPENSSL req -config ca.cnf -new -key skey.pem -out dhsreq.pem# Sign request: end entity DH extensions
# a16_Sign_dh_req.cmd
# DH证书申请的签名
# %OPENSSL% x509 -req -in dh_req.pem -CA root_ca.pem -days 3600 -force_pubkey dh_pub_key.pem -extfile ca.cnf -extensions dh_cert -CAcreateserial -out dh_req_sign.pem > opt_log_A16.txt 2>&1
$OPENSSL x509 -req -in dhsreq.pem -CA root.pem -days 3600 -force_pubkey dhspub.pem -extfile ca.cnf -extensions dh_cert -CAcreateserial -out dhserver.pem# DH client certificate
# a17_gen_dh_client_priv_key.cmd
# 产生DH客户端私钥
# %OPENSSL% genpkey -paramfile dh_param.pem -out dh_client_priv_key.pem > opt_log_A17.txt 2>&1
$OPENSSL genpkey -paramfile dhp.pem -out dhckey.pem# a18_gen_dh_client_pub_key.cmd
# 产生DH客户端公钥
# %OPENSSL% pkey -in dh_client_priv_key.pem -pubout -out dh_client_pub_key.pem > opt_log_A18.txt 2>&1
$OPENSSL pkey -in dhckey.pem -pubout -out dhcpub.pem# a19_dh_clint_cert_req.cmd
# DH客户端证书请求
# %OPENSSL% req -config ca.cnf -new -key server_priv_key.pem -out dh_client_req.pem > opt_log_A19.txt 2>&1
CN="Test Client DH Cert" $OPENSSL req -config ca.cnf -new -key skey.pem -out dhcreq.pem# a20_dh_client_cert_sign.cmd
# 对DH客户端证书请求进行签名
# %OPENSSL% x509 -req -in dh_client_req.pem -CA root_ca.pem -days 3600 -force_pubkey dh_client_pub_key.pem -extfile ca.cnf -extensions dh_cert -CAcreateserial -out dh_client_req_sign.pem > opt_log_A20.txt 2>&1
$OPENSSL x509 -req -in dhcreq.pem -CA root.pem -days 3600 -force_pubkey dhcpub.pem -extfile ca.cnf -extensions dh_cert -CAcreateserial -out dhclient.pem# Examples of CRL generation without the need to use 'ca' to issue certificates.
# Create zero length index file
# a21_gen_crl_without_ca.cmd
# 建立本地CA需要的数据库(产生一个空的index.txt 和一个里面内容为01的crlnum.txt)
>index.txt
# Create initial crl number file
echo 01 >crlnum.txt# Add entries for server and client certs
# a22_add_cert_sha1_server.cmd
# 向本地CA数据库中登记服务器证书(将服务器证书登记信息写入 index.txt)
# %OPENSSL% ca -valid server_req_sign.pem -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 > opt_log_A22.txt 2>&1
$OPENSSL ca -valid server.pem -keyfile root.pem -cert root.pem -config ca.cnf -md sha1# a23_add_cert_sha1_client.cmd
# 向本地CA数据库登记客户端证书(将服务器证书登记信息写入 index.txt)
# %OPENSSL% ca -valid client_req_sign.pem -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 > opt_log_A23.txt 2>&1
$OPENSSL ca -valid client.pem -keyfile root.pem -cert root.pem -config ca.cnf -md sha1# a24_add_cert_sha1_revoke.cmd
# 向本地数据库等级吊销用的证书(将吊销用的证书登记信息吸入 index.txt)
# %OPENSSL% ca -valid revoke_req_sign.pem -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 > opt_log_A24.txt 2>&1
$OPENSSL ca -valid rev.pem -keyfile root.pem -cert root.pem -config ca.cnf -md sha1# Generate a CRL.
# a25_gen_crl.cmd
# 产生证书吊销列表
# %OPENSSL% ca -gencrl -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 -crldays 1 -out crl_cert_list.pem > opt_log_A25.txt 2>&1
$OPENSSL ca -gencrl -keyfile root.pem -cert root.pem -config ca.cnf -md sha1 -crldays 1 -out crl1.pem# Revoke a certificate
# a26_revoke_cert.cmd
# 吊销一个证书
# %OPENSSL% ca -revoke revoke_req_sign.pem -crl_reason superseded -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 > opt_log_A26.txt 2>&1
openssl ca -revoke rev.pem -crl_reason superseded -keyfile root.pem -cert root.pem -config ca.cnf -md sha1# Generate another CRL
# a27_gen_crl_new_one.cmd
# 吊销一个证书后, 要产生新的吊销证书列表供其他应用验证证书是否被吊销.
# 证书吊销列表的名称, 在实际应用中, 应该是一个名字, 这里是实验, 就重新命令一个吊销列表文件的名称, 表示这是在吊销证书后, 新产生的证书吊销列表
# %OPENSSL% ca -gencrl -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 -crldays 1 -out crl_cert_list_1.pem > opt_log_A27.txt 2>&1
$OPENSSL ca -gencrl -keyfile root.pem -cert root.pem -config ca.cnf -md sha1 -crldays 1 -out crl2.pem
ocsprun.sh - 整理
# Example of running an querying OpenSSL test OCSP responder.
# This assumes "mkcerts.sh" or similar has been run to set up the
# necessary file structure.OPENSSL=../../apps/openssl
OPENSSL_CONF=../../apps/openssl.cnf
export OPENSSL_CONF# Run OCSP responder.PORT=8888# %OPENSSL% ocsp -port %PORT% -index index.txt -CA inter_ca_req_sign.pem -rsigner ocsp_req_sign.pem -rkey ocsp_priv_key.pem -rother inter_ca_req_sign.pem
$OPENSSL ocsp -port $PORT -index index.txt -CA intca.pem -rsigner resp.pem -rkey respkey.pem -rother intca.pem $*
ocspquery.sh - 整理
# Example querying OpenSSL test responder. Assumes ocsprun.sh has been
# called.OPENSSL=../../apps/openssl
OPENSSL_CONF=../../apps/openssl.cnf
export OPENSSL_CONF# Send responder queries for each certificate.echo "Requesting OCSP status for each certificate"
# query1.cmd
# %OPENSSL% ocsp -issuer inter_ca_req_sign.pem -cert client_req_sign.pem -CAfile root_ca.pem -url http://127.0.0.1:8888/ > opt_log_query1.txt 2>&1
$OPENSSL ocsp -issuer intca.pem -cert client.pem -CAfile root.pem -url http://127.0.0.1:8888/# query2.cmd
# %OPENSSL% ocsp -issuer inter_ca_req_sign.pem -cert server_req_sign.pem -CAfile root_ca.pem -url http://127.0.0.1:8888/ > opt_log_query2.txt 2>&1
$OPENSSL ocsp -issuer intca.pem -cert server.pem -CAfile root.pem -url http://127.0.0.1:8888/#query3.cmd
# %OPENSSL% ocsp -issuer inter_ca_req_sign.pem -cert revoke_req_sign.pem -CAfile root_ca.pem -url http://127.0.0.1:8888/ > opt_log_query3.txt 2>&1
$OPENSSL ocsp -issuer intca.pem -cert rev.pem -CAfile root.pem -url http://127.0.0.1:8888/# One query for all three certificates.
echo "Requesting OCSP status for three certificates in one request"
# %OPENSSL% ocsp -issuer inter_ca_req_sign.pem -cert client_req_sign.pem -cert server_req_sign.pem -cert revoke_req_sign.pem -CAfile root_ca.pem -url http://127.0.0.1:8888/ > opt_log_query_all.txt 2>&1
$OPENSSL ocsp -issuer intca.pem -cert client.pem -cert server.pem -cert rev.pem -CAfile root.pem -url http://127.0.0.1:8888/
从mkcerts.sh整理出来的27个.bat
a1_create_certificate_directly.cmd
@echo off
rem \file a1_create_certificate_directly.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Root CA: create certificate directly
set CN="Test Root CA"rem # 生成测试用的根证书, 私钥和证书都在一个文件(.pem)中%OPENSSL% req -config ca.cnf -x509 -nodes -keyout root_ca.pem -out root_ca.pem -newkey rsa:2048 -days 3650 > opt_log_A1.txt 2>&1
a2_Intermediate_CA_request_first.cmd
@echo off
rem \file a2_Intermediate_CA_request_first.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Intermediate CA: request first
set CN="Test Intermediate CA"rem # 中间CA证书 - 请求%OPENSSL% req -config ca.cnf -nodes -keyout inter_ca_priv_key.pem -out inter_ca_req.pem -newkey rsa:2048 > opt_log_A2.txt 2>&1
a3_Sign_request_CA_extensions.cmd
@echo off
rem \file a3_Sign_request_CA_extensions.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Sign request: CA extensions
rem # 中间CA证书请求 - 签名%OPENSSL% x509 -req -in inter_ca_req.pem -CA root_ca.pem -days 3600 -extfile ca.cnf -extensions v3_ca -CAcreateserial -out inter_ca_req_sign.pem > opt_log_A3.txt 2>&1
a4_Server_certificate_create_request_first.cmd
@echo offrem \file a4_Server_certificate_create_request_first.cmdset OPENSSL=.\opensslset OPENSSL_CONF=.\openssl.cnfrem Server certificate: create request firstset CN="Test Server Cert"rem # 服务器证书请求rem # 除了根CA, 其他CA/服务器的私钥和证书都要分开, 不能是一个.pem%OPENSSL% req -config ca.cnf -nodes -keyout server_priv_key.pem -out server_req.pem -newkey rsa:1024 > opt_log_A4.txt 2>&1
a5_Sign_request_end_entity_extensions.cmd
@echo off
rem \file a5_Sign_request_end_entity_extensions.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Sign request: end entity extensions
rem # 对服务器证书请求 进行 签名%OPENSSL% x509 -req -in server_req.pem -CA inter_ca_req_sign.pem -CAkey inter_ca_priv_key.pem -days 3600 ^
-extfile ca.cnf -extensions usr_cert -CAcreateserial -out server_req_sign.pem > opt_log_A5.txt 2>&1
a6_Client_certificate_request_first.cmd
@echo off
rem \file a6_Client_certificate_request_first.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnf
rem echo OPENSSL_CONF = %OPENSSL_CONF%rem Client certificate: request first
set CN="Test Client Cert"rem # 客户端证书申请%OPENSSL% req -config ca.cnf -nodes -keyout client_priv_key.pem -out client_req.pem -newkey rsa:1024 > opt_log_A6.txt 2>&1
a7_Sign_using_intermediate_CA.cmd
@echo off
rem \file a7_Sign_using_intermediate_CA.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Sign using intermediate CA
rem # 用中间CA签名客户端证书请求%OPENSSL% x509 -req -in client_req.pem -CA inter_ca_req_sign.pem -CAkey inter_ca_priv_key.pem -days 3600 -extfile ca.cnf -extensions usr_cert -CAcreateserial -out client_req_sign.pem > opt_log_A7.txt 2>&1
a8_Revoked_certificate_request_first.cmd
@echo off
rem \file a8_Revoked_certificate_request_first.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Revoked certificate: request first
set CN="Test Revoked Cert"rem # 吊销证书的申请%OPENSSL% req -config ca.cnf -nodes -keyout revoke_priv_key.pem -out revoke_req.pem -newkey rsa:1024 > opt_log_A8.txt 2>&1
a9_Sign_using_intermediate_CA.cmd
@echo off
rem \file a9_Sign_using_intermediate_CA.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Sign using intermediate CA
rem # 吊销证书申请的签名%OPENSSL% x509 -req -in revoke_req.pem -CA inter_ca_req_sign.pem -CAkey inter_ca_priv_key.pem -days 3600 -extfile ca.cnf -extensions usr_cert -CAcreateserial -out revoke_req_sign.pem > opt_log_A9.txt 2>&1
a10_OCSP_responder_certificate_request_first.cmd
@echo off
rem \file a10_OCSP_responder_certificate_request_first.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem OCSP responder certificate: request first
set CN="Test OCSP Responder Cert"rem # OCSP证书申请%OPENSSL% req -config ca.cnf -nodes -keyout ocsp_priv_key.pem -out ocsp_req.pem -newkey rsa:1024 > opt_log_A10.txt 2>&1
a11_Sign_using_intermediate_CA_and_responder_extensions.cmd
@echo off
rem \file a11_Sign_using_intermediate_CA_and_responder_extensions.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Sign using intermediate CA and responder extensions
rem # OCSP证书申请的签名%OPENSSL% x509 -req -in ocsp_req.pem -CA inter_ca_req_sign.pem -CAkey inter_ca_priv_key.pem -days 3600 -extfile ca.cnf -extensions ocsp_cert -CAcreateserial -out ocsp_req_sign.pem > opt_log_A11.txt 2>&1
a12_First_DH_parameters.cmd
@echo off
rem \file a12_First_DH_parameters.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem echo OPENSSL_CONF = %OPENSSL_CONF%
rem First DH parametersdel /Q .\dh_param.pem > nul 2>&1
rem # 产生DH证书参数文件%OPENSSL% genpkey -genparam -algorithm DH -pkeyopt dh_paramgen_prime_len:1024 -out dh_param.pem > opt_log_A12.txt 2>&1
a13_Now_a_DH_private_key.cmd
@echo off
rem \file a13_Now_a_DH_private_key.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Now a DH private key
rem # 产生DH证书私钥%OPENSSL% genpkey -paramfile dh_param.pem -out dh_priv_key.pem > opt_log_A13.txt 2>&1
a14_Create_DH_public_key_file.cmd
@echo off
rem \file a14_Create_DH_public_key_file.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Create DH public key file
rem # 产生DH证书公钥%OPENSSL% pkey -in dh_priv_key.pem -pubout -out dh_pub_key.pem > opt_log_A14.txt 2>&1
a15_dh_cert_req.cmd
@echo off
rem \file a15_dh_cert_req.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Certificate request, key just reuses old one as it is ignored when the request is signedset CN="Test Server DH Cert"rem 使用的key必须是服务器证书的私钥, 而不是dh证书的私钥, 否则报错rem # DH证书申请%OPENSSL% req -config ca.cnf -new -key server_priv_key.pem -out dh_req.pem > opt_log_A15.txt 2>&1
a16_Sign_dh_req.cmd
@echo off
rem \file a16_Sign_dh_req.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Sign request: end entity DH extensions
rem # DH证书申请的签名rem 使用的key必须是服务器证书的私钥, 而不是dh证书的私钥, 否则报错%OPENSSL% x509 -req -in dh_req.pem -CA root_ca.pem -days 3600 -force_pubkey dh_pub_key.pem -extfile ca.cnf -extensions dh_cert -CAcreateserial -out dh_req_sign.pem > opt_log_A16.txt 2>&1
a17_gen_dh_client_priv_key.cmd
@echo off
rem \file a17_gen_dh_client_priv_key.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem DH client certificate
rem # 产生DH客户端私钥%OPENSSL% genpkey -paramfile dh_param.pem -out dh_client_priv_key.pem > opt_log_A17.txt 2>&1
a18_gen_dh_client_pub_key.cmd
@echo off
rem \file a18_gen_dh_client_pub_key.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem DH client certificate
rem # 产生DH客户端公钥%OPENSSL% pkey -in dh_client_priv_key.pem -pubout -out dh_client_pub_key.pem > opt_log_A18.txt 2>&1
a19_dh_clint_cert_req.cmd
@echo off
rem \file a19_dh_clint_cert_req.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem echo OPENSSL_CONF = %OPENSSL_CONF%
rem DH client certificateset CN="Test Client DH Cert"rem # DH客户端证书请求%OPENSSL% req -config ca.cnf -new -key server_priv_key.pem -out dh_client_req.pem > opt_log_A19.txt 2>&1
a20_dh_client_cert_sign.cmd
@echo off
rem \file a20_dh_client_cert_sign.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem DH client certificate
rem # 对DH客户端证书请求进行签名%OPENSSL% x509 -req -in dh_client_req.pem -CA root_ca.pem -days 3600 -force_pubkey dh_client_pub_key.pem -extfile ca.cnf -extensions dh_cert -CAcreateserial -out dh_client_req_sign.pem > opt_log_A20.txt 2>&1
a21_gen_crl_without_ca.cmd
@echo off
rem \file a21_gen_crl_without_ca.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem # Examples of CRL generation without the need to use 'ca' to issue certificates.
rem # 建立本地CA需要的数据库(产生一个空的index.txt 和一个里面内容为01的crlnum.txt)rem # Create zero length index filecd. > index.txtrem # Create initial crl number fileecho 01 > crlnum.txt
a22_add_cert_sha1_server.cmd
@echo offrem \file a22_add_cert_sha1_server.cmdset OPENSSL=.\opensslset OPENSSL_CONF=.\openssl.cnfrem Add entries for server and client certsrem # 向本地CA数据库中登记服务器证书(将服务器证书登记信息写入 index.txt)%OPENSSL% ca -valid server_req_sign.pem -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 > opt_log_A22.txt 2>&1
a23_add_cert_sha1_client.cmd
@echo off
rem \file a23_add_cert_sha1_client.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Add entries for server and client certs
rem set CN="Test Client DH Cert"
rem # 向本地CA数据库登记客户端证书(将服务器证书登记信息写入 index.txt)%OPENSSL% ca -valid client_req_sign.pem -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 > opt_log_A23.txt 2>&1
a24_add_cert_sha1_revoke.cmd
@echo off
rem \file a24_add_cert_sha1_revoke.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Add entries for server and client certs
rem set CN="Test Client DH Cert"
rem # 向本地数据库等级吊销用的证书(将吊销用的证书登记信息写入 index.txt)%OPENSSL% ca -valid revoke_req_sign.pem -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 > opt_log_A24.txt 2>&1
a25_gen_crl.cmd
@echo off
rem \file a25_gen_crl.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Add entries for server and client certs
rem set CN="Test Client DH Cert"
rem # 产生证书吊销列表%OPENSSL% ca -gencrl -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 -crldays 1 -out crl_cert_list.pem > opt_log_A25.txt 2>&1
a26_revoke_cert.cmd
@echo off
rem \file a26_revoke_cert.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Revoke a certificate
rem set CN="Test Client DH Cert"
rem # 吊销一个证书%OPENSSL% ca -revoke revoke_req_sign.pem -crl_reason superseded -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 > opt_log_A26.txt 2>&1
a27_gen_crl_new_one.cmd
@echo off
rem \file a25_gen_crl.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnfrem Add entries for server and client certsrem # 吊销一个证书后, 要产生新的吊销证书列表供其他应用验证证书是否被吊销.rem # 证书吊销列表的名称, 在实际应用中, 应该是一个名字, 这里是实验, 就重新命令一个吊销列表文件的名称, 表示这是在吊销证书后, 新产生的证书吊销列表%OPENSSL% ca -gencrl -keyfile root_ca.pem -cert root_ca.pem -config ca.cnf -md sha1 -crldays 1 -out crl_cert_list_1.pem > opt_log_A27.txt 2>&1
run_ax_bat.cmd
模拟mkcerts.sh, 将做的27个单独的.bat一起都调用了.
call a1_create_certificate_directly.cmd
call a2_Intermediate_CA_request_first.cmd
call a3_Sign_request_CA_extensions.cmd
call a4_Server_certificate_create_request_first.cmd
call a5_Sign_request_end_entity_extensions.cmd
call a6_Client_certificate_request_first.cmd
call a7_Sign_using_intermediate_CA.cmd
call a8_Revoked_certificate_request_first.cmd
call a9_Sign_using_intermediate_CA.cmd
call a10_OCSP_responder_certificate_request_first.cmd
call a11_Sign_using_intermediate_CA_and_responder_extensions.cmd
call a12_First_DH_parameters.cmd
call a13_Now_a_DH_private_key.cmd
call a14_Create_DH_public_key_file.cmd
call a15_dh_cert_req.cmd
call a16_Sign_dh_req.cmd
call a17_gen_dh_client_priv_key.cmd
call a18_gen_dh_client_pub_key.cmd
call a19_dh_clint_cert_req.cmd
call a20_dh_client_cert_sign.cmd
call a21_gen_crl_without_ca.cmd
call a22_add_cert_sha1_server.cmd
call a23_add_cert_sha1_client.cmd
call a24_add_cert_sha1_revoke.cmd
call a25_gen_crl.cmd
call a26_revoke_cert.cmd
call a27_gen_crl_new_one.cmd
ECHO END
pause
从ocsprun.sh整理出来的1个.bat
ocsprun.cmd
@echo offrem \file ocsprun.cmdrem # Example of running an querying OpenSSL test OCSP responder.
rem # This assumes "mkcerts.sh" or similar has been run to set up the
rem # necessary file structure.set OPENSSL= .\openssl
set OPENSSL_CONF=.\openssl.cnfrem # Run OCSP responder.set PORT=8888%OPENSSL% ocsp -port %PORT% -index index.txt -CA inter_ca_req_sign.pem -rsigner ocsp_req_sign.pem -rkey ocsp_priv_key.pem -rother inter_ca_req_sign.pem
从ocspquery.sh整理出来的4个.bat
query1.cmd
@echo off
rem \file query1.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnf
rem echo OPENSSL_CONF = %OPENSSL_CONF%rem Revoke a certificate
rem set CN="Test Client DH Cert"@echo "Requesting OCSP status for each certificate"
%OPENSSL% ocsp -issuer inter_ca_req_sign.pem -cert client_req_sign.pem -CAfile root_ca.pem -url http://127.0.0.1:8888/ > opt_log_query1.txt 2>&1
query2.cmd
@echo off
rem \file query2.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnf
rem echo OPENSSL_CONF = %OPENSSL_CONF%rem Revoke a certificate
rem set CN="Test Client DH Cert"@echo "Requesting OCSP status for each certificate"
%OPENSSL% ocsp -issuer inter_ca_req_sign.pem -cert server_req_sign.pem -CAfile root_ca.pem -url http://127.0.0.1:8888/ > opt_log_query2.txt 2>&1
query3.cmd
@echo off
rem \file query3.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnf
rem echo OPENSSL_CONF = %OPENSSL_CONF%rem Revoke a certificate
rem set CN="Test Client DH Cert"@echo "Requesting OCSP status for each certificate"
%OPENSSL% ocsp -issuer inter_ca_req_sign.pem -cert revoke_req_sign.pem -CAfile root_ca.pem -url http://127.0.0.1:8888/ > opt_log_query3.txt 2>&1
query_all.cmd
@echo off
rem \file query3.cmdset OPENSSL=.\openssl
set OPENSSL_CONF=.\openssl.cnf
rem echo OPENSSL_CONF = %OPENSSL_CONF%rem Revoke a certificate
rem set CN="Test Client DH Cert"@echo "Requesting OCSP status for three certificates in one request"
%OPENSSL% ocsp -issuer inter_ca_req_sign.pem -cert client_req_sign.pem -cert server_req_sign.pem -cert revoke_req_sign.pem -CAfile root_ca.pem -url http://127.0.0.1:8888/ > opt_log_query_all.txt 2>&1
备注
即使是发一个证书出来, 一个openssl.exe命令行也搞不定的.
将官方证书操作分类来备注.
生成测试用的根CA证书
a1_create_certificate_directly.cmd 这个一步搞定, 生成了根CA的证书和私钥.
生成二级CA(中间CA)
a2_Intermediate_CA_request_first.cmd 中间CA证书 - 请求, 生成了中间CA的私钥和请求
a3_Sign_request_CA_extensions.cmd 中间CA证书请求 - 签名, 将请求签名, 生成最终的中间CA证书
应用服务器的证书
a4_Server_certificate_create_request_first.cmd 服务器证书请求, 生成服务器证书私钥和请求.
a5_Sign_request_end_entity_extensions.cmd 对服务器证书请求 进行 签名, 得到最终可用的服务器证书
客户端的证书
a6_Client_certificate_request_first.cmd 客户端证书申请, 生成客户端证书私钥和请求
a7_Sign_using_intermediate_CA.cmd 用中间CA签名客户端证书请求, 生成最终可用的客户端证书.
用于吊销演示的证书
a8_Revoked_certificate_request_first.cmd 用于吊销证书的申请, 生成私钥和申请
a9_Sign_using_intermediate_CA.cmd 吊销证书申请的签名, 得到最终用于吊销演示操作的证书.
OCSP证书
a10_OCSP_responder_certificate_request_first.cmd OCSP证书申请, 得到私钥和申请
a11_Sign_using_intermediate_CA_and_responder_extensions.cmd OCSP证书申请的签名, 得到最终可用的OCSP证书
DH服务器证书
a12_First_DH_parameters.cmd 产生DH证书参数文件
a13_Now_a_DH_private_key.cmd 产生DH证书私钥
a14_Create_DH_public_key_file.cmd 产生DH证书公钥
a15_dh_cert.cmd 产生DH证书申请
a16_Sign_dh_req.cmd DH证书申请的签名, 得到最终可用的DH服务器证书
DH客户端证书
a17_gen_dh_client_priv_key.cmd 产生DH客户端私钥
a18_gen_dh_client_pub_key.cmd 产生DH客户端公钥
a19_dh_clint_cert_req.cmd DH客户端证书请求
a20_dh_client_cert_sign.cmd 对DH客户端证书请求进行签名, 得到最终可用的DH客户端证书
建立本地CA需要的数据库
a21_gen_crl_without_ca.cmd 建立本地CA需要的数据库(产生一个空的index.txt 和一个里面内容为01的crlnum.txt)
向本地CA数据库中登记服务器证书
a22_add_cert_sha1_server.cmd 向本地CA数据库中登记服务器证书(将服务器证书登记信息写入 index.txt)
向本地CA数据库登记客户端证书
a23_add_cert_sha1_client.cmd 向本地CA数据库登记客户端证书(将服务器证书登记信息写入 index.txt)
向本地数据库登记用于吊销演示用的证书
a24_add_cert_sha1_revoke.cmd 向本地数据库等级吊销用的证书(将吊销用的证书登记信息吸入 index.txt)
产生证书吊销列表
a25_gen_crl.cmd 产生证书吊销列表(新建立了N张证书后, 都要登记入库, 然后重新生成证书吊销列表).
吊销一个证书
a26_revoke_cert.cmd 吊销证书后, 这张证书就废了.
产生(更新)证书吊销列表
a27_gen_crl_new_one.cmd 吊销一个证书后, 要产生新的吊销证书列表供其他应用验证证书是否被吊销. 证书吊销列表的名称, 在实际应用中, 应该是同一个名字, 这里是实验, 就重新命令一个吊销列表文件的名称, 表示这是在吊销证书后, 新产生的证书吊销列表
本地实验需要的文件列表
tree /A /F
D:.a10_OCSP_responder_certificate_request_first.cmda11_Sign_using_intermediate_CA_and_responder_extensions.cmda12_First_DH_parameters.cmda13_Now_a_DH_private_key.cmda14_Create_DH_public_key_file.cmda15_dh_cert_req.cmda16_Sign_dh_req.cmda17_gen_dh_client_priv_key.cmda18_gen_dh_client_pub_key.cmda19_dh_clint_cert_req.cmda1_create_certificate_directly.cmda20_dh_client_cert_sign.cmda21_gen_crl_without_ca.cmda22_add_cert_sha1_server.cmda23_add_cert_sha1_client.cmda24_add_cert_sha1_revoke.cmda25_gen_crl.cmda26_revoke_cert.cmda27_gen_crl_new_one.cmda2_Intermediate_CA_request_first.cmda3_Sign_request_CA_extensions.cmda4_Server_certificate_create_request_first.cmda5_Sign_request_end_entity_extensions.cmda6_Client_certificate_request_first.cmda7_Sign_using_intermediate_CA.cmda8_Revoked_certificate_request_first.cmda9_Sign_using_intermediate_CA.cmdca.cnflibcrypto-3-x64.dlllibssl-3-x64.dllmkcerts.shocspquery.shocsprun.cmdocsprun.shopenssl.cnfopenssl.exequery1.cmdquery2.cmdquery3.cmdquery_all.cmdREADME.txtrun_ax_bat.cmd
END
相关文章:
openssl3.2 - 官方demo学习 - certs
文章目录 openssl3.2 - 官方demo学习 - certs概述笔记官方的实验流程mkcerts.sh - 整理ocsprun.sh - 整理ocspquery.sh - 整理从mkcerts.sh整理出来的27个.bata1_create_certificate_directly.cmda2_Intermediate_CA_request_first.cmda3_Sign_request_CA_extensions.cmda4_Ser…...
Datawhale 大模型基础理论 Day1 引言
开源链接如下:https://github.com/datawhalechina/so-large-lm/blob/main/docs/content/ch01.md 语言模型的概念:即能够赋予每个有意义的词(token)以一定的概率的一个函数的集合。 语言模型可以被用来评估输入的质量,…...
HarmonyOS应用开发学习笔记 UIAbility组件与UI的数据同步 EventHub、globalThis
1、 HarmoryOS Ability页面的生命周期 2、 Component自定义组件 3、HarmonyOS 应用开发学习笔记 ets组件生命周期 4、HarmonyOS 应用开发学习笔记 ets组件样式定义 Styles装饰器:定义组件重用样式 Extend装饰器:定义扩展组件样式 5、HarmonyOS 应用开发…...
leetcode每日一题44
130. 被围绕的区域 图论 dfs/bfs dfs代码框架 void dfs(参数) {if (终止条件) {存放结果;return;}for (选择:本节点所连接的其他节点) {处理节点;dfs(图,选择的节点); // 递归回溯,撤销处理结果} }思路:本题要求找到被x围绕的陆…...
idea写sql语句快捷键提醒,mapper注解开发,mybatis
第一步:注入SQL语言 1.显示上下文操作(没有这个选项的话就选中sql然后直接alt回车快捷键)2.注入语言或引用 3.mysql 第二步:配置MySQL数据库连接 1.首先点击侧边的数据库,再点击上面的加号 2.点击数据源ÿ…...
002 Golang-channel-practice
第二题: 创建一个生产器和接收器,再建立一个无缓冲的channel。生产器负责把数据放进管道里,接收器负责把管道里面的数据打印出来。这里我们开5个协程把数据打印出来。 直接上代码! package mainimport ("fmt" )func …...
MFC为对话框资源添加类
VC6新建一个对话框类型的工程; 建立之后资源中默认有2个对话框,一个是主对话框,About这个是默认建立的关于版权信息的; 然后主对话框有对应的.h和.cpp文件;可以在其中进行编程; 默认建立的有一个 关于 对话框; 在资源中新插入一个对话框,IDD_DIALOG1是对话框ID; 新加…...
SpringBoot新手入门完整教程和项目示例
文章目录 SpringBoot新手入门完整教程和项目示例1、SpringBoot简介2、Spring Boot的核心功能?(优点)3、SpringBoot与SpringMVC 的区别?4、构建SpringBoot项目4.1、在官网自动生成下载spring boot项目4.2、手动使用maven创建Spring…...
PHP留言板实现
完整教程PHP留言板 登陆界面 一个初学者的留言板(登录和注册)_php留言板登录注册-CSDN博客 留言板功能介绍 百度网盘 请输入提取码 进入百度网盘后,输入提取码:knxt,即可下载项目素材和游客访问页面的模板文件。 &…...
ssm+vue的物流配送人员车辆调度管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项项目。
演示视频: ssmvue的物流配送人员车辆调度管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&…...
day1·算法-双指针
今天是第一天,GUNDOM带你学算法,跟上我的节奏吗,一起闪击蓝桥杯! 正文展开,今天先上点小菜供大家想用,如有错误或者建议直接放评论区,我会一个一个仔细查看的哦。 双方指针问题一般是在数组中…...
在vue中,切换页面之后如何关闭定时器
在vue中,使用了element-ui的框架,点击左侧切换内部页面。 有些页面使用了定时器,在其换到其他页面的时候,希望能够关闭这些定期请求和复杂操作。 那么,切换页面之后如何关闭定时器?vue的创建流程中没找到能…...
观测云产品更新 | 日志、场景仪表板、监控器等
观测云更新 用户访问监测 (RUM ) 公网 Dataway 支持 ip 转换成地理位置信息。 日志 > 查看器详情页 1、新增 BPF 网络日志采集及日志详情页,支持 Json 格式转化; 2、上述 1 中的日志详情页中新增可读的展示模式,…...
【JupyterLab】在 conda 虚拟环境中 JupyterLab 的安装与使用
【JupyterLab】在 conda 虚拟环境中 JupyterLab 的安装与使用 1 JupyterLab 介绍2 安装2.1 Jupyter Kernel 与 conda 虚拟环境 3 使用3.1 安装中文语言包(Optional)3.2 启动3.3 常用快捷键3.3.1 命令模式下 3.4 远程访问个人计算机3.4.1 局域网下 1 JupyterLab 介绍 官方文档: …...
HTML--JavaScript--引入方式
啊哈~~~基础三剑看到第三剑,JavaScript HTML用于控制网页结构 CSS用于控制网页的外观 JavaScript用于控制网页的行为 JavaScript引入方式 引入的三种方式: 外部JavaScript 内部JavaScript 元素事件JavaScript 引入外部JavaScript 一般情况下网页最好…...
第28关 k8s监控实战之Prometheus(七)
大家好,我是博哥爱运维。 今天继续Prometheus的课程,在之前的几节课里面,我带大家认识并部署了prometheus服务,并将一些服务做好了监控,同时通过grafana展示监控数据图表出来。对于怎么使用promql语法,也教…...
SSC | Blue Prism报告:2024年智能自动化(IA)7大趋势预测
近日,RPA行业领导者SS&C | Blue Prism发布《2024智能自动化(IA)趋势与预测》报告。报告中提到,智能自动化(IA)与流程管理的有效融合,是实现数字化转型成功的核心。采用业务流程管理…...
el-tree定义左边箭头,包括下级出现连线
效果图: 代码: <template><div class"agency-wrap"><el-treeclass"filter-tree":data"detailList":props"defaultProps"default-expand-allnode-click"onClickNode":filter-node-me…...
C++ 多线程顺序打印
打印要求: 三个打印线程顺序进行。 线程要求如下: 线程A:打印A 线程B:打印B 线程C:打印C 打印结果: A B C A B C A B C A B C A B C 法一:需要锁和共享变量 #include <iostream>…...
x-cmd pkg | duf - df 命令的现代化替代品
目录 简介用户首次快速实验指南技术特点竞品和相关作品进一步探索 简介 Duf (Disk Usage/Free Utility)是一个磁盘分析工具。其直观的输出和多样化的自定义选项,帮助用户更好地管理和优化存储资源。 用户首次快速实验指南 使用 x duf 即可自…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
