首页 > 网络技术频道 > 网络防火墙 > 正文
小黑的日常折腾-快速建立私有CA的shell脚本
2016-09-19     我来说两句       作者:黑帽网
   我要投稿

小黑又开始折腾新的东西了,上周刚学习完OpenSSL建设私有CA,周六就花了点时间写了这个脚本,时间仓促,搞完就去撸DNS了,如果有啥BUG请见谅,本脚本纯属练习,用来练OpenSSL、awk、sed等知识点。

先来介绍下建设私有CA的简单步骤(以下路劲为默认安装路径):

(1) 生成私钥;

~]# (umask 077; OpenSSL genrsa -out /etc/pki/CA/private/cakey.pem 4096)

(2) 生成自签证书;

~]# OpenSSL req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

-new:生成新证书签署请求;

-x509:生成自签格式证书,专用于创建私有CA时;

-key:生成请求时用到的私有文件路径;

-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;

-days:证书的有效时长,单位是day;

(3) 为CA提供所需的目录及文件;

~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}

~]# touch /etc/pki/CA/{serial,index.txt}

~]# echo 01 > /etc/pki/CA/serial

本脚本通过分析OpenSSL.conf文件来得到相关路径,再通过命令建设私有CA,自签证书的相关信息通过数组保存通过echo命令传给生成自签证书的命令。具体的脚本内容如下:

#!/bin/bash#Program:#ThisprogramisusedtocreatCA#History:#2016/4/9xiaoheiv1.0#blog:http://zww577593841.blog.51cto.com/6145493/1750689##私有CA存放目录#dir#已颁发的证书的存放目录#certs#已吊销的证书的存放目录#crl_dir#新证书的存放目录#new_certs_dir#当前证书的序列号保存文件#serial#已颁发证书的索引文件#database#CA的自签证书#certificate#CA的私钥#private_key#OpenSSL.conf配置文件的位置declareconffile=/etc/pki/tls/OpenSSL.cnf#定义一个数组保存CA配置文件中需要保存的一些属性名称declare-avarvar=("dir""certs""crl_dir""new_certs_dir""serial""database""certificate""private_key")#临时文件和目录declare-atempfiletempfile=("./ca_default.txt""./ca_value.txt")#必要的文件和目录declare-acreatfiledeclare-acreatdircreatfile=("serial""database")creatdir=("certs""crl_dir""new_certs_dir")#OpenSSL.conf关于CA的相关属性declare-Aca#自签证书需要填写的信息:国家(大写的两个字母);省;市;公司;部门;主机名;邮箱(可选)cainfo=("CN""Beijing""Beijing""blackboy""ops""ca.blackboy.com""blackboy@163.com")#信号捕捉trap'mytrap'INTmytrap(){clean_tempecho-e"/033[31mexit/033[0m"exit}#清理临时文件和变量及数组clean_temp(){for((i=0;i<${#tempfile[*]};i++));domv-f${tempfile[$i]}/tmp/doneunset-onffileunset-vvarunset-vtempfileunset-vcaunset-vcreatfileunset-vcreatdirunset-vcainfo}#分析文件或者目录是否存在analyse_file_dir(){if[-f"$1"];thenecho-e"/033[32mfile$1exist/033[0m"return0elif[-d"$1"];thenecho-e"/033[32m$1isexist/033[0m"return0elseecho-e"/033[31m$1isnotexist/033[0m"return1fi}#创建需要的文件creat_file(){touch"$1"analyse_file_dir"$1"&>/dev/null&&echo-e"/033[32mcreat$1successful/033[0m"||return1return0}#创建需要的目录creat_dir(){mkdir-pv"$1"analyse_file_dir"$1"&>/dev/null&&echo-e"/033[33mcreat$1successful/033[0m"||return1return0}#分析并获得conffile变量保存的路径所指的OpenSSL.conf文件的一些信息analyse_conf(){analyse_file_dir$1||exit1#通过sed获得配置文件自己需要的部分的内容sed-n'//[CA_default/,/##/s@[#].*@@gp'$1|sed's/=/=/g'>${tempfile[0]}#通过awk格式化上步得到内容并保存到临时文件中awk'/^[^[:space:]]/{a[$1]=$3}END{for(iina){printf""i"=%s/n",a[i]};}'${tempfile[0]}>${tempfile[1]}#定义局部变量保存dir项的路径localdir=$(sed-n's/^dir=//p'${tempfile[1]})#配置文件中$dir代替了dir的路径,还原为其真实路径,并保存在临时文件中sed-i"s@[$]dir@$dir@g"${tempfile[1]}echo"ThecurrentOpenSSLconfiguration"cat./ca_value.txtecho"#################################"#把配置文件中查找到的属性信息保存到关联数组中for((i=0;i<${#var[*]};i++));doca["${var[$i]}"]=$(awk-F"="'{if($1~/^'${var[$i]}'$/){print$2}}'${tempfile[1]})done}#创建私钥creat_private_key(){#取文件所在目录名,如果目录不存在则创建analyse_file_dir${1%/*}||creat_dir${1%/*}||return1#创建私钥,大小为4096,并将创建的私钥文件的权限设置为只有当前用户可读写(umask077;OpenSSLgenrsa-out$14096)#分析私钥是否创建完成analyse_file_dir$1&>/dev/null&&echo-e"/033[32mcreatprivatekeysuccessful/033[0m"||return1echo"ok"return0}#生成自签证书creat_cacert(){localinfo#生成签发证书时要填写的信息for((i=0;i<${#cainfo[*]};i++));doinfo="$info${cainfo[$i]}/n"done#签发证书echo-e"$info"|OpenSSLreq-new-x509-key$1-out$2-days3655#分析证书是否正常生成analyse_file_dir$2&>/dev/null&&echo-e"/033[32mcreatcacertsuccessful/033[0m"||return1}#如果OpenSSL.conf文件不存在直接退出analyse_conf$conffile||exit1#创建必要的文件和目录,如果创建失败则退出for((i=0;i<${#creatfile[*]};i++));doanalyse_file_dir${ca[${creatfile[$i]}]}||creat_file${ca[${creatfile[$i]}]}||exit1donefor((i=0;i<${#creatdir[*]};i++));doanalyse_file_dir${ca[${creatdir[$i]}]}||creat_dir${ca[${creatdir[$i]}]}||exit1done#向证书编号文件serial中添加编号echo"01>>>>>${ca[serial]}"echo"01">${ca[serial]} #调用函数创建CA的私钥creat_private_key${ca[private_key]}||exit1#创建CA自签证书creat_cacert${ca[private_key]}${ca[certificate]}||exit1#查看证书内容OpenSSLx509-in${ca[certificate]}-noout-serial-subject#清理安装过程中生成的变量、数组、和临时文件clean_temp

脚本的运行结果如下:

wKiom1cK-FSBxwehAABzevAcUOA223.png

wKioL1cK-RGgFEfoAACNMscYOKo467.png

时间仓促,未解释的部分,请见谅。  

点击收藏到自己的收藏夹!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:网络设备-华三-防火墙F1020-IRF虚拟化实战终结配置篇
下一篇:在实践中深入理解IP协议
相关文章
图文推荐
排行
热门
组网
路由
交换
关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 中国黑帽网--致力于做最好的网络安全技术学习网站 。