CA签发工具
- #!/bin/bash
- #author Sun Ying
- #date:2015-12-17
- if [ $# -lt 1 ];then
- echo -e "\033[34mUsage: `basename $0` -h|--help for help\033[0m"
- exit 0
- fi
- [ -e ./CA_config ] && source ./CA_config
- ERRLOG=`date +%Y%H%M`.log
- PASSWORD=${PASSWORD-"1234"}
- CO_S=${CN_S-"CN"}
- ST_S=${ST_S-"BJ"}
- LO_S=${LO_S-"BJ"}
- OG_S=${OG_S-"Centos"}
- OU_S=${OU_S-"Linux"}
- HS_S=${HS_S-"centos.example.com"}
- CO_C=${CN_C-"CN"}
- ST_C=${ST_C-"LN"}
- LO_C=${LO_C-"SY"}
- OG_C=${OG_C-"Client1"}
- OU_C=${OU_C-"Operation System"}
- HS_C=${HS_C-"client1.example.com"}
- DAYS=${DAYS-"365"}
- P_KEY=${P_KEY-/etc/pki/CA/private/cakey.pem}
- CACERT=${CACERT-/etc/pki/CA/cacert.pem}
- M_SIZE=${M_SIZE-"2048"}
- CSR_pem=${CSR_pem-/etc/pki/CA/newcerts/${HOSTNAME}.csr}
- S_DAYS=${S_DAYS-365}
- DIR_F=/etc/pki/CA
- umask=077
- [ ! -d /tmp/CA ] && mkdir -p /tmp/CA/
- touch /tmp/CA/$ERRLOG
- V_Key(){
- if [ -f $temp ]; then
- openssl rsa -noout -text -in $temp
- else
- echo -e "\033[32mYou must assign a private Key with parameter -v|--verify\033[0m"
- exit 3
- fi
- }
- V_Cert(){
- if [ -f $temp ]; then
- openssl x509 -noout -text -in $temp
- else
- echo -e "\033[32mYou must assign a cert file with parameter -k|--check\033[0m"
- exit 3
- fi
- }
- V_Csr(){
- if [ -f $temp ]; then
- openssl req -noout -text -in $temp
- else
- echo -e "\033[32mYou must assign a CSR file with parameter -i|--identify\033[0m"
- exit 3
- fi
- }
- genPriKey(){
- [ -e $P_KEY ] && rm -f $P_KEY
- openssl genrsa -des3 -passout pass:$PASSWORD -out $P_KEY $M_SIZE >>/tmp/CA/$ERRLOG 2>&1
- if [ $? -eq 0 ];then
- echo -e "Create private key in $P_KEY \033[033msuccess\033[0m"
- else
- echo "please check the error log under /tmp/CA/$ERRLOG"
- exit 1
- fi
- }
- selfSign(){
- [ -e $CACERT ] && rm -f $CACERT
- if [ ! -e $P_KEY ] ;then
- echo "Please create the private key first"
- exit 1
- fi
- openssl req -new -x509 -passin pass:$PASSWORD -key $P_KEY -out $CACERT -days $DAYS -subj "/C=${CO_S}/ST=${ST_S}/L=${LO_S}/O=${OG_S}/OU=${OU_S} Department/CN=$HS_S" >>/tmp/CA/$ERRLOG 2>&1
- if [ $? -eq 0 ];then
- echo -e "Self Sign ROOT CA in $CACERT \033[033msuccess\033[0m"
- else
- echo "please check the error og under /tmp/CA/$ERRLOG"
- exit 2
- fi
- }
- CSR_P(){
- [ -e $CSR_pem ] && rm -f $CSR_pem
- openssl req -new -passin pass:$PASSWORD -key $P_KEY -out $CSR_pem -subj "/C=${CO_C}/ST=${ST_C}/L=${LO_C}/O=${OG_C}/OU=${OU_C} Department/CN=${HS_C}" >>/tmp/CA/$ERRLOG 2>&1
- if [ $? -eq 0 ];then
- echo -e "Create the CSR under $CSR_pem \033[033msuccess\033[0m"
- else
- echo "please check the error log under /tmp/CA/$ERRLOG"
- exit 3
- fi
- }
- Cat_CA(){
- [ -e /root/ca.config ] && rm -f /root/ca.config
- cat > /root/ca.config <<EOF
- [ ca ]
- default_ca = CA_own
- [ CA_own ]
- dir = /etc/pki/CA
- certs = \$dir/certs
- new_certs_dir = \$dir/newcerts
- database = \$dir/index.txt
- serial = \$dir/serial
- RANDFILE = \$dir/private/.rand
- certificate = \$dir/cacert.pem
- private_key = \$dir/private/cakey.pem
- default_days = 3650
- default_crl_days = 30
- default_md = md5
- preserve = no
- policy = policy_anything
- [ policy_anything ]
- countryName = optional
- stateOrProvinceName = optional
- localityName = optional
- organizationName = optional
- organizationalUnitName = optional
- commonName = supplied
- emailAddress = optional
- [req]
- x509_extensions =v3_ca
- [v3_ca]
- subjectKeyIdentifier = hash
- authorityKeyIdentifier = keyid:always,issuer
- basicConstraints = critical, CA:true
- keyUsage = critical, digitalSignature, cRLSign, keyCertSign
- EOF
- if [ $? -eq 0 ]; then
- echo -e "Create configuration file on /root/ca.config \033[033msuccess\033[0m"
- else
- echo -e "Create configuration file on /root/ca.config \033[031failed\033[0m"
- fi
- }
- Sign_v3(){
- openssl req -in $temp -noout -text >> /tmp/CA/$ERRLOG 2>&1
- if [ $? -eq 0 ] ;then
- Cat_CA
- [ ! -f $DIR_F/index.txt ] && touch $DIR_F/index.txt
- if [ ! -f $DIR_F/serial ];then
- touch $DIR_F/serial
- echo 01 > $DIR_F/serial
- fi
- openssl ca -extensions v3_ca -passin pass:$PASSWORD -in $temp -config /root/ca.config -days $S_DAYS -out ${temp}_V3.crt -batch >>/tmp/CA/$ERRLOG 2>&1
- if [ $? -eq 0 ];then
- echo -e "Create the cert file on ${temp}_V3.crt \033[033msuccess\033[0m"
- else
- echo -e "Cannot Create the Cert file. Please check the error under /tmp/CA/$ERRLOG"
- exit 4
- fi
- else
- echo -e "\033[32mYou must assign a CSR file with parameter -s3|--sign3\033[0m"
- exit 5
- fi
- }
- Trans_key(){
- openssl rsa -passin pass:$PASSWORD -noout -text -in $temp > /dev/null 2>/tmp/CA/$ERRLOG
- if [ $? -eq 0 ];then
- openssl rsa -passin pass:$PASSWORD -in $temp -out ${temp}.key
- echo -e "Create the ${temp}.key \033[033msuccess\033[0m"
- else
- echo -e "\033[32mYou must assign a CSR file with parameter -t|--trans\033[0m"
- exit 5
- fi
- }
- Sign_CSR(){
- openssl req -in $temp -noout -text >> /tmp/CA/$ERRLOG 2>&1
- if [ $? -eq 0 ]; then
- [ ! -f $DIR_F/index.txt ] && touch $DIR_F/index.txt
- if [ ! -f $DIR_F/serial ];then
- touch $DIR_F/serial
- echo 01 > $DIR_F/serial
- fi
- openssl x509 -req -in $temp -CA $CACERT -CAkey $P_KEY -CAcreateserial -passin pass:$PASSWORD -out $temp.crt >>/tmp/CA/$ERRLOG 2>&1
- if [ $? -eq 0 ];then
- echo -e "Create the cert file on $temp.crt \033[033msucess\033[0m"
- else
- echo -e "Cannot Create the Cert file. Please check the error under /tmp/CA/$ERRLOG"
- exit 4
- fi
- else
- echo -e "\033[32mYou must assign a CSR file with parameter -s|--sign\033[0m"
- exit 6
- fi
- }
- Revoke_cert (){
- if [ -f $temp ];then
- openssl ca -revoke $temp >>/tmp/CA/$ERRLOG 2>&1
- if [ $? -eq 0 ];then
- echo -e "Revoke the cert file $temp \033[033msucess\033[0m"
- else
- echo -e "Cannot Revoke the cert file,please check the /tmp/CA/$ERRLOG"
- exit 4
- fi
- else
- echo -e "\033[32mYou must assign a Cert file with parameter -e|--revoke\033[0m"
- exit 6
- fi
- }
- help_P(){
- echo -e "\033[34mUsage: `basename $0`\033[031m [option] [file]\033[0m"
- echo -e " \033[32m-h|--help : usage for help page\033[0m"
- echo -e " \033[32m-c|--ca: usage to sign self root CA certification\033[0m"
- echo -e " \033[32m-p|--private: usage to generate a private key\033[0m"
- echo -e " \033[32m-r|--request: usage to create a CSR request\033[0m"
- echo -e " \033[32m-s|--sign: usage to sign a Certification\033[0m"
- echo -e " \033[32m-s3|--sign3: usage to sign v3 Certification\033[0m"
- echo -e " \033[32m-v|--verify: usage to verify a private key\033[0m"
- echo -e " \033[32m-i|--identify: usage to verify a CSR file\033[0m"
- echo -e " \033[32m-k|--check: usage to verify a Certication file\033[0m"
- echo -e " \033[32m-t|--trans: usage to trans a private key with pass to no pass\033[0m"
- exit 0
- }
- while [ $# -ge 1 ]; do
- case $1 in
- -p|--private)
- genPriKey
- shift
- ;;
- -c|--ca)
- selfSign
- shift
- ;;
- -r|--request)
- CSR_P
- shift
- ;;
- -s3|--sign3)
- temp=$2
- Sign_v3
- rm /root/ca.config
- shift 2
- ;;
- -s|--sign)
- temp=$2
- Sign_CSR
- shift 2
- ;;
- -v|--verfiy)
- temp=$2
- temp=${temp:-null}
- V_Key
- shift 2
- ;;
- -i|--identify)
- temp=$2
- temp=${temp:-null}
- V_Csr
- shift 2
- ;;
- -k|--check)
- temp=$2
- temp=${temp:-null}
- V_Cert
- shift 2
- ;;
- -e|--revoke)
- temp=$2
- Revoke_cert
- shift 2
- ;;
- -h|--help)
- help_P
- shift
- ;;
- -t|--trans)
- temp=$2
- Trans_key
- shift 2
- ;;
- *)
- echo -e "\033[34mUsage: `basename $0` -h|--help for help\033[0m"
- exit 0
- ;;
- esac
- done
- [ -e /tmp/CA/$ERRLOG ] && rm /tmp/CA/$ERRLOG
默认配置
- ############configuration for the server side###########
- ##define private Key password
- PASSWORD=1234
- ##define the valid days
- DAYS=3650
- ##define the DN info
- CO_S=CN
- ST_S=BJ
- LO_S=BJ
- OG_S=Centos
- OU_S=Linux
- HS_S=centos.example.com
- ##define the Private Key Path
- P_Key=/etc/pki/CA/private/cakey.pem
- ##define the CA Path
- CACERT=/etc/pki/CA/cacert.pem
- ############configuration for the request CSR############
- ##define the DN info########
- CO_C=CN
- ST_C=LN
- LO_C=DL
- OG_C=server
- OU_C="Operation System"
- HS_C=server.example.com
CA签发工具的更多相关文章
- 使用CA签发的服务器证书搭建Tomcat双向SSL认证服务
第一部分,先说证书的申请. 这步是要到正规的CA公司申请正式的设备证书必须走的步骤. 1.先生成证书的密钥对 打开命令行,切换到某个自己新建的目录下,执行如下命令 keytool -genkey -k ...
- openssl 自建CA签发证书 网站https的ssl通信
<<COMMENTX509 文件扩展名 首先我们要理解文件的扩展名代表什么.DER.PEM.CRT和CER这些扩展名经常令人困惑.很多人错误地认为这些扩展名可以互相代替.尽管的确有时候有些 ...
- 使用openssl模拟CA和CA证书的签发
使用openssl模拟CA和CA证书的签发 当使用ssl/tls进行加密通信时,必须要有数字证书.若通信只限制在局域网内,可以不向第三方机构申请签发证书,可以通过openssl模拟CA(Cer ...
- 使用keytool工具产生带根CA和二级CA的用户证书
使用keytool工具产生带根CA和二级CA的用户证书 1 生成根CA 1.1 生成根CA证书 根CA实际是一张自签CA,自签CA的使用者和颁发者都是它自己.使用下面的命令生成根证书,如果没有指定 ...
- 基于CFSSL工具创建CA证书,服务端证书,客户端证书
背景描述 在局域网中部署组件时,想要通过证书来实现身份的认证,确保通信的安全性,可以通过cfssl工具来进行CA证书,服务端证书,客户端证书的创建. 目录 背景描述 部署cfssl工具 下载,上传cf ...
- 基于 OpenSSL 的 CA 建立及证书签发 【转】
建立 CA 建立 CA 目录结构 按照 OpenSSL 的默认配置建立 CA ,需要在文件系统中建立相应的目录结构.相关的配置内容一般位于 /usr/ssl/openssl.cnf 内,详情可参见 c ...
- 基于 OpenSSL 的 CA 建立及证书签发
http://rhythm-zju.blog.163.com/blog/static/310042008015115718637/ 建立 CA 建立 CA 目录结构 按照 OpenSSL 的默认配置建 ...
- 自建 CA 中心并签发 CA 证书
目录 文章目录 目录 CA 认证原理浅析 基本概念 PKI CA 认证中心(证书签发) X.509 标准 证书 证书的签发过程 自建 CA 签发证书并认证 HTTPS 网站的过程 使用 OpenSSL ...
- 通过Go语言创建CA与签发证书
本篇文章中,将描述如何使用go创建CA,并使用CA签署证书.在使用openssl创建证书时,遵循的步骤是 创建秘钥 > 创建CA > 生成要颁发证书的秘钥 > 使用CA签发证书.这种 ...
随机推荐
- [java]wordcount程序
词数统计系统. 作业解析:这次作业的内容是从本地读取一个程序代码,计算出这个程序中的行数,单词数,也可进行拓展. 实现语言:java 编程思路: 程序是由各种单词和符号组成的,单词包括关键字,标识符这 ...
- 跟我学Windows Azure 一 创建Windows Azure试用账号
我在网上看了很多教程,很大部分都是申请的是国外或者是香港的试用账号,而国内是由世纪互联所代理的,他的申请方式与VS2013的部署设置或多或少还是有些出入,这里我先跟大家一起过一下,在国内如何申请一个w ...
- 怎么样修改PHPStorm中文件修改后标签和文件名的颜色与背景色
自从最近在PHPstrom里引入Git,并且使用MONOKAI_SUBLIME主题之后 ,当文件在PHPstrom中进行编辑,文档内容变化时,左侧项目文件列表中的文件名颜色以及右侧编辑区域标签卡的文件 ...
- case when
SELECT * FROM category WHERE EXISTS (SELECT * FROM goods WHERE goods.cat_id = category.cat_id) cat ...
- [转]require(),include(),require_once()和include_once()区别
require(),include(),require_once()和include_once()区别 面试中最容易提到的一个PHP的问题,我想和大家共勉一下: require()和include() ...
- (转)ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 本篇主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌 ...
- excel 导入数值变成科学记数的解决办法.
string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=Yes;IM ...
- SQLServer count函数、cross apply和outer apply、
1.COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)2.COUNT(*) 函数返回表中的记录数 select * from TABLE_1 T1 outer ap ...
- 教你用plsql建立索引加快查询oracle数据的速度
http://jingyan.baidu.com/article/3f16e003cb9a0f2591c10324.html?qq-pf-to=pcqq.c2c PL/SQL Developer是一个 ...
- 使用spring连接及操作mongodb3.0
前边有一篇记录过不使用spring,直接在java代码中连接和操作mongodb数据库,这里就紧随其后记录一下使用spring的情况下,在java中简单操作mongodb. maven导包配置: ...