目的: 搭建一个 CA 服务器并给客户机授权认证
准备:
?? 1. 一台 Linux 操作系统(以 centos7 虚拟机为例)
?? 2. 准备一台客户机(centos6 虚拟机)
先上一张思维导图吧.
步骤
一. CA 服务器创建.
?? 1. CA 服务器我们用 centos7 来建立, 先申请该服务器的私钥, 注意路径, 我们要把文件放在 / etc/pki/CA/private 下
?? 2. 利用刚刚建立好的私钥生成自签名证书, 注: CA 的证书是自己给自己签名的.
?? 查看自签名证书
?? 导入到 Windows 系统中修改后缀为 cer 也可以看到详细信息.
?? 3. 如果是初次搭建 CA 还要手动建立 index 文件和 serial 文件, 否则在给客户机颁发证书时会提示报错.
?? 4. 得到客户机的证书申请给客户机颁发证书.
颁发证书后也可以把证书导入到 Windows 改后缀查看, 注意要先把 CA 服务器的证书安装到系统中才可以看到具体的证书路径.
?? 5. 吊销证书.
二. 客户机申请证书.
?? 1. 客户机首先也要申请自己的私钥, 这里以虚拟机 centos6 为例, 客户机的路径可以自己定义, 我这里是在 / data/App/
?? 2. 用刚刚生成的私钥创建 CA 证书申请文件.
?? 3. 把刚刚生成的 CA 证书申请文件, 发送给 CA 服务器认证.
CA 服务器通过申请认证后, 就可以把认证后的证书拿过来使用了.
利用 shell 脚本实现自动创建 CA 和申请.
一. CA 服务器
注: 客户机自动传过来的 CA 申请证书会保存在 / data / 下, 只需要脚本后跟文件名就可以了, 不用写后缀.
- #!/bin/bash
- #
- #***********************************************************
- #Autohor: GuoCheng
- #QQ: 792402658
- #Date: 2019-06-20
- #FileName: createCA.sh
- #***********************************************************
- set -u
- set -e
- way=/etc/pki/CA
- day=100
- name=$1
- cd $way
- #------------------------- 定义函数 -------------------------------
- # 生成 CA 自己的私钥
- private(){
- (umask 077;openssl genrsa -out private/cakey.pem 4096 )
- openssl req -new -x509 -key $way/private/cakey.pem -out $way/cacert.pem -days 3650 <<EOF
- CN
- beijing
- beijing
- magedu
- devops
- ca.magede.com
- [email protected]
- root
- 792402658
- EOF
- echo .
- }
- #------------------------------------------------------------------
- # 主程序开始
- if [ ! -e $way/index.txt ];then
- touch $way/index.txt
- fi
- if [ ! -e $way/serial ];then
- echo 00> $way/serial
- fi
- if [ ! -e $way/private/cakey.pem ];then
- private
- fi
- # 颁发证书
- spawn openssl ca -in /data/${name}.csr -out $way/certs/${name}.crt -days $day
二. 客户机
注: 客户机只需要在脚本名后写入你想申请的 CA 证书名 (不用写后缀) 和 CA 服务器 IP 两个参数就可以看了, 注意此脚本不够完善 顺序不要写反.
#!/bin/bash # #*********************************************************** #Autohor: GuoCheng #QQ: 792402658 #Date: 2019-06-22 #FileName: RequestCA.sh #*********************************************************** set -u set -e way=/data/App hostname=root password=792402658 filename=$1 CAIP=$2 filekey=${filename}.key filecsr=${filename}.csr cd $way #---------------------- 定义函数 ------------------------------- key(){ (umask 066;openssl genrsa -out $filekey 1024) openssl req -new -key $filekey -out $filecsr <<EOF CN beijing beijing magedu 37 App.magedu.com [email protected] 792402658 root EOF echo . } #-------------------------------------------------------------- # 生成本机密钥和 CA 申请文件 key # 把申请文件发送给 CA 服务器 #spawn scp reboot.sh [email protected]$ip:/data expect <<EOF set timeout 10 spawn scp $filecsr [email protected]$CAIP:/data expect <<EOF expect { "yes/no" { send "yes\n";exp_continue } "password" { send "$password\n" } } expect eof EOF echo .
来源: http://www.bubuko.com/infodetail-3101042.html