SSL证书&Nginx 配置最佳实践

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

内容简介:下面是可以在 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 配置最佳实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

微积分的历程

微积分的历程

William Dunham / 李伯民、汪军、张怀勇 / 人民邮电出版社 / 2010-8 / 29.00元

“微积分”这一名称最早出现在哪本书中?第一本微积分教科书又是谁人所写?微积分究竟是谁人发明的?著名的洛必达法则居然是伯努利的研究成果?谁被誉为“分析学的化身”?谁又被誉为“现代分析学之父”?哪些数学天才使微积分的创建过程终于画上完美的句号?……本书将带你一一探究上述问题。 本书宛如一座陈列室,汇聚了十多位数学大师的杰作,当你徜徉其中时会对人类的想象力惊叹不已,当你离去时必然满怀对天才们的钦佩......一起来看看 《微积分的历程》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具