Linux下OpenSSL配置指南
一 安装与版本确认
- 发行版仓库安装(推荐)
- Debian/Ubuntu:sudo apt update && sudo apt install -y openssl
- CentOS/RHEL:sudo yum install -y openssl
- 源码编译安装(需要新版或自定义路径时)
- 下载并解压:tar -xzf openssl-x.x.x.tar.gz && cd openssl-x.x.x
- 配置与构建:./config --prefix=/usr/local/openssl shared zlib && make -j$(nproc) && sudo make install
- 动态库缓存:echo “/usr/local/openssl/lib” | sudo tee /etc/ld.so.conf.d/openssl.conf && sudo ldconfig
- 可执行文件与路径
- 软链:sudo ln -sfn /usr/local/openssl/bin/openssl /usr/bin/openssl
- 或环境变量:echo ‘export PATH=/usr/local/openssl/bin:$PATH’ | sudo tee /etc/profile.d/openssl.sh && source /etc/profile.d/openssl.sh
- 版本与路径核验
- 查看版本与编译配置:openssl version -a
- 查找配置文件:openssl version -a 中的 OPENSSLDIR,或用 find / -name openssl.cnf 2>/dev/null
- 注意开发与运行时依赖:Debian/Ubuntu 开发包为 libssl-dev,RHEL/CentOS 为 openssl-devel。
二 配置文件 openssl.cnf 与查找路径
- 查找与优先级
- 环境变量优先:若设置 OPENSSL_CONF,将优先使用该路径
- 查看编译时路径:openssl version -a 显示的 OPENSSLDIR 下通常有 openssl.cnf
- 常见位置:/etc/ssl/openssl.cnf、/usr/local/openssl/ssl/openssl.cnf
- 核心段落与作用
- [default_section]:全局默认变量(如目录、证书与CRL路径)
- [ca] 与 [CA_default]:CA根目录、数据库索引、序列号、证书与私钥、默认扩展等
- [req]:生成CSR/自签时的默认参数(密钥长度、DN段、扩展)
- [v3_req] / [v3_ca]:证书扩展(如 keyUsage、extendedKeyUsage、subjectAltName)
- [policy_match] / [policy_anything]:申请与CA证书的字段匹配策略
- 最小可用配置要点
- 创建CA目录结构:mkdir -p demoCA/{certs,crl,newcerts,private}
- 初始化数据库与序列:touch demoCA/index.txt && echo 01 > demoCA/serial
- 在 [CA_default] 中设置:dir、certs、crl_dir、database、new_certs_dir、certificate、serial、crlnumber、crl、private_key、RANDFILE、x509_extensions
- 在 [req] 中设置:default_bits、distinguished_name、req_extensions
- 在 [v3_req]/[v3_ca] 中按需添加扩展(如 subjectAltName = @alt_names)。
三 证书与CA操作速查
- 生成私钥与CSR
- 生成私钥:openssl genpkey -algorithm RSA -out server.key -aes256 -pkeyopt rsa_keygen_bits:2048/4096
- 生成CSR:openssl req -new -key server.key -out server.csr
- 自签名证书(测试环境)
- 单步:openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
- 分步:openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365
- 查看与验证
- 查看证书:openssl x509 -in server.crt -text -noout
- 验证证书链:openssl verify -CAfile ca.crt server.crt
- 自建根CA并签发服务器证书
- 根CA:openssl req -x509 -newkey rsa:2048 -keyout ca.key -out ca.crt -days 3650 -nodes -subj “/CN=MyRootCA”
- 签发服务器证书:openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
- 生成DH参数(可选,提升TLS密钥交换安全性)
- openssl dhparam -out dhparam.pem 2048。
四 在 Nginx 与 Apache 中启用 HTTPS
- Nginx
- 基本配置片段:
- 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;
- 客户端证书校验(可选):
- ssl_client_certificate /path/to/ca.crt; ssl_verify_client on;
- 生效:sudo systemctl restart nginx
- Apache
- 启用模块:sudo a2enmod ssl
- 虚拟主机示例:
- <VirtualHost *:443>
- SSLEngine on
- SSLCertificateFile /path/to/certificate.crt
- SSLCertificateKeyFile /path/to/private.key
- 生效:sudo systemctl restart apache2
- 免费证书(Let’s Encrypt,生产环境推荐)
- sudo apt install -y certbot python3-certbot-nginx
- sudo certbot --nginx -d your_domain.com。
五 安全与排错要点
- 协议与套件
- 仅启用 TLSv1.2/TLSv1.3;使用高安全强度的套件(如 ECDHE + AEAD),避免 DES/MD5/RC4 等弱算法
- 私钥与权限
- 私钥仅对必要账户可读:chmod 600 server.key;妥善保管,避免提交到代码仓库
- 配置与文件
- 使用 subjectAltName(SAN)覆盖所有域名与IP;为服务器生成并配置 dhparam.pem
- 证书链完整:部署时包含中间证书(Nginx 可用 ssl_trusted_certificate)
- 常见问题排查
- 命令报找不到配置:检查 OPENSSL_CONF 与 OPENSSLDIR;必要时显式指定 -config
- 开发编译报头缺失:安装 libssl-dev(Debian/Ubuntu)或 openssl-devel(RHEL/CentOS)
- 动态库无法加载:确认 ldconfig 已执行,库路径在 /etc/ld.so.conf.d/
- 服务启动失败:查看错误日志(如 journalctl -u nginx),核对证书与私钥路径、权限与协议套件配置。