设为首页 收藏本站
查看: 1918|回复: 0

shell脚本自动创建ca证书

[复制链接]

尚未签到

发表于 2018-8-29 06:11:35 | 显示全部楼层 |阅读模式
  在linux下创建证书大概是大多数人很头疼的事情,今天我在网上搜到个不错的shell自动创建ca证书的脚本,来分享给大家.
  脚本内容:
  #!/bin/bash
  # Author: MOS
  # Script name: mos_ca.sh
  # Date & Time: 2013-01-06/23:05:35
  # Version: 1.0.2
  # Description:
  #
  [ -f /etc/sysconfig/mos_ca.conf ] && . /etc/sysconfig/mos_ca.conf
  Config(){
  Cnf=${Cnf:-/etc/pki/tls/openssl.cnf}
  cp $Cnf $Cnf.`date +%F-%T`.bak
  Dir=${Dir:-/etc/pki/CA/}
  Cny=${Cny:-CN}
  Pve=${Pve:-Henan}
  Cty=${Cty:-Zhengzhou}
  Bis=${Bis:-Youguess}
  Bnh=${Bnh:-Tech}
  OPN=`grep "stateOrProvinceName_default.*=[[:space:]].*" /etc/pki/tls/openssl.cnf|cut -d"t" -f1`
  sed -i "s@\(^dir.*=[[:space:]]\).*@\1$Dir@g" $Cnf
  sed -i "s@\(^countryName_default.*=[[:space:]]\).*@\1$Cny@g" $Cnf
  if [ $OPN = s ];then
  sed -i "s@\(^stateOrProvinceName_default.*=[[:space:]]\).*@\1$Pve@g" $Cnf
  else
  sed -i "s@^#\(stateOrProvinceName_default.*=[[:space:]]\).*@\1$Pve@g" $Cnf
  fi
  sed -i "s@\(^localityName_default.*=[[:space:]]\).*@\1$Cty@g" $Cnf
  sed -i "s@\(^0.organizationName_default.*=[[:space:]]\).*@\1$Bis@g" $Cnf
  sed -i "s@^#\(organizationalUnitName_default\([[:space:]]\)=\)@\1 $Bnh@g" $Cnf
  }
  Create_CA(){
  Dir=${Dir:-/etc/pki/CA/}
  [ ! -d ${Dir}crl ] && mkdir -pm 700 ${Dir}crl
  [ ! -d ${Dir}newcerts ] && mkdir -pm 700 ${Dir}newcerts
  [ ! -d ${Dir}certs ] && mkdir -pm 700 ${Dir}certs
  [ ! -f ${Dir}index.txt ] && touch ${Dir}index.txt
  [ ! -f ${Dir}serial ] && echo 01 > ${Dir}serial
  [ ! -d ${Dir}private ] && mkdir -pm 700 ${Dir}private
  (umask 077; openssl genrsa -out ${Dir}private/cakey.pem 2048 &> /dev/null )
  #read -p "Please input CA hostname [default:ca.mos.com]: " Host
  Host=${Host:-ca.mos.com}
  #read -p "Please input CA E-mail [default]:root@mos.com]: " Em
  Em=${Em:-root@mos.com}
  echo -e "\n\n\n\n\n${Host}\n${Em}\n"|openssl req -x509 -new -key ${Dir}private/cakey.pem -out ${Dir}cacert.pem -days 3650 &> /dev/null
  }
  Create(){
  Dir=${Dir:-/etc/pki/CA/}
  Date=`date +%F-%H:%M:%S`
  [ ! -f /etc/pki/CA/private/cakey.pem ] && Create_CA && return 0
  if [ -f /etc/pki/CA/private/cakey.pem ];then
  read -p "CA existe,Continue? y: Move file; n-> Quit. [y|n] " Choice
  if [[ "$Choice" == "y" ]];then
  [ ! -d "$Dir""$Date"tmp ] && mkdir -p "$Dir""$Date"tmp
  mv "$Dir"* "$Dir""$Date"tmp/ &> /dev/null
  Create_CA
  elif [[ "$Choice" == "n" ]];then
  exit 0
  else
  echo "Error input..."
  exit 1
  fi
  fi
  }
  Create_crt(){
  (umask 077;openssl genrsa 1024 > "$Ddir""$Dname".key) &> /dev/null
  echo -e "\n\n\n\n\n"$Dhost"\n"$DE"\n\n\n"|openssl req -new -key "$Ddir""$Dname".key -out "$Ddir""$Dname".csr &> /dev/null
  [[ $Set != "-s" ]] && echo -e "y\ny\n"|openssl ca -in "$Ddir""$Dname".csr -out "$Ddir""$Dname".crt -days 365 &> /dev/null && exit 0
  [[ $Set == "-s" ]] && exit 0
  }
  Demo_crt(){
  Ddir=${Ddir:-/opt/mos_demo/}
  Dname=${Dname:-demo}
  Dhost=${Dhost:-demo.mos.com}
  De=${De:-root@mos.com}
  Date=`date +%F-%H:%M:%S`
  [ ! -d $Ddir ] && mkdir -p $Ddir &> /dev/null
  [[ ! -f "$Ddir""$Dname".key && ! -f "$Ddir""$Dname".csr ]] && Create_crt && exit 0
  if [[ -f "$Ddir""$Dname".key || -f "$Ddir""$Dname".csr || -f "$Ddir""$Dname".crt ]];then
  read -p "Demo certificate existe, Continue? y: Move file; n: Quit. [y|n] " Cie
  if [[ "$Cie" == "y" ]];then
  [ ! -d "$Ddir""$Date"tmp ] && mkdir -p "$Ddir""$Date"tmp && mv "$Ddir""$Dname"* "$Ddir""$Date"tmp/ &> /dev/null
  Create_crt
  exit 0
  elif [[ "$Cie" == "n" ]];then
  exit 0
  else
  echo "Error input..."
  fi
  fi
  }
  Set=$1
  if [[ $Set  =~ (-n)|(-o)|(-s)|(CA) && -z $2 || -z $Set ]];then
  [ -z $Set ] && Config && Create && Demo_crt && exit 0
  [ $Set = -n ] && Demo_crt && exit 0
  [ $Set = -s ] && Config && Demo_crt && exit 0
  [ $Set = CA ] && Config && Create && exit 0
  [ $Set = -o ] && echo -e "y\ny\n"|openssl ca -in "$Other".csr -out "$Other".crt -days 365 &> /dev/null
  else
  echo "Error,Invalid option!"
  exit 1
  fi
  使用方法:
  chmod +x mos_ca.sh
  ./mos_ca.sh


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-557845-1-1.html 上篇帖子: 第 三 十 一 天:shell 脚 本(二) 下篇帖子: 改变Linux Shell中的字体和背景颜色
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表