< 自用文儿 制作 (自签名) 证书脚本 > script: certificate-generator.sh (分享)

devtools/2025/2/3 20:02:32/

# Created by Dave on 1Feb.2025

原因:

手机浏览器不能解析 NAS 主机名,如果用 DNS 就要变得太复杂。改回用 IP 方式来打开 Navigator 主页上面这些在 docker 上面运行的 20来个 web apps 应该是最优解。

觉得证书,还会再生成的,就写了这个脚本 script: certificate-generator.sh 

功能:

  • openssl 安装包会自动检测,有跳过,没有会安装。
  • 有简单 UI :选择 IP, 域名
  • 在证书内容输入时:提示也有默认值
  • 在执行脚本目录下生成 2 个证书文件:
    •  server.key (private key) 私钥
    •  server.crt (certificate) 证书
  • 自动删除配置文件  (如果需要保留,注释倒数第二行)

界面:

SCRIPT: certificate-generator.sh

#!/bin/bash
# Created by Dave on 1Feb.2025
# History
# Version 0.1 created batch script
# Version 0.2 used cat EOF
# Version 0.3 Added UI
# Version 0.4 Improved UI and validate functions for IP/Domain Name 
# Version 0.5 Added OpenSSL check and installation
#
## Check if OpenSSL is installed
if ! command -v openssl &> /dev/null; thenecho "OpenSSL is not installed. Installing now..."sudo apt updatesudo apt install -y openssl# Check if installation was successfulif ! command -v openssl &> /dev/null; thenecho "Failed to install OpenSSL. Please install it manually."exit 1fiecho "OpenSSL has been successfully installed."
fivalidate_ip() {local ip=$1if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; thenreturn 0elsereturn 1fi
}validate_domain() {local domain=$1if [[ $domain =~ ^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$ ]]; thenreturn 0elsereturn 1fi
}clear
echo "=== SSL Certificate Generation Tool ==="
echo "Please select certificate type:"
echo "1) IP Address"
echo "2) Domain Name"
read -p "Enter your choice (1 or 2): " cert_typecase $cert_type in1)while true; doread -p "Enter IP address: " addressif validate_ip "$address"; thenbreakelseecho "Invalid IP address format, please try again"fidonetype="IP";;2)while true; doread -p "Enter domain name: " addressif validate_domain "$address"; thenbreakelseecho "Invalid domain name format, please try again"fidonetype="DNS";;*)echo "Invalid option"exit 1;;
esacread -p "Enter country code (e.g., CN): " country
read -p "Enter state/province (Beijing): " state
read -p "Enter city (Beijing): " city
read -p "Enter organization name (Freedom China): " org
read -p "Enter department name (Personal): " unit
read -p "Enter certificate validity (days 365): " dayscountry=${country:-CN}
state=${state:-Beijing}
city=${city:-Beijing}
org=${org:-Freedom China}
unit=${unit:-Personal}
days=${days:-365}cat > openssl.cnf <<EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_req[dn]
C = $country
ST = $state
L = $city
O = $org
OU = $unit
CN = $address[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names[alt_names]
$type.1 = $address
EOFecho "Generating private key..."
openssl genrsa -out server.key 2048echo "Generating certificate signing request..."
openssl req -new -key server.key -out server.csr -config openssl.cnfecho "Generating self-signed certificate..."
openssl x509 -req -days $days -in server.csr -signkey server.key -out server.crt \-extensions v3_req -extfile openssl.cnfecho "Verifying certificate..."
openssl x509 -in server.crt -text -nooutecho "
Certificate generation completed! Generated files:
- server.key (private key)
- server.crt (certificate)
- server.csr (certificate signing request)"
echo
#rm -f ./openssl.cnf 2> /dev/null echo "The file openssl.cnf (configuration file) has been removed."
rm -f openssl.cnf server.csr 2>/dev/null && echo "Removed configuration and CSR files."
echo "END"

注意事项:

这个脚本是使用执行 openssl 返回值,来检测 openssl 软件安装,如果路径不对也会报错。

脚本使用 app 来安装 openssl,不同安装命令也会报错,比如:CentOS/RHEL 用的是:“sudo yum install openssl” 。

运行脚本,要先给文件执行权: chmod +x certificate-generator.sh

脚本生成的是“自签名证书”,非互联网使用的。

server.csr 实际上是一个中间文件,正规的 CA 机构使用这个 CSR 文件生成正式的证书给你/你的组织,结束前会删除。

99.99% 能上自签名证书的主儿,都用不到 server.csr 这个文件。 如果你是那 0.001% ,可以移除脚本中的倒数第二行注释。


http://www.ppmy.cn/devtools/155817.html

相关文章

机器人基础深度学习基础

参考&#xff1a; &#xff08;1&#xff09;【具身抓取课程-1】机器人基础 &#xff08;2&#xff09;【具身抓取课程-2】深度学习基础 1 机器人基础 从平面二连杆理解机器人学 正运动学&#xff1a;从关节角度到末端执行器位置的一个映射 逆运动学&#xff1a;已知末端位置…

浅析服务器虚拟化技术

服务器虚拟化技术是现代信息技术领域的一项重要创新,通过将物理服务器的硬件资源(如CPU、内存、存储和网络)抽象化,实现多个虚拟服务器(虚拟机,VMs)的运行。这种技术不仅提高了资源利用率,还简化了管理流程,降低了成本,并为云计算和大数据发展提供了坚实的基础。以下…

100.3 AI量化面试题:解释配对交易(Pairs Trading)的原理,并说明如何选择配对股票以及设计交易信号

目录 0. 承前1. 配对交易基本原理1.1 什么是配对交易1.2 基本假设 2. 配对选择方法2.1 相关性分析2.2 协整性检验 3. 价差计算方法3.1 简单价格比率3.2 回归系数法 4. 交易信号设计4.1 标准差方法4.2 动态阈值方法 5. 风险管理5.1 止损设计5.2 仓位管理 6. 策略评估6.1 回测框架…

浏览器同源策略:从“源”到安全限制的全面解析

一、什么是“源”&#xff08;Origin&#xff09;&#xff1f; 在浏览器中&#xff0c;“源”是 Web 安全的核心概念。一个“源”由三部分组成&#xff1a; 协议&#xff08;Protocol&#xff09;&#xff1a;如 http://、https://、ftp:// 域名&#xff08;Host&#xff09;…

GPIO配置通用输出,推挽输出,开漏输出的作用,以及输出上下拉起到的作用

通用输出说明&#xff1a; ①输出原理&#xff1a; 对输出数据寄存器的对应位写0 或 1&#xff0c;就可以控制对应编号的IO口输出低/高电平 ②输出类型 推挽输出&#xff1a;IO口可以输出高电平&#xff0c;也可以输出低电平 开漏输出&#xff1a;IO口只能输出低电平 所以…

【Linux系统】计算机世界的基石:冯诺依曼架构与操作系统设计

文章目录 一.冯诺依曼体系结构1.1 为什么体系结构中要存在内存&#xff1f;1.2 冯诺依曼瓶颈 二.操作系统2.1 设计目的2.2 系统调用与库函数 一.冯诺依曼体系结构 冯诺依曼体系结构&#xff08;Von Neumann Architecture&#xff09;是计算机的基本设计理念之一&#xff0c;由…

JVM运行时数据区域-附面试题

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…

vector容器(详解)

本文最后是模拟实现全部讲解&#xff0c;文章穿插有彩色字体&#xff0c;是我总结的技巧和关键 1.vector的介绍及使用 1.1 vector的介绍 https://cplusplus.com/reference/vector/vector/&#xff08;vector的介绍&#xff09; 了解 1. vector是表示可变大小数组的序列容器。…