Shell脚本:一键申请多个证书

Last Updated on 2024年6月1日 by hangzi

Shell脚本

一、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

项目源码:关注公众号


关注微信公众号『编程与读书

第一时间了解最新网络动态
关注博主不迷路~