OpenSSL在Linux服务器配置中的核心应用
一 安装与快速自检
- 在主流发行版上安装并检查版本:
- Ubuntu/Debian:sudo apt update && sudo apt install -y openssl
- CentOS/RHEL:sudo yum install -y openssl
- 验证:openssl version -a(关注版本与 OPENSSLDIR 等关键信息)
- 大多数系统默认已预装 OpenSSL;如无,使用包管理器安装即可。
二 证书与密钥全流程
- 生成私钥(推荐 RSA 2048/4096,可用 -aes256 加密私钥)
- openssl genpkey -algorithm RSA -out server.key -aes256
- 生成证书签名请求 CSR(Common Name 建议填写实际域名)
- openssl req -new -key server.key -out server.csr
- 生成自签名证书(测试环境)
- 一步法:openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
- 两步法:先生成 CSR,再 openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
- 查看证书信息
- openssl x509 -text -noout -in server.crt
- 证书格式与转换要点
- PEM(Base64,常见后缀 .pem/.crt/.cer),DER(二进制,.der/.cer)
- 合并证书链:cat ca1.pem ca2.pem > ca_chain.pem
- 导出/验证 PKCS#12(.p12/.pfx,适合导入浏览器/Java 应用)
- 导出:openssl pkcs12 -inkey private_key.pem -in public_certificate.pem -export -out cert.p12 -CAfile ca_chain.pem -chain
- 验证:openssl pkcs12 -in cert.p12 -noout -info
- 自签名证书仅用于测试/内网;生产环境请使用受信任 CA 签发证书。
三 在 Nginx 与 Apache 中启用 HTTPS
- Nginx 示例(/etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf)
- 关键指令:
- listen 443 ssl; server_name your_domain.com;
- ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key;
- 推荐协议与套件:ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;
- 生效:sudo systemctl restart nginx
- Apache 示例(Debian 系启用模块与站点)
- 启用模块:sudo a2enmod ssl
- 虚拟主机关键指令:
- SSLEngine on
- SSLCertificateFile /path/to/cert.pem
- SSLCertificateKeyFile /path/to/key.pem
- 生效:sudo systemctl restart apache2
- 生产证书获取(Let’s Encrypt + Certbot)
- 安装:sudo apt install -y certbot python3-certbot-nginx
- 申请并自动配置:sudo certbot --nginx -d your_domain.com
- 自动续期:sudo systemctl enable --now certbot.timer(证书有效期通常为 90 天)
四 客户端证书认证与内部 CA 搭建
- 搭建内部 CA 并签发服务器证书
- 生成 CA 私钥与根证书:
- openssl genpkey -algorithm RSA -out ca.key -aes256
- openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt -subj “/C=CN/ST=YourState/L=YourCity/O=YourOrg/CN=YourCA”
- 签发服务器证书(使用 CA 签名 CSR)
- openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
- Nginx 启用客户端证书校验
- 在 server 段新增:
- ssl_client_certificate /path/to/ca.crt
- ssl_verify_client on
- 重启:sudo systemctl restart nginx
- 适用场景:对管理接口、API 等需要强身份校验的服务启用双向 TLS(mTLS)。
五 连通性测试与运维加固
- 连通性与握手测试
- 查看服务端证书链与握手:openssl s_client -connect your_domain.com:443 -servername your_domain.com -showcerts
- 简单获取与验证:curl -Iv https://your_domain.com
- 本地调测可用 OpenSSL 简易服务器:openssl s_server -www -cert cert.pem -key key.pem -port 4433
- 安全与运维要点
- 协议与套件:仅启用 TLS 1.2/1.3,禁用 SSLv3/TLS1.0/1.1 与弱套件;优先 ECDHE 密钥交换与 AEAD 套件
- 证书与链:部署包含中间证书的完整链;定期轮换,设置监控告警
- 私钥保护:对私钥文件设置最小权限(如 600),必要时使用 HSM/KMS
- 合规与审计:开启 HSTS,对外服务仅开放 443,对内管理接口结合 mTLS 与来源限制
- 故障排查:结合错误日志、抓包与 s_client 输出定位握手失败、证书不匹配、链不完整等问题。