Web applications 将我的客户根CA证书存储在我的we应用程序的浏览器会话存储中是否可行?

Web applications 将我的客户根CA证书存储在我的we应用程序的浏览器会话存储中是否可行?,web-applications,certificate,progressive-web-apps,digital-signature,x509certificate,Web Applications,Certificate,Progressive Web Apps,Digital Signature,X509certificate,我有一个基于桌面的应用程序,它有一个硬编码的根CA。我的应用程序可以获得数字签名的资源,并使用提供的证书验证这些资源,并使用应用程序中存储的根CA 现在,我正在将我的桌面应用程序移动到基于在线的web应用程序 我无法将我的根CA存储在脱机信任存储中(无法让用户手动安装) 因此,我在想,当我的web应用程序和后端服务器使用TLS时,一旦初始HTTPS握手完成,我的web应用程序是否可以从我的服务器下载我的根CA并将其存储在浏览器的本地存储中,以便用于验证数字证书 需要明确的是,我指的不是客户端应用

我有一个基于桌面的应用程序,它有一个硬编码的根CA。我的应用程序可以获得数字签名的资源,并使用提供的证书验证这些资源,并使用应用程序中存储的根CA

现在,我正在将我的桌面应用程序移动到基于在线的web应用程序

我无法将我的根CA存储在脱机信任存储中(无法让用户手动安装)

因此,我在想,当我的web应用程序和后端服务器使用TLS时,一旦初始HTTPS握手完成,我的web应用程序是否可以从我的服务器下载我的根CA并将其存储在浏览器的本地存储中,以便用于验证数字证书

需要明确的是,我指的不是客户端应用程序/服务器身份验证,而是使用标准HTTPS/TSL和CA签名的服务器证书

我指的是我的应用程序的自定义功能。登录用户创建资源并对其进行签名,然后将其发送到后端服务器,并可由web应用程序的其他用户下载,这些用户需要能够检查资源的签名

我希望这是有道理的,任何建议都会很好

多谢各位

编辑

如果我描述一下应用程序场景,可能会有所帮助

因此,医生使用用户名和密码登录web应用程序,我的后端服务器会对用户进行身份验证。然后,他在web应用程序中编译了一个处方,并用他的私钥(从云HCM获得)签名,签名的处方被上传并验证,然后存储在我的后端数据库中

现在,药剂师登录到他们的前端web应用程序并下载处方。此时,在我的桌面版本中,通过在桌面应用程序中使用硬编码的根CA建立信任链来验证签名。但由于我想把它应用到一个网络应用中,所以我不能这么做。所以我在想,我的web应用程序可以下载根CA吗,因为它现在通过HTTPS是安全的

我还认为,由于这将是一个在线web应用程序,并且连接是通过HTTPS进行的,这是否有必要,因为当医生签名并上传处方文档时,我的服务器代码验证了它。然后药剂师通过SSL从我的服务器应用程序下载它时,它已经被信任了?下载根CA是否更加安全或必要(或可接受)

我只是想澄清一下。此实例中的根CA是自签名CA证书,我无法将其添加到OS脱机受信任存储。当我的应用程序是基于桌面的应用程序时,这不是问题。我的应用信任此证书,因为它是硬编码的

我希望这是有道理的


再次感谢

根证书或任何证书都是公开的,可能不需要使用SSL/TLS进行保护,如一些评论中所述

话虽如此,由于它是一个web应用程序,用户可以信任服务器对签名内容的验证

如果要在客户端上验证,可以在客户端浏览器上缓存根证书。您甚至可以在浏览器上使用localStorage进行长期缓存

但由于我想把它应用到一个网络应用中,所以我不能这么做。所以我在想,我的web应用程序可以下载根CA吗,因为它现在通过HTTPS是安全的

我觉得这里有点混乱。需要明确的是,HTTPS/TLS会话只有在客户端验证了服务器提供的证书之后才会启动。理解TLS握手过程很重要。在这里,TLS握手过程包含两个重要步骤,分别是

  • 客户你好
  • 服务器你好
  • 在服务器Hello步骤中,服务器向客户端提供其证书,客户端只有在证书的有效性检查通过后才接受证书,其中一个有效性检查是

    证书是否由已知的证书颁发机构颁发(Root CA/中间CA)

    只有在有效性检查通过后,HTTPS/TLS会话才变为活动状态,在此之前,整个通信都是在TCP中进行的,而不是在TLS/HTTPS中

    有几种方法可以解决你的问题,我能想到的是

  • 从公认的证书颁发机构获取服务器证书(推荐)
  • 向最终用户提供手册,以将自签名证书接受为受信任证书

  • 应用程序的在线版本将如何工作?您是否有Javascript从本地存储检索CA证书并使用它验证信任链?(听起来很难)谢谢你的回复。用户登录在线web应用程序并向后端节点JS服务器进行身份验证。它实际上是一个非常简单的应用程序,但离线桌面版本的应用程序中有根CA编码。我想,一旦初始web应用到服务器SSL/TLS发生,我就可以安全地临时下载根证书并验证web应用中的资源/文档签名?感谢哪一款软件能够安全地临时下载根证书并验证资源/文档签名?谢谢,但是,服务器没有对内容进行签名。它由登录到应用程序的用户签名,然后上传到后端数据库,其他用户可以使用web应用程序下载到浏览器中。我需要他们能够验证签名我的意思是服务器可以验证签名(使用源用户的公钥),然后将内容连同验证标志一起提供给其他用户。若客户端用户需要验证签名,那个么他们需要拥有所有源用户的公钥(或者说证书)。因此,它将足够安全,允许最终用户签名并将内容上传到我的后端。然后,当另一个用户从后端请求已签名的数据时,后端服务器验证签名,并通过SSL将数据作为值发送给最终用户,并且他们可以安全地信任签名是否有效?如果这是可以接受的