小黑的日常折腾-快速建立私有CA的shell脚本

小黑又开始折腾新的东西了,上周刚学习完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:
#      This program is used to creat CA
#History:
#2016/4/9    xiaohei   v1.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配置文件的位置
declare  conffile=/etc/pki/tls/openssl.cnf
#定义一个数组保存CA配置文件中需要保存的一些属性名称
declare -a  var
var=("dir" "certs" "crl_dir" "new_certs_dir" "serial" "database" "certificate" "private_key")
#临时文件和目录
declare -a tempfile
tempfile=("./ca_default.txt" "./ca_value.txt")
#必要的文件和目录
declare -a creatfile
declare -a creatdir
creatfile=("serial" "database")
creatdir=("certs" "crl_dir" "new_certs_dir")
#openssl.conf关于CA的相关属性
declare -A ca
#自签证书需要填写的信息:国家(大写的两个字母);省;市;公司;部门;主机名;邮箱(可选)
cainfo=("CN" "Beijing" "Beijing" "blackboy" "ops" "ca.blackboy.com" "[email protected]" )
#信号捕捉
trap  ‘mytrap‘ INT
mytrap(){
        clean_temp
        echo -e "\033[31mexit\033[0m"
        exit
}
#清理临时文件和变量及数组
clean_temp(){
        for((i=0;i<${#tempfile[*]};i++));do
                mv -f ${tempfile[$i]}  /tmp/
        done
        unset -v conffile       
        unset -v var    
        unset -v tempfile       
        unset -v ca
        unset -v creatfile
        unset -v creatdir
        unset -v cainfo
}
#分析文件或者目录是否存在       
analyse_file_dir(){
        if   [ -f "$1"  ];then
                echo -e "\033[32mfile $1 exist\033[0m"
                return 0
        elif [  -d "$1"  ];then
                echo -e  "\033[32m$1 is exist\033[0m"
                return 0
        else
                echo -e  "\033[31m$1 is not exist\033[0m"               
                return 1
        fi
}
#创建需要的文件
creat_file(){
        touch "$1"
        analyse_file_dir "$1" &> /dev/null && echo -e "\033[32mcreat $1  successful\033[0m" || return 1
        return 0
}
#创建需要的目录
creat_dir(){
        mkdir -pv "$1"
        analyse_file_dir "$1" &> /dev/null && echo -e "\033[33mcreat $1  successful\033[0m" || return 1
        return 0
}
#分析并获得conffile变量保存的路径所指的openssl.conf文件的一些信息
analyse_conf(){
analyse_file_dir $1 || exit 1
#通过sed获得配置文件自己需要的部分的内容
sed -n  ‘/\[ CA_default/,/##/[email protected][#].*@ @gp‘  $1   | sed ‘s/=/ = /g‘  > ${tempfile[0]}
#通过awk格式化上步得到内容并保存到临时文件中
awk ‘/^[^[:space:]]/{a[$1]=$3}END{for(i in a){printf""i"=%s\n",a[i]};}‘ ${tempfile[0]}  > ${tempfile[1]}
#定义局部变量保存dir项的路径
local dir=$(sed -n ‘s/^dir=//p‘ ${tempfile[1]})
#配置文件中$dir代替了dir的路径,还原为其真实路径,并保存在临时文件中
sed -i "[email protected][$][email protected][email protected]"  ${tempfile[1]}
echo "The current OpenSSL configuration"
cat ./ca_value.txt
echo "#################################"
#把配置文件中查找到的属性信息保存到关联数组中
for((i=0;i<${#var[*]};i++));do
        ca["${var[$i]}"]=$(awk -F"="  ‘{if($1~/^‘${var[$i]}‘$/){print $2}}‘ ${tempfile[1]})
done
}
#创建私钥
creat_private_key(){
        #取文件所在目录名,如果目录不存在则创建
        analyse_file_dir ${1%/*} ||  creat_dir ${1%/*}   || return 1
        #创建私钥,大小为4096,并将创建的私钥文件的权限设置为只有当前用户可读写
        (umask 077; openssl genrsa -out $1 4096)
        #分析私钥是否创建完成
        analyse_file_dir $1 &> /dev/null  && echo -e "\033[32mcreat private key  successful\033[0m "  || return 1
        echo "ok"
        return 0
}
#生成自签证书
creat_cacert(){
        local info
        #生成签发证书时要填写的信息
        for ((i=0;i<${#cainfo[*]};i++));do
                info="$info${cainfo[$i]}\n"
        done
        #签发证书
        echo -e   "$info" |  openssl req -new -x509 -key $1 -out $2  -days 3655
        #分析证书是否正常生成
        analyse_file_dir $2 &> /dev/null  && echo -e "\033[32mcreat cacert  successful\033[0m "  || return 1
}
#如果openssl.conf文件不存在直接退出
analyse_conf  $conffile || exit 1
#创建必要的文件和目录,如果创建失败则退出
for((i=0;i<${#creatfile[*]};i++));do
        analyse_file_dir ${ca[${creatfile[$i]}]} ||  creat_file ${ca[${creatfile[$i]}]} || exit 1
done
for((i=0;i<${#creatdir[*]};i++));do
        analyse_file_dir ${ca[${creatdir[$i]}]} ||  creat_dir ${ca[${creatdir[$i]}]} || exit 1
done
#向证书编号文件serial中添加编号
echo "01 >>>>>  ${ca[serial]}"
echo  "01"  > ${ca[serial]}  
#调用函数创建CA的私钥
creat_private_key ${ca[private_key]} || exit 1
#创建CA自签证书
creat_cacert  ${ca[private_key]} ${ca[certificate]} || exit 1
#查看证书内容
openssl  x509  -in ${ca[certificate]}  -noout  -serial  -subject
#清理安装过程中生成的变量、数组、和临时文件
clean_temp

脚本的运行结果如下:

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

时间: 2024-11-08 05:17:04

小黑的日常折腾-快速建立私有CA的shell脚本的相关文章

加密、解密 &nbsp; 以及OpenSSL建立私有CA

加密.解密,以及OpenSSL建立私有CA 加密技术是互联网最常用的安全保密手段,其利用技术手段把重要的数据加密后传送,到达目的地后再用相同或不同的手段进行解密. 加密技术包括两个元素:算法和密钥 常用的加密技术:对称加密.非对称加密.单向加密 以上几种加密技术各有千秋,经常组合起来使用 1.对称加密 加密和解密使用同一个密钥,将明文分隔成固定大小的块,逐个进行加密: 常见算法:DES  3DES  Twofish  IDEA  IDEA  CAST5  RC6 Blowfish 2.非对称加密

加密、解密以及OpenSSL建立私有CA

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用.大多数开源程序,商业软件加密核心都是基于openssl实现的. 数据安全性的基本法则: (1)数据的保密性:信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密.加密的过程需要用到密钥来加密数据然后再解密.没有了密钥,就无法解开加密的数据.数据加密之后,只有密钥要用一个安全的方法传送.加密过的数据可以公开地传送. (2)完整性:

加密、解密,以及OpenSSL建立私有CA

概述: 理论部分主要介绍了: 对称加密.非对称加密.单向加密.密钥交换.CA.PKI 操作部分主要有: 对称加密.非对称加密.单向加密的实现,已经openssl常用功能,生成密码.生成随机数已经使用openssl创建私有CA 系统环境说明: [[email protected] ~]# cat /etc/redhat-release  CentOS release 6.6 (Final) [[email protected] ~]# uname -rm 2.6.32-504.el6.x86_64

OpenSSL建立私有CA

yum安装OpenSSL: 提示已经安装过了. openssl的主配置文件:/etc/pki/tls/openssl.cnf [CA_default] dir:CA的主目录 certs:已颁发证书的存储位置 crl_dir:已吊销证书的存储位置 database:证书索引文件 new_certs_dir:新颁发证书的存储位置 certificate:CA证书文件 serial:证书颁发时的当前序列号 crlnumber:吊销证书的当前序列号 crl:当前使用的CRL private_key:CA

基于ssl协议和openssl工具建立私有CA

前言 要自建CA需先了解openssl工具和ssl协议还有各加密类型 ssl(Secure Socket Layer)安全套接字层当前版本为3.0,浏览器与Web服务器之间的身份认证和加密数据传输,它工作在传输层和各应用层之间,用户可以选择是否使用ssl进行传输,选择ssl协议将调用ssl函数库,端口也会发生变化. 加密类型 对称加密:任意加密数据块和流的内容,加密和解密用同一个密码, 通常明文通过算法和密钥生成密文,再由接受者用相同的密钥和算法解密获取明文. 算法:(DES.3DES.AES现

OpenSLL之建立私有CA

一.CA证书的格式 数字证书的格式(x.509 v3): 版本号(version) 序列号(serial number):CA用于惟一标识此证书: 签名算法标志(Signature algorithm identifier) 发行者的名称:即CA自己的名称: 有效期:两个日期,起始日期和终止日期: 证书主体名称:证书拥有者自己的名字 证书主体公钥信息:证书拥有者自己的公钥: 发行商的惟一标识: 证书主体的惟一标识: 扩展信息: 签名:CA对此证书的数字签名: 二.建立自己的CA 使用OpenSS

建立私有CA

CA:Cerieificate Authority证书颁发机构主要负责证书的颁发.管理以及归档和吊销.证书内包含了拥有证书者的姓名.地址.电子邮件帐号.公钥.证书有效期.发放证书的CA.CA的数字签名等信息.证书主要有三大功能:加密.签名.身份验证. 由于向国际根CA注册证书是要钱的,所以通常在公司内部我们需要用到证书进行安全通信时,可以自己搭建一个公司内部的CA,来满足公司内网的安全传输需求. 现在我们就来建立一个私有CA,并申请证书. openssl的配置文件:/etc/pki/tls/op

小黑的日常折腾-网段在线地址扫描shell脚本

学习Linux已经一个月了,不知不觉shell脚本的基本用法已经学习完了,为了检验自己的学习情况,在清明小长假期间花了点时间折腾出了这个脚本.该作品只是练手之作,如果有BUG,请留言指明,我会尽力完善. 该脚本需要用户给定两个参数,第一个参数是网段的起始ip地址,第二个参数是网段的结束ip地址.起始地址的ip地址最后一段必须是1,如192.168.0.1,结束ip地址的最后一位必须是254,如192.168.10.254.另外,起始和结束ip地址的第一段必须相同. 注意: 1.地址范围越大运行程

加密解密与OpenSSL建立私有CA

安全规范: 1)NIST规定的数据安全性标准: ①保密性:数据保密性:隐私性: ②完整性:数据完整性:系统完整性 ③可用性:数据与服务随时可用 2)OSI,X.800:定义了安全攻击,安全机制,安全服务 ①安全攻击 被动攻击:监听 主动攻击:报文伪装.重放.消息篡改.拒绝服务(将有限资源耗尽,使得正常资源无法访问DDOS) ②安全机制 加密/解密,数字签名,访问控制,数据完整性保证,认证交换,数据填充,路由控制,人为公证 ③安全服务 认证 访问控制 数据保密性: 连接保密性 无连接保密性 选择域