我目前正在使用Flutter重建一个应用程序,在旧的iOS和Android应用程序中,两者都会从后端获取.p12
文件以设置MQTT套接字连接。
但是我试图使用mqtt_client的Flutter包似乎需要useCertificateChain
,usePrivateKey
和setClientAuthorities
像这样的三个文件:
SecurityContext context = new SecurityContext()
..useCertificateChain('path/to/my_cert.pem')
..usePrivateKey('path/to/my_key.pem', password: 'key_password')
..setClientAuthorities('path/to/client.crt', password: 'password');
client.secure = true;
client.securityContext = context;
代码来自:https://emqx.medium.com/using-mqtt-in-the-flutter-project-6a5d90179c8b
我一直在研究mqtt_client包,但是它们提供的示例和文档似乎没有使用.p12
文件建立套接字连接的选项。
如果我必须将.p12
文件下载到移动设备,然后再次提取并重新保存三个文件,那么使用Flutter将没有意义。
是否有任何方法我可以在mqtt_client包中使用.p12
文件,或者有任何其他选项或包可以实现这一点?
谢谢你的帮助!
我发现我可以使用client.connect
插入p12
文件,但包文档从未对此做过任何说明。这被认为是构建MQTT连接的一种非常常用的方法。
_client = MqttServerClient.withPort(_host!, _identifier, _port);
_client?.keepAlivePeriod = 60;
_client?.logging(on: true);
_client?.setProtocolV311();
_client?.secure = true;
final securityContext = SecurityContext.defaultContext;
securityContext.setClientAuthorities('$_certPath/ios.p12', password: '');
securityContext.useCertificateChain('$_certPath/ios.p12', password: '');
securityContext.usePrivateKey('$_certPath/ios.p12', password: '');
_client?.securityContext = securityContext;