生成高安全性SSL/TLS证书的完整方案

8   /   0   /   0   /   0   /   发布于 26天前
# 1. 创建安全的证书配置 ### 1.1 创建配置文件 `openssl.cnf` ``` [ req ] default_bits = 4096 default_md = sha256 prompt = no encrypt_key = no string_mask = utf8only distinguished_name = req_distinguished_name x509_extensions = v3_ca req_extensions = v3_req [ req_distinguished_name ] countryName = CN stateOrProvinceName = State localityName = City organizationName = Your Organization organizationalUnitName = IT Department commonName = yourdomain.com emailAddress = admin@yourdomain.com [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ v3_req ] basicConstraints = CA:FALSE keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName = @alt_names subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer [ alt_names ] DNS.1 = yourdomain.com DNS.2 = www.yourdomain.com DNS.3 = *.yourdomain.com DNS.4 = localhost IP.1 = 127.0.0.1 IP.2 = ::1 ``` ## 2. 生成高安全性证书的完整脚本 ### 2.1 主生成脚本 `generate_cert.sh` ``` #!/bin/bash # 设置变量 CERT_DIR="certs" CONF_FILE="openssl.cnf" DAYS_VALID=365 KEY_SIZE=4096 CURVE_NAME="prime256v1" # ECC曲线,兼容性好 # 创建目录 mkdir -p ${CERT_DIR} cd ${CERT_DIR} echo "=== 生成高安全性SSL/TLS证书 ===" echo "" # 1. 生成ECC私钥(更安全,性能更好) echo "1. 生成ECC私钥..." openssl ecparam -genkey -name ${CURVE_NAME} -out server.key openssl ec -in server.key -out server.key -aes256 -passout pass:temp_password # 2. 生成RSA私钥(备用,兼容旧系统) echo "2. 生成RSA私钥..." openssl genrsa -aes256 -out server_rsa.key -passout pass:temp_password 4096 # 3. 移除密码(用于服务器部署) echo "3. 创建无密码的私钥副本..." openssl ec -in server.key -passin pass:temp_password -out server_unencrypted.key openssl rsa -in server_rsa.key -passin pass:temp_password -out server_rsa_unencrypted.key # 4. 生成证书签名请求(CSR) echo "4. 生成证书签名请求..." openssl req -new -key server.key -passin pass:temp_password -out server.csr \ -config ../${CONF_FILE} -extensions v3_req # 5. 生成自签名根证书 echo "5. 生成自签名根证书..." openssl req -x509 -new -key server.key -passin pass:temp_password \ -days ${DAYS_VALID} -out ca.crt -config ../${CONF_FILE} \ -extensions v3_ca # 6. 生成服务器证书 echo "6. 生成服务器证书..." openssl x509 -req -in server.csr -CA ca.crt -CAkey server.key \ -passin pass:temp_password -CAcreateserial \ -days ${DAYS_VALID} -out server.crt \ -extfile ../${CONF_FILE} -extensions v3_req # 7. 创建证书链文件 echo "7. 创建证书链文件..." cat server.crt ca.crt > server_chain.crt # 8. 生成PKCS#12格式(用于Windows) echo "8. 生成PKCS#12格式证书..." openssl pkcs12 -export \ -in server.crt \ -inkey server_unencrypted.key \ -certfile ca.crt \ -out server.pfx \ -passout pass:YourSecurePasswordHere \ -name "Your Domain Certificate" # 9. 生成PEM格式(包含私钥和证书,用于Nginx/Apache) echo "9. 创建PEM格式文件..." cat server_unencrypted.key server.crt ca.crt > server.pem # 10. 设置权限 chmod 600 *.key chmod 644 *.crt *.pem *.pfx echo "" echo "=== 证书生成完成 ===" echo "" echo "生成的文件:" echo " ca.crt - 根证书(需要导入到信任存储)" echo " server.crt - 服务器证书" echo " server.key - ECC私钥(加密)" echo " server_unencrypted.key - ECC私钥(无密码)" echo " server.pem - PEM格式(包含私钥和证书链)" echo " server.pfx - PKCS#12格式(用于Windows)" echo " server_chain.crt - 完整的证书链" echo "" echo "=== 下一步操作 ===" echo "1. 将 ca.crt 导入到系统的信任根证书存储" echo "2. 配置服务器使用 server.crt 和 server_unencrypted.key" echo "3. Windows系统可导入 server.pfx" ``` ## 3. 系统安装指南 ### 3.1 Linux系统安装脚本 `install_certs_linux.sh` ``` #!/bin/bash # Linux证书安装脚本 CERT_DIR="certs" echo "=== Linux证书安装 ===" echo "" # 安装到系统证书存储 echo "1. 安装根证书到系统信任存储..." sudo cp ${CERT_DIR}/ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates echo "2. 安装到Nginx..." sudo mkdir -p /etc/nginx/ssl sudo cp ${CERT_DIR}/server.crt /etc/nginx/ssl/ sudo cp ${CERT_DIR}/server_unencrypted.key /etc/nginx/ssl/ sudo chmod 600 /etc/nginx/ssl/server_unencrypted.key echo "3. 安装到Apache..." sudo mkdir -p /etc/apache2/ssl sudo cp ${CERT_DIR}/server.crt /etc/apache2/ssl/ sudo cp ${CERT_DIR}/server_unencrypted.key /etc/apache2/ssl/ sudo chmod 600 /etc/apache2/ssl/server_unencrypted.key # 创建Nginx配置示例 cat > nginx-ssl-example.conf << 'EOF' server { listen 443 ssl http2; server_name yourdomain.com www.yourdomain.com; # 证书路径 ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server_unencrypted.key; # 启用OCSP装订 ssl_stapling on; ssl_stapling_verify on; # DH参数(增强安全性) ssl_dhparam /etc/nginx/dhparam.pem; # SSL优化设置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; # 启用HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # 其他配置... root /var/www/html; index index.html; } EOF echo "" echo "4. 生成DH参数(增强安全性)..." sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048 echo "" echo "=== Linux安装完成 ===" ``` ### 3.2 Windows安装指南 `install_windows.txt` ``` REM Windows证书安装步骤 @echo off echo === Windows证书安装 === echo. echo 方法1: 通过MMC控制台 echo 1. 运行 mmc echo 2. 文件 -> 添加/删除管理单元 echo 3. 选择"证书" -> 计算机账户 echo 4. 右键"受信任的根证书颁发机构" -> 所有任务 -> 导入 echo 5. 选择 certs\ca.crt echo. echo 方法2: 通过certutil命令 certutil -addstore -f "ROOT" certs\ca.crt echo. echo 服务器安装: 导入 server.pfx echo 1. 运行 mmc -> 证书 -> 个人 echo 2. 右键"个人" -> 所有任务 -> 导入 echo 3. 选择 certs\server.pfx echo 4. 输入密码: YourSecurePasswordHere echo. echo === 完成 === ``` ## 4. 证书验证脚本 ``` #!/bin/bash # verify_cert.sh CERT_DIR="certs" echo "=== 证书验证 ===" echo "" # 验证私钥 echo "1. 验证私钥..." openssl ec -in ${CERT_DIR}/server_unencrypted.key -noout -text 2>/dev/null && echo "ECC私钥有效" || echo "ECC私钥无效" # 验证证书 echo "" echo "2. 验证证书..." openssl x509 -in ${CERT_DIR}/server.crt -noout -text | grep -A1 "Subject Alternative Name" # 验证证书链 echo "" echo "3. 验证证书链..." openssl verify -CAfile ${CERT_DIR}/ca.crt ${CERT_DIR}/server.crt # 检查有效期 echo "" echo "4. 证书有效期:" openssl x509 -in ${CERT_DIR}/server.crt -noout -dates # 检查密钥类型 echo "" echo "5. 证书公钥类型:" openssl x509 -in ${CERT_DIR}/server.crt -noout -text | grep "Public Key" # 测试SSL连接 echo "" echo "6. SSL连接测试:" echo " 启动测试服务器: openssl s_server -accept 4443 -cert ${CERT_DIR}/server.crt -key ${CERT_DIR}/server_unencrypted.key" echo " 连接测试: openssl s_client -connect localhost:4443 -CAfile ${CERT_DIR}/ca.crt" ``` ## 5. 安全强化配置 ### 5.1 创建OCSP响应文件(如使用) ``` #!/bin/bash # 生成OCSP响应 openssl ocsp -port 8888 -text \ -index index.txt \ -CA certs/ca.crt \ -rkey certs/ocsp.key \ -rsigner certs/ocsp.crt ``` ## 6. 使用说明 ### 快速开始: ``` # 1. 编辑openssl.cnf,修改域名和组织信息 vim openssl.cnf # 2. 生成证书 chmod +x generate_cert.sh ./generate_cert.sh # 3. Linux系统安装 chmod +x install_certs_linux.sh sudo ./install_certs_linux.sh # 4. Windows系统安装 # 按照install_windows.txt说明操作 # 5. 验证 ./verify_cert.sh ``` ## 7. 重要安全建议 1. **私钥保护**: * 生产环境中保持私钥加密 * 使用密码保护server.key文件 * server\_unencrypted.key仅用于服务器配置 2. **证书轮换**: * 设置日历提醒,在到期前30天更新 * 使用自动化工具管理证书生命周期 3. **浏览器兼容**: * 包含所有必要的SAN条目 * 使用正确的证书链 * 支持TLS 1.2+协议 4. **监控**: * 监控证书过期时间 * 设置自动化续期提醒 这个方案提供了: * ✅ 支持ECC和RSA双算法 * ✅ 包含SAN扩展(现代浏览器必需) * ✅ 生成PFX格式(Windows友好) * ✅ 包含完整的证书链 * ✅ 提供详细的安装指南 * ✅ 满足现代安全标准 证书安装后,在Chrome、Firefox、Edge等浏览器中访问时不会出现安全警告。
  • 共 0 条回复
  • 需要登录 后方可回复, 如果你还没有账号请点击这里注册
梦初醒 茅塞开
  • 不经他人苦,莫劝他人善。
  • 能量足,心态稳,温和坚定可以忍。
  • 辛苦决定不了收入,真正决定收入的只有一个,就是不可替代性。
  • 要么忙于生存,要么赶紧去死!
  • 内心强大到混蛋,比什么都好!
  • 规范流程比制定制度更重要!
  • 立志需要高远,但不能急功近利;
    行动需要迅速,却不可贪图速成。
  • 不要强求人品,要设计高效的机制。
  • 你弱的时候,身边都是鸡零狗碎;
    你强的时候,身边都是风和日丽。
  • 机制比人品更可靠,契约比感情更可靠。
  • 合作不意味着没有冲突,却是控制冲突的最好方法。
  • 误解是人生常态,理解本是稀缺的例外。
  • 成功和不成功之间,只差一次坚持!
  • 祁连卧北雪,大漠壮雄关。
  • 利益顺序,过程公开,机会均等,付出回报。