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

admin 2025年6月3日00:23:27评论14 views字数 5769阅读19分13秒阅读模式

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

正文共: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
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

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

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

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

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

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

cp /usr/share/easy-rsa/vars.example /usr/share/easy-rsa/vars
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

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

# 初始化Easy-RSA环境init_easyrsa() {echo"初始化Easy-RSA环境..."cd /usr/share/easy-rsa/# 复制vars.example为vars,避免覆盖if [ -f vars ]; then    mv vars vars.backupfi  cp vars.example varsecho"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       "[email protected]"'>> vars  echo 'set_var EASYRSA_REQ_OU          "Tietou openVPN"'>> vars  echo "vars文件中的机构信息字段已更新。"}

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

./easyrsa init-pki
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

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

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

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

./easyrsa build-ca nopass
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

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

./easyrsa gen-req ttserver nopass
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

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

./easyrsa sign server ttserver
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

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

./easyrsa gen-dh
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

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

./easyrsa gen-req ttclient nopass
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

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

./easyrsa sign-req client ttclient
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

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

./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 nopassecho | ./easyrsa gen-req ttserver nopassecho"yes" | ./easyrsa sign server ttserver  ./easyrsa gen-dhecho | ./easyrsa gen-req ttclient nopassecho"yes" | ./easyrsa sign-req client ttclientecho"证书和密钥生成完成。"}

为了方便管理,我们在/目录下创建一个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-RSAinstall_easyrsa() {echo"正在安装Easy-RSA..."  apt install -y easy-rsaecho"Easy-RSA安装完成。"}# 初始化Easy-RSA环境init_easyrsa() {echo"初始化Easy-RSA环境..."cd /usr/share/easy-rsa/# 备份vars.example为vars,避免覆盖if [ -f vars ]; then    mv vars vars.backupfi  cp vars.example varsecho"Easy-RSA环境初始化完成。"}# 更新vars文件中的机构信息字段update_vars() {echo"更新vars文件中的机构信息字段..."cd /usr/share/easy-rsa/# 向vars文件中插入机构信息字段echo'set_var EASYRSA_REQ_COUNTRY     "CN"' >> varsecho'set_var EASYRSA_REQ_PROVINCE    "Beijing"' >> varsecho'set_var EASYRSA_REQ_CITY        "Haidian"' >> varsecho'set_var EASYRSA_REQ_ORG         "TIETOU_TECH"' >> varsecho'set_var EASYRSA_REQ_EMAIL       "[email protected]"' >> varsecho'set_var EASYRSA_REQ_OU          "Tietou_openVPN"' >> varsecho"vars文件中的机构信息字段已更新。"}# 生成证书和密钥generate_certs() {echo"正在生成证书和密钥..."cd /usr/share/easy-rsa/# 初始化PKI目录结构  ./easyrsa init-pki# 清空证书目录echo"yes" | ./easyrsa clean-all# 生成证书和密钥文件echo | ./easyrsa build-ca nopassecho | ./easyrsa gen-req ttserver nopassecho"yes" | ./easyrsa sign server ttserver  ./easyrsa gen-dhecho | ./easyrsa gen-req ttclient nopassecho"yes" | ./easyrsa sign-req client ttclientecho"证书和密钥生成完成。"}# 创建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;

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

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

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

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

Nice,成功了!

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

长按二维码关注我们吧

在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本
在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本
手撸一个自动搭建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停服之后该怎么安装软件呢?

原文始发于微信公众号(铁军哥):在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月3日00:23:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   在Ubuntu系统手撸一个自动创建SSL证书的SHELL脚本https://cn-sec.com/archives/4124871.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息