如何在flutter或iOS应用程序中执行mTLS

sg24os4d  于 2023-02-25  发布在  Flutter
关注(0)|答案(2)|浏览(168)

bounty已结束。回答此问题可获得+250声望奖励。奖励宽限期将在15小时后结束。Jugal Thakkar希望引起更多人关注此问题。

我有一个企业Flutter应用程序,需要在应用程序的webview中启动用户身份提供者(IdP)的登录页面。IdP支持certificate-based authentication,使用用户设备上存在的证书(通过MDM)对用户进行身份验证,而无需提供任何凭据。
当启动Safari浏览器来启动此页面时,它工作正常。Safari第一次提示用户从可用的证书中选择一个证书,Safari将其发送到服务器,页面成功继续显示受保护的资源。

另一个要求是,我们需要使用特定的用户代理字符串打开IdP页面,这样他们的防火墙就可以配置为只允许选定的应用程序,而不允许任何随机的Safari页面。
遗憾的是,Safari应用内浏览器不允许覆盖用户代理。在使用https://pub.dev/packages/flutter_inappwebviewhttps://pub.dev/packages/webview_flutter的应用内Web视图时,我们无法获得safari中的证书提示,通信失败,出现以下SSL错误代码-1200
发生SSL错误,无法与服务器建立安全连接
当从https://pub.dev/packages/flutter_inappwebview使用InAppWebView并访问受保护站点时,onReceivedClientCertRequest处理程序被调用,但我不确定如何在响应中传递回设备证书。ClientCertResponse需要证书的路径,这应该是什么?
是否有办法从操作系统的安全存储(keychain?)中检索相应的证书并将其发送到网页?Flutter或原生iOS代码都可以。我们仅针对此用例关注iOS。

vpfxa7rd

vpfxa7rd1#

我没有一个很好的解决方案/变通方案为您的问题,但至少我可以链接你什么(我猜)的根本问题是:
https://developer.apple.com/library/archive/qa/qa1745/_index.html
应用程序只能访问自己的钥匙串访问群组中的钥匙串项目。这意味着Apple访问群组中的项目只能用于Apple提供的应用程序,如Safari或Mail。
记住这一点,你也许可以
1.将您的证书放入应用的"钥匙串访问组"
1.使用类似于https://pub.dev/packages/flutter_keychain的内容到.get()证书
1.手工制作你的http请求使用flutters http(没有网页查看要求)

unhi4e5o

unhi4e5o2#

万一...
我编写了一个flutter PoC,它可以通过https://github.com/ysimonx/mtls-ssl-generator上的mtls自签名证书连接到HTTPS服务器
由于我的PoC使用Flutter'Dio包,您应该能够强制用户代理。
也许,你不再需要网络视图了:)

相关问题