trx
Published on 2016-05-28 / 24 Visits
0

openssl生成证书

通过以下脚本可生成本地证书

#!/bin/bash

# 询问用户想要生成哪种类型的证书
echo "请选择证书类型:"
echo "1) RSA"
echo "2) ECDSA"
read -p "选择一个选项(1或2):" CERT_TYPE

# 设置证书有效期为10年
VALID_DAYS=3650

# 交互式读取CSR信息
echo "请输入您的证书信息:"
read -p "国家(两个字母的国家代码,例如:CN):" COUNTRY
while [ ${#COUNTRY} -ne 2 ]; do
    echo "国家代码必须是两个大写字母。"
    read -p "国家(两个字母的国家代码,例如:CN):" COUNTRY
done
COUNTRY=$(echo $COUNTRY | tr '[:lower:]' '[:upper:]') # 转换为大写

read -p "省份(例如:Beijing):" STATE
read -p "城市(例如:Beijing):" LOCALITY
read -p "组织名称(例如:My Company Ltd):" ORGANIZATION
read -p "组织单位名称(例如:IT Department):" ORGANIZATIONAL_UNIT
read -p "公共名称(通常是您的域名,例如:example.com):" COMMON_NAME
read -p "电子邮件地址(例如:admin@example.com):" EMAIL
read -p "服务器IP地址(例如:IP:127.0.0.1,IP:192.168.1.1):" SERVER_IP

SUBJ="/C=$COUNTRY/ST=$STATE/L=$LOCALITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"
echo "subjectAltName=${SERVER_IP}" >subjectAltName.txt

# 根据用户选择生成密钥和证书
case $CERT_TYPE in
  1)
    # 生成RSA密钥
    openssl genrsa -out "$COMMON_NAME".key 4096
    # 生成CSR并指定信息
    openssl req -new -key "$COMMON_NAME".key -out "$COMMON_NAME".csr -subj "$SUBJ"
    # 自签名证书
    openssl x509 -req -days $VALID_DAYS -in "$COMMON_NAME".csr -signkey "$COMMON_NAME".key -out "$COMMON_NAME".crt -extfile subjectAltName.txt
    ;;
  2)
    # 生成ECDSA密钥
    openssl ecparam -genkey -name secp384r1 -out "$COMMON_NAME".key
    # 生成CSR并指定信息
    openssl req -new -key "$COMMON_NAME".key -out "$COMMON_NAME".csr -subj "$SUBJ"
    # 自签名证书
    openssl x509 -req -days $VALID_DAYS -in "$COMMON_NAME".csr -signkey "$COMMON_NAME".key -out "$COMMON_NAME".crt -extfile subjectAltName.txt
    ;;
  *)
    echo "无效的选项。请重新运行脚本并选择1或2。"
    exit 1
    ;;
esac

# 检查证书文件是否已创建
if [ -f "$COMMON_NAME.crt" ]; then
    echo "证书生成成功。"
    rm "$COMMON_NAME".csr # 删除CSR文件
else
    echo "生成证书时发生错误,请检查输出信息确定问题所在。"
fi