2023年1月28日星期六

TLS 最佳实践

 1. 协议版本的选择

   SSL 已经淡出互联网的舞台

   TLS 1.0 ,1.1 也是如此

   TLS 1.2 ,1.3 是目前 HTTPS 建立链接的主流协议

   为什么 1.2 还要提供呢, TLS 1.2 是 2008 年推出的,不支持的话,会有很多老旧设备不能访问,所以为了兼容。

   1.3 的加密套件由于TLS 1.3 只接受使用 ECDHE 算法进行密钥交换(并不会在 Cipher Suite 中体现),并且使用ECDSA 进行身份认证,全部支持了 PFS,所以 1.3 目前非常的安全。如果不是用密钥交换的话,就只能用 PSK 。

    


 2. 证书方面的选择

也许你可能只知道 RSA 签名的证书,但是那是老的方式了,现在已经出现 ECC 证书,而且效率各方面都比 RSA 更好,比如支持 PFS (FS) 其实它俩的是一个意思。

 那介绍完 ECC 之后,重点来了,  在 TLS 1.2 中会出现下面的两种情况

   - 服务端配置 ECC 证书后,就可以支持 ECDHE 密钥交换算法

   - 服务端配置 RSA 证书后,可以同时支持 RSA 跟 ECDHE 的算法

 所以证书方面的配置最好能提供两个证书的支持,提供最大程度的兼容。

 支持 ECC 证书的话,还有一个好处,SSLLABS 可以拿到 A 以上的评分

 Tips:TLS 1.3 的证书没有要求, 也就是说 RSA 证书 或者 ECC 证书都可以


3. ECC 相关的算法

以下算法需要服务端提供 ECC 证书,才可以支持

ECDH   

ECC(椭圆曲线)的 DH(Diffie-Hellman)算法,计算速度快,不支持 PFS

ECDHE

       跟 RSA 一样也是一种密钥交换算法,比 ECDH 多个 E,支持了 PFS

ECDSA

      一种非对称加密算法,用于数字签名,ECC 证书上面附的签名就是 ECDSA 公钥,同理,

      RSA 证书上面附的签名就是 RSA 公钥。


由于 256 位 ECC Key 在安全性上等同于 3072 位 RSA Key,加上 ECC 运算速度更快,ECDHE 密钥交换 + ECDSA 数字签名无疑是最好的选择。


所以就有三种主流的方法:

  • - RSA 密钥交换(无需签名);
  • - ECDHE 密钥交换、RSA 签名;
  • - ECDHE 密钥交换、ECDSA 签名;


4. 加密套件的顺序跟 TLS 版本的关系

    TLS 1.3 的加密套件放在最上面 (Chome dev tools - Security 可以查看当前的 tls 版本)

    TLS 1.2 的放在下面


5. nginx 的 TLS 配置

https://ho600.readthedocs.io/zh_TW/master/technology_sharing/how_to_get_a_plus_rating_on_ssllabs_com.html


参考链接:

https://blog.csdn.net/mrpre/article/details/77868633

https://cloud.tencent.com/developer/article/1420663

https://mdnice.com/writing/138185b5b5a1428bb59022a33082d68f

https://www.idczone.net/news/2708.html/

https://blog.csdn.net/mrpre/article/details/78025940