我正在构建一个桌面应用程序。我希望网站能够通过HTTPS与应用程序进行沟通。一般的想法是,网站可以运行对https://127.0.0.1:8844的JSONP调用并将数据发送到桌面应用程序。
问题是大多数较新的浏览器都不允许您在后台调用未经授权的HTTPS站点,所以我的自签名证书阻止浏览器调用我的应用程序。
我想到的解决方案是注册local.myapp.com,将其指向127.0.0.1,并让证书权威机构为其签名。这个应用程序是开源的,所以我必须将证书/密钥分发给所有客户端。
将这些信息完全公开有什么安全含义?还有其他方法可以让现代浏览器将数据发送到桌面应用程序吗?
发布于 2014-03-21 23:23:53
撇开安全问题不谈,似乎这不是一个好主意,就是在许多情况下,简单地说是行不通的。
我的解决方案很糟糕,但并不是世界末日,我的解决方案是构建浏览器扩展,在应用程序和浏览器之间进行通信。通过这种方式,扩展可以收集有关当前页面的信息,无论是http还是https,并通过ajax将其通过明文http发送到桌面应用程序。
发布于 2014-05-02 02:16:23
首先使用CORS而不是JSONP进行研究,它更容易使用、更安全和更可靠,因为您可以使用jQuery进行错误处理。对IE8和IE9的支持是一塌糊涂的,但所有其他主流浏览器都能正常工作。您的web服务器后端代码只需发送几个HTTP头,它就可以开始处理常规AJAX请求。
如果您希望浏览器在使用您的服务之前接受自签名证书,那么它们需要首先在web浏览器的地址栏中手动键入服务器IP。它将首先抛出一个不必要的大警告,因此手动验证证书哈希与真实证书的散列,然后存储异常(信任证书)。或者,您可以将证书从服务器导出到文件,然后用户可以手动将证书文件加载到位于浏览器设置/首选项中的浏览器信任存储中。
直接从网站操作员(例如亲自)接收自签名证书,然后将其存储在浏览器的缓存中,比依赖第三方(如“证书颁发机构”)签名要安全得多。这实际上消除了活跃的MITM攻击,并解决了受损CA签署假证书的问题。然而,要使此工作,您还需要清除您的浏览器从所有预先签署的蛇油证书颁发机构,所以只有自我签名的证书是可信的。如果你把它们留在那里,那么一个沿着路由器跳到你的服务器上的攻击者(比如情报机构)可以拦截你的连接,动态创建一个假证书,向你出示浏览器已经信任的经过妥协的CA签署的假证书,然后积极使用MITM你的连接让你完全不知道,除非你手动检查连接细节,并意识到你没有让Verisign签署你自己签名的证书.由于从浏览器中删除了预受信任的根CA,并且您的自签名根CA显式信任,这是不可能的,如果证书更改,您将得到一个合法的可怕警告。
必修课:莫西·马林斯派克与真实性的未来.
https://security.stackexchange.com/questions/53858
复制相似问题