一、配置 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;