flutter https双向验证的证书配置
2020/6/5 13:26:29
本文主要是介绍flutter https双向验证的证书配置,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这里就不管是那个网络请求工具的第三方,直接操作HttpClient类来操作。
1.先说明双向验证的证书种类:
client_cert.pem 客户端证书(包含客户端公钥)
client_private.pem 客户端私钥
client_public.pem 客户端公钥
使用目的:验证客户端的合法性
sever_cert.pem 服务器证书(包含服务端公钥)
sever_public.pem 服务器端公钥 (存放在Client或者发送给Client)
sever_private.pem 服务器端私钥
使用目的:验证服务器端的合法性
.p12是证书和私钥的集合文件 带有密码:xxxx
2.客户端的配置
以Dio请求工具为例 客户端的配置 客户端的包里用到 服务器端公钥、客户端私钥、客户端的证书(包含公钥)这三个。(顺带提一句,Swift原生只需要服务器公钥和客户端的.p12文件就可以了)
List<int> caData = (await rootBundle.loadString("pubkey/sever_cert.pem")).buffer.asUint8List() List<int> clientCertData = (await rootBundle.loadString("pubkey/client_cert.pem")).buffer.asUint8List() List<int> clientPrivateData = (await rootBundle.loadString("pubkey/client_private.pem")).buffer.asUint8List() (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { SecurityContext sc = new SecurityContext(withTrustedRoots: true); sc.setTrustedCertificatesBytes(caData); //设置服务器端的公钥,为了验证服务器端 sc.useCertificateChainBytes(clientCertData);//设置客户端证书到证书链 sc.usePrivateKeyBytes(clientPrivateData, password:'wiii');//设置私钥 虽然源码里的注释说pem不用密码,但是这里必须 HttpClient httpClient = new HttpClient(context: sc); httpClient.badCertificateCallback=(X509Certificate cert, String host, int port){ return true; }; return httpClient; };
3.抓包的结果
只验证服务器端的情况,抓不到包,因为在请求服务器连接的时候,被抓包工具截断,抓包工具扮演服务器,不被信任,通讯中断,抓包工具里只能获取到请求域名
只验证客户端的情况,能抓到请求,但是在抓包工具抓到客户端的请求之后发给客户端,此时抓包工具扮演客户端,不被服务器信任,通讯中断,没有返回数据
这篇关于flutter https双向验证的证书配置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?