起因:项目代码给一个security Lab检测安全性,告知我们要丢弃CBC ciphers suits.
我们就开始分析如何只丢弃CBC ciphers suits.
首先我们要能配置server的ciphers suits,我们使用的第三方库是libwebsocket来搭建嵌入式的server.
struct lws_context_creation_info info;
...
info.ssl_cipher_list = "XXX"
可以通过给lws_context_creation_info对象的ssl_cipher_list字段赋值选择server支持的ciphers suits.之前我们没有赋值使用的是默认值,但是我们也不知道默认值支持多少ciphers suits.
当前重点就是要去除CBC ciphers suit 并且支持TLS1.2和TLS1.3
最开始我从testssl这个开源工具里找了一串ciphers suits,使用这一串后,server只支持TLS1.3了,大部分android 设备连接不上了,因为android 10才开始支持TLS1.3.
后面经过和海外的同事沟通,他告诉我一个网站:
里面有哪些ciphers suits属于TLS1.2的介绍,并且还有市场上最流行的web服务器的配置示例,我选取了Nginx的配置:
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
符合security Lab的标准并且支持TLS1.2以及TLS1.3,解决了问题