掌握 Debian 系统下 OpenSSL 证书管理的实用技巧

一 安装与准备
- 检查是否已经安装 OpenSSL:先运行命令查看当前版本信息
- 命令:
openssl version
- 命令:
- 安装 OpenSSL 工具与开发库(未安装时执行)
- 命令:
sudo apt update && sudo apt install openssl libssl-dev
- 命令:
- 说明:
libssl-dev主要用于编译依赖或调用 OpenSSL API 的程序;如果只是日常生成、签发和部署 SSL 证书,通常只安装 openssl 即可满足需求。
二 生成私钥与 CSR
- 生成带密码保护的 RSA 私钥(2048 位)
- 命令:
openssl genpkey -algorithm RSA -out private.key -aes256
- 命令:
- 生成 CSR(证书签名请求)
- 命令:
openssl req -new -key private.key -out server.csr - 交互填写:C/ST/L/O/OU/CN(其中 CN 通常建议填写域名),也可以按需补充 Email 等信息字段
- 命令:
- 补充:如果需要生成不加密的私钥(更适合自动化部署,但安全性相对较低),可使用
- 命令:
openssl genrsa -out private.key 2048
- 命令:
- 提示:私钥文件必须严格保管,文件权限建议设置为 600;而 CSR 文件可以安全地提交给 CA 机构进行签发。
三、自签名证书的生成与服务器部署
- 生成 自签名 SSL 证书(有效期 365 天)
- 命令:
openssl x509 -req -days 365 -in server.csr -signkey private.key -out server.crt
- 命令:
- 部署到 Nginx
- 建议目录:
sudo mkdir -p /etc/nginx/ssl && sudo chmod 700 /etc/nginx/ssl - 复制文件:
sudo cp server.crt /etc/ssl/certs/ && sudo cp private.key /etc/ssl/private/ - 配置片段:
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/private.key;
} - 使配置生效:
sudo nginx -t && sudo systemctl restart nginx
- 建议目录:
- 部署到 Apache
- 配置片段:
SSLEngine on
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/private.key - 使配置生效:
sudo a2enmod ssl && sudo systemctl restart apache2
- 配置片段:
- 证书链配置(使用中间 CA 时)
- 合并顺序:服务器证书在前,中间证书在后
- 命令:
cat server.crt intermediate.crt > server-chain.crt
- 命令:
- Nginx 使用:
ssl_certificate /path/to/server-chain.crt; - Apache 使用:
SSLCertificateChainFile /path/to/intermediate.crt;(或直接合并到同一个证书文件中)
- 合并顺序:服务器证书在前,中间证书在后
四 验证与排错
- 查看证书详细内容
- 命令:
openssl x509 -in server.crt -text -noout
- 命令:
- 查看证书有效期
- 命令:
openssl x509 -in server.crt -noout -dates
- 命令:
- 验证证书是否由指定 CA 正确签发
- 命令:
openssl verify -CAfile ca_bundle.crt server.crt
- 命令:
- 在线连接诊断(适用于 SNI 场景)
- 命令:
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com
- 命令:
- Nginx/Apache 常见排错方法
- 语法检查:
sudo nginx -t或sudo apache2ctl configtest - 日志定位:
/var/log/nginx/error.log、/var/log/apache2/error.log - 权限与路径检查:确认 SSL 证书和私钥路径正确,权限设置合理(私钥建议为 600)。
- 语法检查:
五 续期 吊销 与系统 CA 更新
- 续期
- Let’s Encrypt 证书:可先测试续期
sudo certbot renew --dry-run,确认无误后正式执行sudo certbot renew - 续期完成后重启相关服务:
sudo systemctl restart nginx或sudo systemctl restart apache2 - 自签名证书:重新执行“生成自签名证书”步骤,替换旧证书文件后再重启 Web 服务
- Let’s Encrypt 证书:可先测试续期
- 吊销与 CRL(适用于自建 CA 或私有 CA 场景)
- 撤销证书:
openssl ca -config /etc/ssl/openssl.cnf -revoke server.crt - 生成或更新 CRL:
openssl ca -config /etc/ssl/openssl.cnf -gencrl -out crl.pem - 分发 CRL:将 crl.pem 发布到客户端或服务器能够访问的位置
- 验证证书是否已被吊销:
openssl verify -CAfile ca_bundle.crt -untrusted crl.pem server.crt
- 撤销证书:
- 系统 CA 证书更新(维护信任链完整性)
- 命令:
sudo apt update && sudo apt install --only-upgrade ca-certificates && sudo update-ca-certificates
- 命令:
- 安全与维护
- 定期更新 OpenSSL 及相关软件包:
sudo apt update && sudo apt upgrade libssl-dev - 避免继续使用过时加密算法和过短密钥长度,建议优先选择 RSA 2048+ 或 ECC 方案,以提升 Debian 服务器证书安全性。
- 定期更新 OpenSSL 及相关软件包:
