温馨提示×

OpenSSL在Linux服务器配置中的应用

小樊
35
2025-12-02 20:00:54
栏目: 云计算

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 输出定位握手失败、证书不匹配、链不完整等问题。

0