使用OpenSSL生成本地证书https+nginx

📅 2026/7/5 8:45:57 👁️ 阅读次数 📝 编程学习
使用OpenSSL生成本地证书https+nginx

一键生成证书、密钥脚本

#!/bin/bash CERT_DIR="./ssl" DOMAIN="example.com" DAYS=365 KEY_FILE="$CERT_DIR/$DOMAIN.key" CSR_FILE="$CERT_DIR/$DOMAIN.csr" CRT_FILE="$CERT_DIR/$DOMAIN.crt" PEM_FILE="$CERT_DIR/$DOMAIN.pem" mkdir -p "$CERT_DIR" echo "🔐 生成私钥..." openssl genrsa -out "$KEY_FILE" 2048 echo "📄 生成 CSR..." openssl req -new -key "$KEY_FILE" -out "$CSR_FILE" -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=$DOMAIN" echo "✅ 生成自签名证书..." openssl x509 -req -in "$CSR_FILE" -signkey "$KEY_FILE" -out "$CRT_FILE" -days "$DAYS" echo "📦 合并 PEM(可选)..." cat "$CRT_FILE" "$KEY_FILE" > "$PEM_FILE" ls -l "$CERT_DIR"

nginx配置

ssl_certificate /etc/ssl/example.com.crt; ssl_certificate_key /etc/ssl/example.com.key;

脚本解释

这是一个一键生成自签名SSL证书的Shell脚本,逐行解释如下:


脚本结构解析

1. Shebang & 配置变量

#!/bin/bashCERT_DIR="./ssl"# 证书输出目录(当前目录下ssl文件夹)DOMAIN="example.com"# 证书的通用名称(CN)DAYS=365# 证书有效期

2. 文件路径变量

KEY_FILE="$CERT_DIR/$DOMAIN.key"# 私钥文件CSR_FILE="$CERT_DIR/$DOMAIN.csr"# 证书签名请求CRT_FILE="$CERT_DIR/$DOMAIN.crt"# 证书文件(PEM格式)PEM_FILE="$CERT_DIR/$DOMAIN.pem"# 合并的PEM文件(证书+私钥)

3. 创建输出目录

mkdir-p"$CERT_DIR"# -p 表示递归创建,若目录存在则不报错

4. 生成私钥 (2048位RSA)

openssl genrsa-out"$KEY_FILE"2048
  • 输出文件:./ssl/example.com.key
  • -----BEGIN PRIVATE KEY-----开头

5. 创建CSR(免交互方式)

openssl req-new-key"$KEY_FILE"-out"$CSR_FILE"-subj"/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=$DOMAIN"
  • -subj参数:直接指定证书主题,避免交互式输入
    • C=CN:国家(China)
    • ST=Beijing:省份
    • L=Beijing:城市
    • O=MyCompany:组织
    • OU=IT:部门
    • CN=$DOMAIN:通用名称(域名)

6. 自签名证书

openssl x509-req-in"$CSR_FILE"-signkey"$KEY_FILE"-out"$CRT_FILE"-days"$DAYS"
  • 用私钥对CSR进行自签名
  • 输出:./ssl/example.com.crt

7. 合并PEM文件(可选)

cat"$CRT_FILE""$KEY_FILE">"$PEM_FILE"
  • 将证书和私钥合并成一个文件
  • 用途:某些服务(如Nginx)需要合并文件

8. 列出生成的证书文件

ls-l"$CERT_DIR"

最终生成的文件

执行后./ssl/目录下生成:

example.com.key # 私钥(敏感,勿泄露) example.com.csr # 证书请求(可丢弃) example.com.crt # 自签名证书 example.com.pem # 合并文件(证书+私钥)

使用场景

  • 测试/开发环境的HTTPS配置
  • 内部网络服务加密
  • CI/CD流水线中快速生成测试证书

⚠️ 注意事项

  • 自签名证书浏览器会显示不安全
  • 生产环境应使用CA机构签发的证书
  • 脚本路径为相对路径(./ssl),可在任意目录执行