#!/bin/bash

sudo mkdir -p ca
sudo mkdir -p certs

# 设置域名变量
# 接收参数
# 第一个参数是域名, 例 sudo ./create_cert.sh demo.yiparts.debian
DOMAIN="$1"
# 检查是否传递了参数
if [ -z "$DOMAIN" ]; then
    echo "请输入一个域名: $0 <domain>"
    exit 1
fi
# 提取基础域名部分
if [[ "$DOMAIN" == *"*."* ]]; then
    echo "自签证书泛域名会被浏览器提示不安全"
    exit 1
fi

# 证书文件名
GUID=$DOMAIN
CA="CA-$GUID"
EMAIL="admin@qg.com"

# 去 CA 目录
cd ca

# 生成 CA 私钥 需要设置密码否则会被浏览器提示不安全
sudo openssl genrsa -des3 -out "$CA.key" 2048

# 生成 CA 证书 100年
sudo openssl req -x509 -new -nodes -key "$CA.key" -sha256 -days 36500 -out "$CA.crt" -subj "/CN=$DOMAIN/O=Qg Inc/OU=It/L=Guang Zhou/ST=Guang Dong/C=CN/emailAddress=$EMAIL"

# 去 CERTS 目录
cd ..
cd certs

# 生成 SSL 私钥
sudo openssl genrsa -out "$GUID.key" 2048

# 生成 SSL 证书请求（CSR）
sudo openssl req -new -key "$GUID.key" -out "$GUID.csr" -subj "/CN=$DOMAIN/O=Qg Inc/OU=It/L=Guang Zhou/ST=Guang Dong/C=CN/emailAddress=$EMAIL"

# 使用 CA 证书签署 SSL 证书，有效期 100 年
sudo openssl x509 -req -in "$GUID.csr" -out "$GUID.crt" -days 36500 -CA "../ca/$CA.crt" -CAkey "../ca/$CA.key" -CAcreateserial -extfile "../vhost.ext"

# 查看签署的证书信息
sudo openssl x509 -in "$GUID.crt" -noout -text

# 验证 SSL 证书
sudo openssl verify -CAfile "../ca/$CA.crt" "$GUID.crt"

echo "所有操作已完成。"