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