该解决方案可以安全地通过 webSoket 通信在网络上访问用户的私有证书吗?
This solution is safe to access to user's private certificate on a web with a webSoket communication?
我们正在开发一个使用 https 协议(双向)的网页。
我们需要访问用户的私有证书,因为我们需要用用户的证书签署文档,所以我们开发了一个Java应用程序,通过websoket与网络通信。
此应用程序将通过网络调用协议调用(与从浏览器在 Acrobat Reader 上打开 pdf 时相同)。
所以我们必须确保我们的网络正在调用本机应用程序(仅我们的网络)。我们希望开发一个系统来确保这一点。我们的想法:
- 将 public 密钥、服务器私有证书的签名令牌和对称密钥(用于加密 websocket 通信)发送到本机应用程序。
- 接下来,我们将在本机应用程序中检查令牌是否适用于服务器的 Web 服务。
- 之后我们还要打开原生app和web之间的websocket,通过这种方式发送原生app签名的文档。
- 然后将文档发送到服务器。
这个实现安全吗?夹在中间的人我们会安全吗?
任何关于此解决方案的建议都将受到欢迎,因为我没有看到任何弱点,但我不是安全专家。
我知道此问题的其他解决方案,例如小程序、JavaFX 或 Chrome 上的本机消息,但我只想知道这些解决方案是否安全。
在此先感谢大家,如果我的英语不是最好的,请见谅:P,
我看到以下问题
- Send a public key and a signed token by the server's private certificate to the native application.
您正在通过协议调用本地应用程序。例如 mylocalapp://sign?securitytoken=...
。您无法控制在本地 PC 上安装哪个应用程序来响应 mylocalapp://
。浏览器显示丑陋的警告,因为您要离开安全环境。攻击者可以替换默认应用程序,模拟流程并获取所有签名文档。
2.Next, we will Check in the native application that the token it is OK with a web service to the server.
要验证服务器的身份并避免 ManInTheMiddel 附加,您还需要使用服务器证书为您的应用程序设置一个信任库
您的服务器还需要验证客户端的身份。您是否也打算以两种方式使用 TLS?
- After, we will have to open the websocket between the native app and the web, and send the signed document by the native app by this way.
您不需要 websocket。只需使用 URL 连接即可下载和上传文档。
当 chrome 决定削减 NPAPI 支持并且签名小程序开始失败时,西班牙经济部使用了此解决方案。现在,他们以这种方式重建了系统
在用户的 PC 上安装本地 Java 应用程序。应用程序侦听端口,例如 5678
在您的页面中,javascript 以 http://127.0.0.1:5678/sign 的形式连接到应用程序并发送数据进行签名。
应用程序是本地的,使用操作系统密钥库没有问题,其中包括驱动程序 PKCS#11。进行数字签名并将结果发送给服务器
页面的javascript周期性的查询结果,准备就绪时取回
安全问题基本相同,但在本地安装服务器比替换本地默认应用程序更难。
这个解决方案叫做@firma,我猜你可能知道。它是开源的,你可以使用它
我们正在开发一个使用 https 协议(双向)的网页。
我们需要访问用户的私有证书,因为我们需要用用户的证书签署文档,所以我们开发了一个Java应用程序,通过websoket与网络通信。
此应用程序将通过网络调用协议调用(与从浏览器在 Acrobat Reader 上打开 pdf 时相同)。
所以我们必须确保我们的网络正在调用本机应用程序(仅我们的网络)。我们希望开发一个系统来确保这一点。我们的想法:
- 将 public 密钥、服务器私有证书的签名令牌和对称密钥(用于加密 websocket 通信)发送到本机应用程序。
- 接下来,我们将在本机应用程序中检查令牌是否适用于服务器的 Web 服务。
- 之后我们还要打开原生app和web之间的websocket,通过这种方式发送原生app签名的文档。
- 然后将文档发送到服务器。
这个实现安全吗?夹在中间的人我们会安全吗?
任何关于此解决方案的建议都将受到欢迎,因为我没有看到任何弱点,但我不是安全专家。
我知道此问题的其他解决方案,例如小程序、JavaFX 或 Chrome 上的本机消息,但我只想知道这些解决方案是否安全。
在此先感谢大家,如果我的英语不是最好的,请见谅:P,
我看到以下问题
- Send a public key and a signed token by the server's private certificate to the native application.
您正在通过协议调用本地应用程序。例如 mylocalapp://sign?securitytoken=...
。您无法控制在本地 PC 上安装哪个应用程序来响应 mylocalapp://
。浏览器显示丑陋的警告,因为您要离开安全环境。攻击者可以替换默认应用程序,模拟流程并获取所有签名文档。
2.Next, we will Check in the native application that the token it is OK with a web service to the server.
要验证服务器的身份并避免 ManInTheMiddel 附加,您还需要使用服务器证书为您的应用程序设置一个信任库
您的服务器还需要验证客户端的身份。您是否也打算以两种方式使用 TLS?
- After, we will have to open the websocket between the native app and the web, and send the signed document by the native app by this way.
您不需要 websocket。只需使用 URL 连接即可下载和上传文档。
当 chrome 决定削减 NPAPI 支持并且签名小程序开始失败时,西班牙经济部使用了此解决方案。现在,他们以这种方式重建了系统
在用户的 PC 上安装本地 Java 应用程序。应用程序侦听端口,例如 5678
在您的页面中,javascript 以 http://127.0.0.1:5678/sign 的形式连接到应用程序并发送数据进行签名。
应用程序是本地的,使用操作系统密钥库没有问题,其中包括驱动程序 PKCS#11。进行数字签名并将结果发送给服务器
页面的javascript周期性的查询结果,准备就绪时取回
安全问题基本相同,但在本地安装服务器比替换本地默认应用程序更难。
这个解决方案叫做@firma,我猜你可能知道。它是开源的,你可以使用它