Shell脚本:一键申请多个证书
Last Updated on 2024年6月1日 by hangzi
一、Shell脚本实例
1、功能介绍:一键申请多个证书
2、完整脚本, 内容如下:
#!/bin/bash
#
#********************************************************************
#
# 功能描述:一键申请多个证书
#
#********************************************************************
. /etc/init.d/functions
CERT_INFO=(
#/O= 表示 "Organization",即组织名,这里是 "xx" ,/CN= 表示 "Common Name",通常用于表示个人姓名或服务器的域名。
[00]="/O=xx/CN=xx"
[01]="cakey.pem"
[02]="cacert.pem"
[03]=2048
[04]=3650
[05]=0
# /C= 表示 "Country",即国家,/ST= 表示 "State",即州,/L= 表示 "Locality",即城市,/O= 表示 "Organization",即组织名,/CN= 表示 "Common Name",通常用于表示个人姓名或服务器的域名。
[10]="/C=CN/ST=guangdong/L=guangzhou/O=xxx/CN=master.xxx.com"
[11]="master.key"
[12]="master.crt"
[13]=2048
[14]=365
[15]=1
[16]="master.csr"
# /C= 表示 "Country",即国家,/ST= 表示 "State",即州,/L= 表示 "Locality",即城市,/O= 表示 "Organization",即组织名,/CN= 表示 "Common Name",通常用于表示个人姓名或服务器的域名。
[20]="/C=CN/ST=guangdong/L=guangzhou/O=xxx/CN=slave.xxx.com"
[21]="slave.key"
[22]="slave.crt"
[23]=2048
[24]=365
[25]=2
[26]="slave.csr")
COLOR="echo -e \\E[1;32m"
END="\\E[0m"
DIR=/data
cd $DIR
for i in {0..2}; do
if [ $i -eq 0 ]; then
openssl req -x509 -newkey rsa:${CERT_INFO[${i}3]} -subj
${CERT_INFO[${i}0]} \
-set_serial ${CERT_INFO[${i}5]} -keyout ${CERT_INFO[${i}1]} -nodes -
days ${CERT_INFO[${i}4]} \
-out ${CERT_INFO[${i}2]} &>/dev/null
else
openssl req -newkey rsa:${CERT_INFO[${i}3]} -nodes -subj
${CERT_INFO[${i}0]} \
-keyout ${CERT_INFO[${i}1]} -out ${CERT_INFO[${i}6]} &>/dev/null
openssl x509 -req -in ${CERT_INFO[${i}6]} -CA ${CERT_INFO[02]} -CAkey
${CERT_INFO[01]} \
-set_serial ${CERT_INFO[${i}5]} -days ${CERT_INFO[${i}4]} -out
${CERT_INFO[${i}2]} &>/dev/null
fi
$COLOR"**************************************输出证书信息**************************************"$END
openssl x509 -in ${CERT_INFO[${i}2]} -noout -subject -dates -serial
echo
done
chmod 600 *.key
action "证书生成完成"
二、Shell脚本详细步骤
1、引入函数库:. /etc/init.d/functions
引入了一个包含系统服务管理相关函数的库,虽然在这个脚本中没有直接使用这些函数。
2、定义变量:CERT_INFO是一个二维数组,包含了证书的配置信息,如组织名、国家、省份、城市、主题、密钥长度、有效期、序列号、私钥文件名、证书文件名、证书请求文件名等。
3、设置颜色输出:COLOR变量用于在终端输出时添加绿色高亮,END用于恢复默认颜色。
4、设定工作目录:DIR=/data
定义了工作目录,并使用cd命令切换到该目录。
5、循环处理证书:通过for循环遍历CERT_INFO数组。对于数组的第一个元素(索引0),它使用openssl req -x509
命令生成一个自签名的根证书。对于其他元素,先生成证书请求,然后使用根证书签名生成子证书。
6、证书信息输出:每次生成证书后,都会使用openssl x509
命令显示证书的详细信息,包括主题、有效期和序列号。
7、设置私钥权限:chmod 600 *.key
确保所有生成的私钥文件具有适当的权限,只有所有者可读写。
8、脚本结束提示:action "证书生成完成"
会输出一条消息,表示证书生成过程已完成。
三、Shell脚本相关解释
CERT_INFO变量
解释:
1、CA证书信息:
[00]
:证书的组织(Organization),值为/O=xx/CN=xx
[01]
:CA私钥文件名,值为cakey.pem
[02]
:CA证书文件名,值为cacert.pem
[03]
:密钥位数,值为2048
[04]
:证书有效期(天数),值为3650
[05]
:未使用,值为0
2、主证书信息:
[10]
:证书的DN(Distinguished Name),值为/C=CN/ST=guangdong/L=guangzhou/O=xxx/CN=master.xxx.com
[11]
:主密钥文件名,值为master.key
[12]
:主证书文件名,值为master.crt
[13]
:密钥位数,值为2048
[14]
:证书有效期(天数),值为365
[15]
:未使用,值为1
[16]
:证书请求文件名,值为master.csr
3、从证书信息:
[20]
:证书的DN(Distinguished Name),值为/C=CN/ST=guangdong/L=guangzhou/O=xxx/CN=slave.xxx.com
[21]
:从密钥文件名,值为slave.key
[22]
:从证书文件名,值为slave.crt
[23]
:密钥位数,值为2048
[24]
:证书有效期(天数),值为365
[25]
:未使用,值为2
[26]
:证书请求文件名,值为slave.csr
项目源码:关注公众号

关注微信公众号『编程与读书』
第一时间了解最新项目源码动态
关注博主不迷路~