--- name: ssl-tls description: SSL/TLS 证书 version: 1.0.0 author: terminal-skills tags: [security, ssl, tls, certificate, openssl, letsencrypt] --- # SSL/TLS 证书 ## 概述 证书申请、配置、自动续期技能。 ## OpenSSL 基础 ### 生成私钥 ```bash # RSA 私钥 openssl genrsa -out private.key 2048 openssl genrsa -out private.key 4096 # 带密码保护 openssl genrsa -aes256 -out private.key 2048 # ECDSA 私钥 openssl ecparam -genkey -name prime256v1 -out private.key ``` ### 生成 CSR ```bash # 交互式 openssl req -new -key private.key -out request.csr # 非交互式 openssl req -new -key private.key -out request.csr \ -subj "/C=CN/ST=Beijing/L=Beijing/O=Company/CN=example.com" # 带 SAN openssl req -new -key private.key -out request.csr \ -config <(cat </dev/null | \ openssl x509 -noout -enddate | cut -d= -f2) EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s) NOW_EPOCH=$(date +%s) DIFF=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 )) if [ $DIFF -lt $DAYS ]; then echo "WARNING: ${DOMAIN} 证书将在 ${DIFF} 天后过期" fi ``` ### 场景 3:批量续期 ```bash #!/bin/bash certbot renew --deploy-hook "systemctl reload nginx" ``` ## 故障排查 | 问题 | 排查方法 | |------|----------| | 证书不信任 | 检查证书链、CA | | 域名不匹配 | 检查 CN、SAN | | 证书过期 | 检查有效期、续期 | | 握手失败 | 检查协议、密码套件 | ```bash # 测试 SSL openssl s_client -connect example.com:443 # 检查证书链 openssl s_client -connect example.com:443 -showcerts # SSL Labs 测试 curl https://api.ssllabs.com/api/v3/analyze?host=example.com ```