SSL证书&Nginx 配置最佳实践

栏目: 服务器 · Nginx · 发布时间: 4年前

内容简介:下面是可以在 ssllabs 拿到 A+ 的配置。这一节主要说明一下如何在 ssllabs 各个部分拿到满分。这一部分很容易拿到满分。只要保证你的证书链顺序是正确的,并且没有使用 SHA1(应该使用SHA256)作为证书签名算法。

最佳配置

下面是可以在 ssllabs 拿到 A+ 的配置。

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name  your domain;
        #access_log  your access_log path main;
        error_log your web path/logs/error.log warn;

        ssl_certificate your cert path
        ssl_certificate_key your cert path/

        ssl_protocols TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384";
        ssl_ecdh_curve secp384r1;
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout  60m;
        ssl_session_tickets off;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate your cert path/letsencrypt-full-chain.pem;
        resolver 8.8.8.8 8.8.4.4 valid=300s;
        resolver_timeout 5s;
        #add_header Strict-Transport-Security "max-age=63072000;";
        #add_header X-Frame-Options DENY;
        #add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header Expect-CT "max-age=0";

        ##################################
        # END https://cipherli.st/ BLOCK #
        ##################################
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

        location ~ /.well-known {
                allow all;
        }

    # The rest of your server block
        root   website path;
        index index.html index.php index.htm;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
        }
    

    ## Your only path reference.
        ## This should be in your http block and if it is, it's not needed here.
        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

    location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }


}

满分配置详解

这一节主要说明一下如何在 ssllabs 各个部分拿到满分。

Certificate 部分

这一部分很容易拿到满分。只要保证你的证书链顺序是正确的,并且没有使用 SHA1(应该使用SHA256)作为证书签名算法。

还有就是你的CA一定要是业界知名的。

Protocol Support 部分

如果你使用 TLSv1.2 及以上配置,这部分会得到满分。

ssl_protocols TLSv1.2 TLSv1.3;

如果是 TLSv1.1&1.2,这部分会得95分。

ssl_protocols TLSv1.1 TLSv1.2;

如果是 TLSv1.0~1.2,这部分只会得90分。

ssl_protocols TLSv1.0 TLSv1.1 TLSv1.2;

需要注意的是,你不应该再使用1.0版,因为它已经被弃用了。

Key Exchange 部分

如果你使用 RSA4096 或者 secp256 以上的 ECC 证书,那么这部分就会得到满分。

如果你需要 ECC 证书可以试试 acme.sh 客户端。certbot 也可以,但是比较麻烦。

certbot 生成 ECC 证书可以参考这个网站:

https://elsenow.com/post/certbot-issue-ecc-wildcard-certificate.html

另外,你还需要生成一个DH密钥交换证书。

命令为 openssl dhparam -out dhparam.pem 4096

需要注意的是,如果你同时有 RSA/ECC 和 DH 密钥交换证书,ssllabs 会以加密强度最小的那个为基准。

比如你有 4096RSA 证书,但是 DH 的证书是 2048 的,你会得到90分。

Cipher Strength 部分

加密套件只要大于256bit就可以拿到满分。

ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';

但是一般来说,为了更好的兼容性,还是128强度的比较好。(80分)

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305: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:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

左侧字母拿到 A+

只要启用HSTS就可以拿到A+。

HSTS是表示这个网站只能通过HTTPS访问的技术。

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always;

可选配置

ssl_ecdh_curve secp384r1; (如果不用 ECC 证书可以不用设置)

补充说明

cipher_suite 配置可以参考mozilla给出的几种配置:

https://wiki.mozilla.org/Security/Server_Side_TLS

这个网站列出了最优配置、最普遍的配置以及兼容性最好的配置。

参考网站


以上所述就是小编给大家介绍的《SSL证书&Nginx 配置最佳实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms and Data Structures

Algorithms and Data Structures

Kurt Mehlhorn、Peter Sanders / Springer / 2008-08-06 / USD 49.95

Algorithms are at the heart of every nontrivial computer application, and algorithmics is a modern and active area of computer science. Every computer scientist and every professional programmer shoul......一起来看看 《Algorithms and Data Structures》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具