偷得浮生 偷得浮生

记录精彩的人生

目录
一键搭建CA并申请多个证书 shell 脚本
/  

一键搭建CA并申请多个证书 shell 脚本

#!/bin/bash
#
#********************************************************************
#Author:zhangzhuo
#QQ: 1191400158
#Date: 2021-01-13
#FileName:crets.sh
#URL: https://www.zhangzhuo.ltd
#Description:The test script
#Copyright (C): 2021 All rights reserved
#********************************************************************

#引用系统函数
. /etc/init.d/functions

#生成创建CA所需的文件
[ ! -d  /etc/pki/CA ] && mkdir -p /etc/pki/CA/{certs,crl,newcerts,private} &>/dev/null
[ ! -f /etc/pki/CA/index.txt ] && touch /etc/pki/CA/index.txt
[ ! -f /etc/pki/CA/serial ] && echo 00 > /etc/pki/CA/serial
[ ! -f /etc/pki/CA/crlnumber ] && touch /etc/pki/CA/crlnumber 
[ ! -d /data ] && mkdir /data

#定义变量
SUBJ_SET='/C=CN/ST=neimeng/L=baotou/O=zhangzhuo/CN=www.zhangzhuo.org' #CA机构信息
DAYS_CA=3650  #定义CA自签证书有效天数


DAYS=365   #申请的CA证书有效期
APP_SUBJ='/C=CN/ST=neimeng/L=baotou/O=zhangzhuo' #机构信息需要跟CA机构信息一致
APP_NAME=("app1" "app2" "app3")                  #应用名称跟下面的数组对应填写,后面也是证书文件名称
APP_SUBJ_NAME=("/CN=www.zhangzhuo1.org" "/CN=www.zhangzhuo2.org" "/CN=www.zhangzhuo3.org") #要给什么主机使用域名


[ ${#APP_NAME[*]} -eq ${#APP_SUBJ_NAME[*]} ] || { echo '请检查APP_NAME和APP_SUBJ_NAME数组个数是否一样';exit; }
num=`echo $[${#APP_NAME[*]}-1]`

#生成CA私钥
[ ! -f /etc/pki/CA/private/cakey.pem ] && openssl req  -x509 -newkey rsa:2048 -subj $SUBJ_SET -set_serial 1 -keyout /etc/pki/CA/private/cakey.pem -nodes -days $DAYS_CA  -out /etc/pki/CA/cacert.pem &>/dev/null 
[ $? -eq 0 ] && action "CA私钥和自签名证书生成完成" 

#给应用申请证书
for i in `seq 0 $num`;do
    openssl req -newkey rsa:2048 -nodes -subj ${APP_SUBJ}${APP_SUBJ_NAME[$i]} -keyout /data/${APP_NAME[$i]}.key -out /data/${APP_NAME[$i]}.crs &>/dev/null
   echo -e 'y\ny\n'| openssl ca -in /data/${APP_NAME[$i]}.crs -out /etc/pki/CA/certs/${APP_NAME[$i]}.crt -days $DAYS &>/dev/null
    cp /etc/pki/CA/certs/${APP_NAME[$i]}.crt /data/
    action "应用${APP_NAME[$i]}证书申请完成,文件在/data文件夹中"
done

注意:申请证书的信息可以在变量中修改

  • SUBJ_SET和APP_SUBJ需要一致。
  • APP_NAME和APP_SUBJ_NAME数组需要个数一致不然会退出脚本,位置需要对应以便于自己区分
  • 创建的CA证书根据APP_NAME和APP_SUBJ_NAME数组的个数进行创建
  • 变量名称非必要不要修改
  • 最后data中生成的文件.key为私钥.crt为证书,.crs为申请文件,有用的文件为.key和.crt,.crs可根据自己需求删除