1. 更新系统与OpenSSL至最新版本
保持Ubuntu系统和OpenSSL为最新版本是安全基础。运行以下命令更新系统及软件包:
sudo apt update && sudo apt upgrade
安装或升级OpenSSL(Ubuntu默认仓库提供最新稳定版):
sudo apt install openssl
验证版本(建议使用OpenSSL 3.x及以上,具备更完善的安全特性):
openssl version
2. 生成强密钥与自签名/CA证书
使用强参数生成私钥(推荐RSA 4096位或ECC 256位)和自签名证书(生产环境建议使用CA签发证书):
# 生成RSA 4096位私钥和有效期365天的自签名证书
openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/private/myserver.key -out /etc/ssl/certs/myserver.crt -days 365 -nodes
或分步生成(先生成私钥,再创建证书签名请求CSR):
# 生成私钥
openssl genrsa -out /etc/ssl/private/myserver.key 4096
# 创建CSR(需填写域名、组织等信息)
openssl req -new -key /etc/ssl/private/myserver.key -out myserver.csr
关键要求:私钥文件权限必须设为600
(仅root可读),防止未授权访问:
sudo chmod 600 /etc/ssl/private/myserver.key
3. 配置安全的SSL/TLS协议与密码套件
编辑OpenSSL主配置文件(/etc/ssl/openssl.cnf
),在[system_default_sect]
部分添加以下内容,禁用不安全的SSLv2/SSLv3协议及弱密码套件(如MD5、DES):
[system_default_sect]
MinProtocol = TLSv1.2 # 最低支持TLS 1.2
CipherString = HIGH:!aNULL:!MD5:!RC4:!3DES # 排除弱密码套件
说明:HIGH
表示高强度密码套件,!aNULL
禁用无身份验证套件,!MD5
禁用MD5哈希算法(易受碰撞攻击)。
4. 配置Web服务器使用OpenSSL(以Nginx为例)
编辑Nginx配置文件(如/etc/nginx/sites-available/default
),添加SSL证书路径及安全参数:
server {
listen 443 ssl;
server_name your_domain.com;
# 指定证书与私钥路径
ssl_certificate /etc/ssl/certs/myserver.crt;
ssl_certificate_key /etc/ssl/private/myserver.key;
# 强制使用TLS 1.2及以上版本
ssl_protocols TLSv1.2 TLSv1.3;
# 设置安全的密码套件
ssl_ciphers 'HIGH:!aNULL:!MD5:!RC4:!3DES';
ssl_prefer_server_ciphers on;
# 启用HSTS(强制浏览器使用HTTPS)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
重启Nginx使配置生效:
sudo systemctl restart nginx
5. 限制访问权限与强化文件安全
/etc/ssl/openssl.cnf
)仅root可读写:sudo chmod 600 /etc/ssl/openssl.cnf
sudo chown root:root /etc/ssl/openssl.cnf
/etc/ssl/private/myserver.key
)权限设为600
,目录权限设为700
:sudo chmod 700 /etc/ssl/private
sudo cp /etc/ssl/certs/myserver.crt ~/ssl_backup/
sudo cp /etc/ssl/private/myserver.key ~/ssl_backup/
6. 启用HSTS增强传输安全
HSTS(HTTP Strict Transport Security)通过HTTP头告知浏览器仅使用HTTPS通信,防止降级攻击。在Web服务器配置中添加以下头信息(以Nginx为例):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
说明:max-age=31536000
表示有效期1年,includeSubDomains
覆盖所有子域名。
7. 定期监控、审计与测试
/var/log/syslog
或Web服务器日志),关注异常连接或错误信息。sslscan
工具扫描服务器配置,识别弱协议或密码套件:sudo apt install sslscan
sslscan --tls-version all your_domain.com
echo "0 9 30 * * /usr/bin/openssl x509 -enddate -noout -in /etc/ssl/certs/myserver.crt | grep -oE '[^ ]+$'" | crontab -
解析证书过期时间并发送邮件提醒(需配置邮件服务)。