在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

74f98b50a607b8b3a61d8dafbc394b83.gif

正文共:1555 字 13 图,预估阅读时间:2 分钟

介于CentOS 7停服的原因CentOS 7停服之后该怎么安装软件呢?,为了方便日常使用,还是要研究一下替换成Ubuntu系统如何在Ubuntu 23.10部署KVM并创建虚拟机?,先尝试一下在Ubuntu系统中部署openVPN服务端。

对于openVPN或者SSL VPN而言,这种以加密协议为基础提供远程的安全连接服务,主要基于数字证书利用数字签名的方法对SSL服务器和SSL客户端进行身份验证VSR白送的的SSL VPN功能,你要不要?。所以,使用Ubuntu系统,我们还是要先创建证书使用Easy-RSA配置生成SSL证书

关于如何创建一份可以自动创建Easy-RSA证书的脚本,我们之前已经做了详细介绍手撸一个自动创建SSL证书的SHELL脚本。接下来,我们验证一下Easy-RSA在Ubuntu系统的使用是否存在差异,以及之前的脚本需要做何调整。

首先是软件安装,对应的命令为:

apt install -y easy-rsa

a3c1b7adddf695ee4c19a8abdf566fa6.png

如果转换成SHELL脚本,则可以是:

# 安装Easy-RSA
install_easyrsa() {
  echo "正在安装Easy-RSA..."
  apt install -y easy-rsa
  echo "Easy-RSA安装完成。"
}

然后是初始化Easy-RSA环境,在Ubuntu系统中,Easy-RSA的安装路径是/usr/share/easy-rsa/,需要依赖easyrsa文件来生成证书和密钥等文件。

43989d9d80d08e90db3a1a93c4ef4b6f.png

可以看到,机构配置范例文件vars.example也位于这个目录,复制一份。

cp /usr/share/easy-rsa/vars.example /usr/share/easy-rsa/vars

fd45921f019e13c5c0196ad61806d5ec.png

如果转换成SHELL脚本,则可以是:

# 初始化Easy-RSA环境
init_easyrsa() {
  echo "初始化Easy-RSA环境..."
  cd /usr/share/easy-rsa/
  # 复制vars.example为vars,避免覆盖
  if [ -f vars ]; then
    mv vars vars.backup
  fi
  cp vars.example vars
  echo "Easy-RSA环境初始化完成。"
}

然后我想修改机构信息中的部分字段为以下信息。

set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Beijing"
set_var EASYRSA_REQ_CITY        "Haidian"
set_var EASYRSA_REQ_ORG         "TIETOU_TECH"
set_var EASYRSA_REQ_EMAIL       "tietou@h3cadmin.cn"
set_var EASYRSA_REQ_OU          "Tietou_openVPN"

正常需要使用vi命令进行编辑,如果转换成SHELL脚本,则可以直接进行插入:

# 更新vars文件中的机构信息字段
update_vars() {
  echo "更新vars文件中的机构信息字段..."
  cd /usr/share/easy-rsa/
  # 向vars文件中插入机构信息字段
  echo 'set_var EASYRSA_REQ_COUNTRY     "CN"' >> vars
  echo 'set_var EASYRSA_REQ_PROVINCE    "Beijing"' >> vars
  echo 'set_var EASYRSA_REQ_CITY        "Haidian"' >> vars
  echo 'set_var EASYRSA_REQ_ORG         "TIETOU TECH"' >> vars
  echo 'set_var EASYRSA_REQ_EMAIL       "tietou@h3cadmin.cn"' >> vars
  echo 'set_var EASYRSA_REQ_OU          "Tietou openVPN"' >> vars
  echo "vars文件中的机构信息字段已更新。"
}

然后就是生成证书文件了,还是在/usr/share/easy-rsa,通过以下命令初始化PKI(Public Key Infrastructure,公钥基础设施)目录结构:

./easyrsa init-pki

87f8a6e2b4fbb424436e28c891722439.png

执行命令之后,Easy-RSA会自动根据vars文件中的变量,在PKI目录下生成一份新的openssl-easyrsa.cnf文件。

476db091cc9a9a0d19114f3e9f030fe7.png

接下来创建根证书,用于CA(Certificate Authority,证书颁发机构)对之后生成的server和client证书进行签名时使用。为了方便,我们带nopass参数生成证书,nopass表示不对CA密钥进行加密,这样在签署证书时就可以跳过密码验证。

./easyrsa build-ca nopass

644b7995840c8cb4edf17a324e28119e.png

创建服务器端证书,同时指定nopass参数表示不对私钥进行加密。

./easyrsa gen-req ttserver nopass

1f896154bbb472c369194cf945557dbb.png

给服务器端证书ttserver进行签名。

./easyrsa sign server ttserver

b3ef0a4db53b8e5a2b8868c6442b57f4.png

然后创建Diffie-Hellman文件,也就是秘钥交换时的DH算法,确保密钥可以穿越不安全网络。

./easyrsa gen-dh

e14c379d9e69902fc2a649c8def2591c.png

接下来创建客户端的证书,同时指定nopass参数表示不对私钥进行加密。

./easyrsa gen-req ttclient nopass

e4bc54a577727d511c53372f0d797da6.png

给客户端证书ttclient进行签名。

./easyrsa sign-req client ttclient

ca118fb6b725eb6ca2b4a4ccf955b031.png

至此,证书生成就结束了,涉及到的主要命令为:

./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req ttserver nopass
./easyrsa sign server ttserver
./easyrsa gen-dh
./easyrsa gen-req ttclient nopass
./easyrsa sign-req client ttclient

如果转换成SHELL脚本,则可以是:

# 生成证书和密钥
generate_certs() {
  echo "正在生成证书和密钥..."
  cd /usr/share/easy-rsa/
  # 初始化PKI目录结构
  ./easyrsa init-pki
  # 清空证书目录
  echo "yes" | ./easyrsa clean-all
  # 生成证书和密钥文件
  echo | ./easyrsa build-ca nopass
  echo | ./easyrsa gen-req ttserver nopass
  echo "yes" | ./easyrsa sign server ttserver
  ./easyrsa gen-dh
  echo | ./easyrsa gen-req ttclient nopass
  echo "yes" | ./easyrsa sign-req client ttclient
  echo "证书和密钥生成完成。"
}

为了方便管理,我们在/目录下创建一个SSL-cert文件夹,然后根据当前时间创建一个新目录,形如202308022132,同时将生成的证书和密钥文件复制到此目录下。如果写成SHELL脚本,则可以是:

# 创建SSL-cert目录
generate_dir() {
  # 获取当前时间
  current_time=$(date +"%Y%m%d%H%M")
  # 创建新的目录
  new_dir="/SSL-cert/${current_time}"
  mkdir -p "${new_dir}"
  # 将证书和密钥复制到新目录下
  cp /usr/share/easy-rsa/pki/ca.crt "${new_dir}/ca.crt"
  cp /usr/share/easy-rsa/pki/issued/ttserver.crt "${new_dir}/ttserver.crt"
  cp /usr/share/easy-rsa/pki/private/ttserver.key "${new_dir}/ttserver.key"
  cp /usr/share/easy-rsa/pki/issued/ttclient.crt "${new_dir}/ttclient.crt"
  cp /usr/share/easy-rsa/pki/private/ttclient.key "${new_dir}/ttclient.key"
  echo "证书和密钥已复制到目录:${new_dir}"
}

最后,我们再加一个主函数。

# 主函数
main() {
  install_easyrsa
  init_easyrsa
  update_vars
  generate_certs
  generate_dir
}

然后将这些片段攒成一个文件autosslcert.sh,如下所示:

#!/bin/bash
# 安装Easy-RSA
install_easyrsa() {
  echo "正在安装Easy-RSA..."
  apt install -y easy-rsa
  echo "Easy-RSA安装完成。"
}
# 初始化Easy-RSA环境
init_easyrsa() {
  echo "初始化Easy-RSA环境..."
  cd /usr/share/easy-rsa/
  # 备份vars.example为vars,避免覆盖
  if [ -f vars ]; then
    mv vars vars.backup
  fi
  cp vars.example vars
  echo "Easy-RSA环境初始化完成。"
}
# 更新vars文件中的机构信息字段
update_vars() {
  echo "更新vars文件中的机构信息字段..."
  cd /usr/share/easy-rsa/
  # 向vars文件中插入机构信息字段
  echo 'set_var EASYRSA_REQ_COUNTRY     "CN"' >> vars
  echo 'set_var EASYRSA_REQ_PROVINCE    "Beijing"' >> vars
  echo 'set_var EASYRSA_REQ_CITY        "Haidian"' >> vars
  echo 'set_var EASYRSA_REQ_ORG         "TIETOU_TECH"' >> vars
  echo 'set_var EASYRSA_REQ_EMAIL       "tietou@h3cadmin.cn"' >> vars
  echo 'set_var EASYRSA_REQ_OU          "Tietou_openVPN"' >> vars
  echo "vars文件中的机构信息字段已更新。"
}
# 生成证书和密钥
generate_certs() {
  echo "正在生成证书和密钥..."
  cd /usr/share/easy-rsa/
  # 初始化PKI目录结构
  ./easyrsa init-pki
  # 清空证书目录
  echo "yes" | ./easyrsa clean-all
  # 生成证书和密钥文件
  echo | ./easyrsa build-ca nopass
  echo | ./easyrsa gen-req ttserver nopass
  echo "yes" | ./easyrsa sign server ttserver
  ./easyrsa gen-dh
  echo | ./easyrsa gen-req ttclient nopass
  echo "yes" | ./easyrsa sign-req client ttclient
  echo "证书和密钥生成完成。"
}
# 创建SSL-cert目录
generate_dir() {
  # 获取当前时间
  current_time=$(date +"%Y%m%d%H%M")
  # 创建新的目录
  new_dir="/SSL-cert/${current_time}"
  mkdir -p "${new_dir}"
  # 将证书和密钥复制到新目录下
  cp /usr/share/easy-rsa/pki/ca.crt "${new_dir}/ca.crt"
  cp /usr/share/easy-rsa/pki/issued/ttserver.crt "${new_dir}/ttserver.crt"
  cp /usr/share/easy-rsa/pki/private/ttserver.key "${new_dir}/ttserver.key"
  cp /usr/share/easy-rsa/pki/issued/ttclient.crt "${new_dir}/ttclient.crt"
  cp /usr/share/easy-rsa/pki/private/ttclient.key "${new_dir}/ttclient.key"
  echo "证书和密钥已复制到目录:${new_dir}"
}
# 主函数
main() {
  install_easyrsa
  init_easyrsa
  update_vars
  generate_certs
  generate_dir
}
main;
exit;

并为此文件赋予可执行权限。

d3a05020a6a64dfeed47259ea0090244.png

找台干净的主机跑一下试试。

188e3fbb191905ed6765233dd96aecad.png

Nice,成功了!

d6b956f18ea12ec345d2114058c4bc17.gif

长按二维码
关注我们吧

b217eb2153135deeeb4b996215c85639.jpeg

029ed71fd3e6851cb7303b6d73f9cef2.png

手撸一个自动搭建openVPN服务器的SHELL脚本

配置优化:将openVPN的配置文件合4为1

通过Nginx做一个openVPN配置文件下载页面

巧用openVPN实现访问云资源池业务

OpenWrt部署配置openVPN服务器

OpenWrt配置openVPN客户端

openVPN配置实现客户端互访

openVPN+SmartDNS=openDNS or smartVPN?

openVPN + VPP = openVPP

OpenWrt配置单臂路由模式

如何通过iptables配置URL过滤黑名单?

如何通过iptables配置URL过滤白名单?

将iStoreOS部署到VMware Workstation

将iStoreOS部署到VMware ESXi变成路由器

strongSwan之ipsec命令手册

CentOS 7停服之后该怎么安装软件呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Danileaf_Guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值