一、配置 SSL 证书
完整的 ssl 证书分为4个部分:
CA根证书、中级证书、域名证书、证书密钥(仅用户持有)
以 EXAMPLE PositiveSSL 证书为例,将收到四份文件:
根证书 - AddTrustExternalCARoot.crt
中级证书 - EXAMPLERSAAddTrustCA.crt
中级证书 - EXAMOLERSADomainValidationSecureServerCA.crt
您的域名证书 - example_com.crt
或者会收到两个文件:
CA 证书串 - example_com.ca-bundle
您的域名证书 - example_com.crt
按照 “域名证书 -> 中间证书 -> 根证书” 的顺序串联为证书链,我们可以使用cat命令串联证书(就是按顺序将4个文件的内容写到一个文件中)
cat example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > example_com.bundle.crt
或者
cat example_com.crt example_com.ca-bundle > example_com.bundle.crt
得到 example_com.bundle.crt 后,和密钥文件 example_com.key 一同上传至服务器并保存在安全的位置,例如/etc/ssl/private 目录下 (没有此目录请创建)。
二、配置nginx
样例:
// 需要一个单独的server监听80端口,之后将所有的请求强制重定向到https协议
server {
listen 80;
# listen [::]:80; # 如果需要同时侦听 IPv6,取消此行注释
server_name www.example.com; # 改成需要的域名
rewrite ^ https://www.example.com$request_uri? permanent; # 使用rewrite重定向
}
server {
listen 443 ssl;
# listen [::]:443 ssl;
server_name www.example.com;
ssl on;
ssl_certificate /etc/ssl/private/www_example_com.crt;
ssl_certificate_key /etc/ssl/private/www_example_com.key;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; keepalive_timeout 70;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security max-age=63072000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
三、提升安全性
1、生成 DHE 参数
为了避免使用 OpenSSL 默认的 1024bit DHE 参数,我们需要生成一份更强的参数文件:
cd /etc/ssl/certs openssl dhparam -out dhparam.pem 4096
建议使用性能强劲的平台生成此文件,例如最新版的至强物理机。如果您只有一台小型 VPS,请使用 openssl dhparam -out dhparam.pem 2048 命令生成 2048bit 的参数文件。
完成后,在 SSL 配置下添加一行:
ssl_dhparam /etc/ssl/certs/dhparam.pem;
注意:这种提升安全性的方法会牺牲部分性能,如果没有必要的话不建议采用
2、启用 HSTS
HTTP Strict Transport Security (HSTS) 可以使浏览器第一次访问您的站点后即记住仅通过 HTTPS 与您的站点通信,可以大大提升安全性。在SSL配置下添加:
add_header Strict-Transport-Security max-age=63072000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
转载于:https://blog.51cto.com/raffaelexr/1852224