我们正在开发一个使用 https 协议(两种方式)的网页。
我们需要访问用户的私有证书,因为我们需要通过用户的证书来签署文档,所以我们开发了一个通过Websoket与Web进行通信的Java应用程序。
该应用程序将通过网络协议调用进行调用(与从浏览器在 Acrobat Reader 上打开 pdf 时相同)。
因此,我们必须确保我们的网络正在调用本机应用程序(仅我们的网络)。我们希望开发一个系统来确保这一点。我们的理念:
- 将公钥、服务器私有证书签名的令牌和对称密钥(用于加密 Websocket 通信)发送到本机应用程序。
- 接下来,我们将在本机应用程序中检查令牌是否可以通过服务器的 Web 服务。
- 之后,我们必须打开本机应用程序和网络之间的websocket,并通过这种方式发送本机应用程序签名的文档。
- 然后将文档发送到服务器。
这个实现安全吗?中间有一个人我们会安全吗?
关于此解决方案的任何建议都将受到欢迎,因为我没有看到任何弱点,但我不是安全专家。
我知道这个问题的其他解决方案,例如小程序、JavaFX 或 Chrome 上的本机消息,但我只想知道这些解决方案是否安全。
提前感谢大家,如果我的英语不是最好的,抱歉:P,
我看到以下问题
- 将公钥和服务器私有证书的签名令牌发送到本机应用程序。
您正在通过协议调用本地应用程序。例如mylocalapp://sign?securitytoken=...
。您无法控制本地 PC 上安装哪个应用程序来响应mylocalapp://
。浏览器会显示一个丑陋的警告,因为您正在离开安全环境。攻击者可能替换了默认应用程序,模拟流程并获取所有签名文档。
2.接下来,我们将在本机应用程序中检查令牌是否可以通过服务器的 Web 服务。
要验证服务器的身份并避免 ManInTheMiddel 附加,您还需要使用服务器证书为您的应用程序设置信任库
您的服务器还需要验证客户端的身份。您是否也计划以两种方式使用 TLS?
- 之后,我们必须打开本机应用程序和网络之间的websocket,并通过这种方式发送本机应用程序签名的文档。
您不需要网络套接字。只需使用 URL 连接即可下载和上传文档。
当 Chrome 决定削减 NPAPI 支持并且签名小程序开始失败时,西班牙经济部使用了该解决方案。现在,他们就这样重建了系统
在用户的 PC 上安装本地 Java 应用程序。应用程序侦听端口,例如 5678
在您的页面中,javascript 连接到表单中的应用程序http://127.0.0.1:5678/sign并发送数据进行签名。
该应用程序是本地的,并且使用操作系统密钥库(包括驱动程序 PKCS#11)没有任何问题。进行数字签名并将结果发送到服务器
页面的 javascript 定期查询结果并在准备好时检索它
安全问题基本相同,但是在本地主机中安装服务器比替换本地默认应用程序更难。
该解决方案称为@firma,我想您可能知道它。它是开源的,你可以使用它
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)