在 Ubuntu 上配置 OpenSSL SSL 的完整步骤
一 安装与准备
- 更新索引并安装工具:
- sudo apt update
- sudo apt install -y openssl
- 确认版本:
- 说明:Ubuntu 通常已预装 OpenSSL;如未安装或需特定版本,可后续从源码编译安装(见文末“进阶与安全建议”)。
二 生成密钥与证书
- 生成私钥(推荐加密保存):
- openssl genpkey -algorithm RSA -out server.key -aes256
- 生成证书签名请求 CSR(Common Name 填你的域名,如:example.com):
- openssl req -new -key server.key -out server.csr
- 获取证书(二选一)
- 自签名(测试环境):
- openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
- 受信任证书(生产环境,Let’s Encrypt 免费):
- sudo apt install -y certbot python3-certbot-nginx
- sudo certbot --nginx -d example.com
- 证书链合并(如使用中间证书,常见于 CA 签发):
- cat server.crt intermediate.crt > server_fullchain.crt
- 文件权限建议:私钥仅 root 可读
三 在 Web 服务器中启用 SSL
- Apache
- 启用模块与站点:
- sudo a2enmod ssl
- sudo a2ensite default-ssl.conf
- 基本配置片段(/etc/apache2/sites-available/default-ssl.conf):
- SSLEngine on
- SSLCertificateFile /path/to/server.crt 或 /path/to/server_fullchain.crt
- SSLCertificateKeyFile /path/to/server.key
- 重启:sudo systemctl restart apache2
- Nginx
- 基本配置片段(/etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf 的 server 块):
- listen 443 ssl;
- server_name example.com;
- ssl_certificate /path/to/server.crt 或 /path/to/server_fullchain.crt;
- ssl_certificate_key /path/to/server.key;
- ssl_protocols TLSv1.2 TLSv1.3;
- ssl_ciphers HIGH:!aNULL:!MD5;
- 可选:将 80→443 强制跳转
- server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
- 重启:sudo systemctl restart nginx
四 验证与排错
- 命令行快速检查:
- openssl s_client -connect example.com:443 -servername example.com
- 浏览器访问 https://example.com 检查证书颁发者、有效期与域名匹配
- 在线检测:Qualys SSL Labs Server Test(ssllabs.com/ssltest/)
- 查看服务日志定位问题:
- Apache:journalctl -u apache2 -xe
- Nginx:journalctl -u nginx -xe
五 进阶与安全建议
- 强加密与协议(示例)
- 协议与套件:ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ‘ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384’;
- 启用 HSTS、OCSP Stapling、关闭压缩与会话票据(示例适用于 Apache,Nginx 有等价指令)
- 客户端证书验证(双向 TLS,按需)
- 生成 CA:openssl req -x509 -newkey rsa:4096 -keyout ca.key -sha256 -days 1024 -out ca.crt -subj “/C=CN/ST=State/L=City/O=Org/CN=MyCA”
- 签发服务器证书:openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
- Nginx 启用验证:
- ssl_client_certificate /path/to/ca.crt;
- ssl_verify_client on;
- 从源码编译 OpenSSL(仅在需要特定版本或高级定制时)
- 下载解压后:./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
- make -j$(nproc) && sudo make install
- 备份与软链:sudo mv /usr/bin/openssl /usr/bin/openssl.bak && sudo ln -sfn /usr/local/openssl/bin/openssl /usr/bin/openssl
- 库路径:echo ‘/usr/local/openssl/lib’ | sudo tee /etc/ld.so.conf.d/openssl.conf && sudo ldconfig
- 风险提示:替换系统 OpenSSL 可能影响系统组件稳定性,生产环境谨慎操作。