当前位置 主页 > 服务器问题 > nginx问题汇总 >

    Nginx服务器中关于SSL的安全配置详解(4)

    栏目:nginx问题汇总 时间:2018-10-21 16:57


    OCSP是更轻量级的,因为它一次只获取一条记录。但是副作用是,当连接到服务器的时候,OCSP请求必须发送到第三方响应者,这增加了延迟,以及失败的可能。实际上,OCSP响应者由CA操控,由于它常常不可靠,导致浏览器由于收不到适时的响应而失败。这减少了安全性,因为它允许攻击者对OCSP响应者进行DoS攻击来取消验证。

    解决方案是在TLS握手期间,允许服务器发送缓存的OCSP记录,这样来绕过OCSP响应者。这个技术节省了在客户端和OCSP响应者之间的一个来回,称为OCSP闭合(OCSP Stapling)。

    服务器只在客户端请求的时候,发送一个缓存的OCSP响应,通过对CLIENT HELLO的status_request TLS拓展来声明支持。

    大多数服务器都会缓存OCSP响应到48小时。在常规间隔,服务器会连接到CA的OCSP响应者来获取最新的OCSP记录。OCSP响应者的位置是从签名证书的Authority Information Access 字段来获取。

    HTTP Strict Transport Security

    如果可能,你应该开启 HTTP Strict Transport Security (HSTS) ,它指示浏览器只通过HTTPS来访问你的站点。

    HTTP Public Key Pinning Extension

    你同样应该开启 HTTP Public Key Pinning Extension。

    Public Key Pinning 意味着证书链必须包含处于白名单之中的公钥。它确保只在白名单中的CA可以对*.example.com进行签名,而不是浏览器中保存的任何一个CA。

    我已经写了关于它的一篇文章,包含背景理论和配置实例,针对 Apache, Lighttpd 以及 NGINX:https://raymii.org/s/articles/HTTPPublicKeyPinningExtension_HPKP.html
    配置示例
     复制代码 代码如下:
    server {
     
      listen [::]:443 default_server;
     
      ssl on;
      ssl_certificate_key /etc/ssl/cert/raymii_org.pem;
      ssl_certificate /etc/ssl/cert/ca-bundle.pem;
     
      ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
     
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_session_cache shared:SSL:10m;
     
      ssl_stapling on;
      ssl_stapling_verify on;
      resolver 8.8.4.4 8.8.8.8 valid=300s;
      resolver_timeout 10s;
     
      ssl_prefer_server_ciphers on;
      ssl_dhparam /etc/ssl/certs/dhparam.pem;
     
      add_header Strict-Transport-Security max-age=63072000;
      add_header X-Frame-Options DENY;
      add_header X-Content-Type-Options nosniff;
     
      root /var/www/;
      index index.html index.htm;
      server_name raymii.org;
     
    }
    结论

    如果你应用了上面的配置文件,你需要重启nginx:

    复制代码 代码如下:# Check the config first:
    /etc/init.d/nginx configtest
    # Then restart:
    /etc/init.d/nginx restart

    现在使用SSL 实验室测试(SSL Labs tes)看看你是否得到一个漂亮的A。同时,当然,拥有一个安全的,牢靠的,作为未来样例的SSL配置。