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 "nnnnn${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 "nnnnn"$Dhost"n"$DE"nnn"|openssl req -new -key "$Ddir""$Dname".key -out "$Ddir""$Dname".csr &> /dev/null
[[ $Set != "-s" ]] && echo -e "ynyn"|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 "ynyn"|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
时间: 2024-10-29 03:44:12

linux shell自动创建ca证书脚本的相关文章

运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1674188 运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下cro

运维经验分享(七)-- Linux Shell之ChatterServer服务控制脚本第三次优化

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1677214 运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下cro

利用shell自动创建代码库管理gitosis服务环境

为了大家都能偷懒而已~把步骤写成脚本~ 用法: bootstrap.sh && gitosis-knstall.sh git 安装~ wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz tar xzvf git-latest.tar.gz cd git-{date} autoconf ./configure --with-curl=/usr/local make sudo make i

openstack能否编写自动创建实例的脚本?

问题描述 使用一些脚本语言如python等,能够自动地在openstack中创建所需的实例环境?有什么方法? 解决方案 解决方案二:novaboot--flavor2--imageCentOS6.4-openstack-20G--security_groupsdefault--availability_zonenova:privateCloud04testopenstack提供了创建实例的命令,可以使用

Linux/Unix shell 自动导入Oracle数据库

      使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linux 下使用 shell 脚本来实现自动导入Oracle数据库.        Linux Shell以及导入导出的相关参考:        Linux/Unix shell 脚本中调用SQL,RMAN脚本        Linux/Unix shell sql 之间传递变量       

如何为IIS添加CA证书以支持https

一.在IIS中生成Certificate Signing Request (CSR) 个人理解:生成CSR就是生成"私钥/公钥对"之后从中提取出公钥. 1. 打开IIS Manager,在根节点中选择Server Certificates(服务器证书),点击右侧的Create Certificate Request...,然后填写相应的Distinguished Name Properties(见下图). Common name中填写域名(如果用于所有二级域名,填*.域名),Organ

linux shell生成apache证书脚本

apache+mod_ssl中证书生成方法 首先生成证书请求:  代码如下 复制代码 #openssl req -new > server.csr 按照提示输入相关信息后,会在当前目录自动生成server.csr和privkey.pem两个文件,privkey.pem是私钥文件,默认会有passphrase,如果不移除的话,每次运行apache的时候都会提示输入passphrase,所以如果服务器重启后如果你不在服务器前面,则apache无法正常运行. 所以,第二步需要移除passphrase:

linux下怎么写一个自动创建文件夹和文件的脚本?

问题描述 linux下怎么写一个自动创建文件夹和文件的脚本? linux下怎么写一个自动创建文件夹和文件的脚本?就是说我给一个绝对路径,程序会自动帮我创建在路径中没有的文件夹和文件. 解决方案 http://blog.csdn.net/hellochenlian/article/details/37566269 -p, --parents 可以是一个路径名称.此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录; 解决方案二: mkdir 加上

linux shell脚本问题,关于自动修改系统密码

问题描述 linux shell脚本问题,关于自动修改系统密码 操作系统 radhat 就是多个服务器每天就要进行一次密码修改,所以在想能不能用shell写一个命令脚本,然后放在一台服务器上面,等到需要修改密码的时候,就修改脚本里面的日期参数进行跑脚本修改,求大神帮助,新手,也可沾些代码我学习一下,不适合的地方,我自己改改. 解决方案 用crontabhttp://www.cnblogs.com/kaituorensheng/p/4494321.htmlhttp://os.51cto.com/a