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 即可自…...
202406读书笔记|《沉睡的线条世界》——翻山越岭,只为与你分享点滴的快乐
《沉睡的线条世界》登登登Dn绘著,简简单单的小画,简简单单的线条,简简单单的语言,温馨又有一点暖心。 怎样的你都好,做最真实的自己。 部分节选如下: 愿你我永远有热情,永远能为生活的每一个小惊…...
[论文阅读]4DRadarSLAM: A 4D Imaging Radar SLAM System for Large-scale Environments
目录 1.摘要和引言: 2. 系统框架: 2.1 前端: 2.2 回环检测: 2.3 后端: 3.实验和分析: 4.结论 1.摘要和引言: 这篇论文介绍了一种名为“4DRadarSLAM”的新型4D成像雷达SLAM系统࿰…...
Python: vars()详细解释
vars() 是一个内置函数,用于返回一个对象的 __dict__ 属性。它接受一个对象作为参数,如果省略参数,它返回当前局部作用域的字典。 具体而言,vars() 的行为取决于参数的类型: 1. 没有参数: 如果没有提供参…...
2024年1月15日Arxiv最热论文推荐:斯坦福LLM精准微调新框架、GPT不愿承认回答错误、速度快15倍的3D全景分割新突破
本文整理了今日发表在ArXiv上的AI论文中最热门的TOP5。 论文解读、论文热度排序、论文标签、中文标题、推荐理由和论文摘要均由赛博马良平台上的智能体 「AI论文解读达人」提供。 如需查看其他热门论文,欢迎移步赛博马良 ^_^ TOP1 APAR: LLMs Can Do Auto-Paral…...
1.5 面试经典150题 - 轮转数组
轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 注意:本题需要原地操作 class Solution(object):def rotate(self, nums, k):""":type nums: List[int]:type k: int:rtype: None Do not…...
Linux的基础命令学习
pwd - 显示当前工作目录的路径 cd - 切换工作目录,ls - 列出当前目录的文件和子目录 rm - 删除文件或目录 mkdir - 创建新目录 rm - 删除目录 nano/vi - 编辑文本文件,按Enter键进入 之后按i键就可以进入写入模式 之后输入文字以后按Esc键与:q就不保…...
个人数据备份方案分享(源自一次悲惨经历)
文章目录 1 起源2 备份架构2.1 生活照片2.2 生活录音2.3 微信文件2.4 工作文件2.5 笔记、影视音乐、书籍 3 使用工具介绍3.1 小米云服务3.2 中国移动云盘3.3 小米移动硬盘(1T)3.4 FreeFileSync 4 总结 1 起源 本文的灵感源于我个人的一次不幸遭遇&#…...
SpringBoot教程(八) | SpringBoot统一结果封装
SpringBoot教程(八) | SpringBoot统一结果封装 经过了前面几篇文章,SpringBoot中MVC相关的配置其实都已经差不多了,接下来就可以完全进入接口开发阶段了。前面我们写过几个接口,虽然都加了RestController注解,相当于统一了我们的…...
Ubuntu 22.04 安装Fail2Ban
Fail2Ban是一种用来防止暴力破解的工具,一般要和iptables配合使用。其原理是读取系统日志,并通过正则表达式匹配,监控IP在一段时间内的登录尝试、身份验证失败日志等并进行计数。超过阈值则进行IP封禁,过一段时间后再解封。 总的…...
Ubuntu 22.04 编译安装 Qt mysql驱动
参考自 Ubuntu20.04.3 QT5.15.2 MySQL驱动编译 Ubuntu 18.04 编译安装 Qt mysql驱动 下边这篇博客不是主要参考的, 但是似乎解决了我的难题(找不到 libmysqlclient.so) ubuntu18.04.2 LTS 系统关于Qt5.12.3 无法加载mysql驱动,需要重新编译MYSQL数据库驱动的问题以…...
涂料做哪个网站好/全网推广网站
三个月前刚毕业的时候,听到存储过程就头疼。写一个SQL存储过程,建立一个表USER 字段是姓名,年龄,职位,权限,然后向里面插入6条数据,然后查询出年龄大于18的所有信息。下面是答案:复制…...
企业画册设计图片/企业网站优化技巧
Redis服务器是典型的一对多服务器程序:一个服务器可以和多个客户端建立网络连接,Redis使用单线程单进程的方式来处理命令请求(通过IO多路转接实现),并和多个服务端进行网络通信。 每个和服务端进行连接的客户端&#x…...
网站制作要多长时间/百度知道网页版
Redis 三主三从集群搭建方式一:源码安装下载源码包:wget http://download.redis.io/releases/redis-3.2.10.tar.gz解压并进入目录:tar xf redis-3.2.10 && cd redis-3.2.10makeredis命令做软连接ln -s /root/redis-3.2.10/src/* /usr…...
成都住建局官网登陆/上海seo招聘
现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的。 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JMS,我们这篇博文介绍一…...
自己电脑做服务器上传网站 需要备案吗/seo如何进行优化
转自:http://www.cnblogs.com/wrmfw/archive/2012/01/21/2328534.html 你发现快要过年了,于是想给你的女朋友买一件毛衣,你打开了www.taobao.com。这时你的浏览器首先查询DNS服务器,将 www.taobao.com转换成ip地址。不过首先你会发…...
广州市网站公司/注册网站的免费网址
目前,AMD 驱动程序使用 LLVM 作为着色器编译器。而 Mesa 则是一个开源的 LLVM 的替代品。因此,在这种情况下,Valve 希望支持 AMD 显卡以提高 Linux 游戏在各种 Linux 发行版上的性能。-- Ankush Das(作者)Steam 寻求公…...