【问题标题】:Is it practical to store my customer root CA certificate in browser session store for my we app?将我的客户根 CA 证书存储在我的应用程序的浏览器会话存储中是否可行?
【发布时间】:2021-01-05 20:38:04
【问题描述】:

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

现在,我正在将我的桌面应用程序迁移到基于在线的网络应用程序。

我无法将我的根 CA 存储在离线信任存储中(不习惯让用户手动安装)。

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

为了清楚起见,我不是指客户端应用程序/服务器身份验证,这是使用标准 HTTPS/TSL 和 CA 签名的服务器证书来处理的。

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

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

谢谢

编辑

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

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

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

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

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

我希望这是有道理的。

再次感谢

【问题讨论】:

  • 应用程序的在线版本如何工作?您是否有 Javascript 从本地存储中检索 CA 证书并使用它来验证信任链? (听起来很难)
  • 感谢您的回复。用户登录到在线 Web 应用程序并对后端 Node JS 服务器进行身份验证。它实际上是一个非常简单的应用程序,但离线桌面版本已将 Root CA 编码到应用程序中。我认为一旦初始网络应用程序到服务器 SSL/TLS 发生,我可以安全地临时下载根证书并验证网络应用程序中的资源/文档签名?谢谢
  • 究竟哪款软件能够安全地临时下载根证书并验证资源/文档签名?

标签: web-applications certificate progressive-web-apps digital-signature x509certificate


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,但是内容没有经过服务器签名。它由登录到应用程序的用户签名,然后上传到后端数据库,其他用户可以使用 Web 应用程序将其下载到他们的浏览器中。我需要他们能够验证签名
  • 我的意思是服务器可以验证签名(使用源用户的公钥),然后将内容与验证标志一起提供给其他用户。如果客户端用户需要验证签名,他们需要拥有所有源用户的公钥(或者说证书)。
  • 好的,我明白了。因此,允许最终用户签名并将内容上传到我的后端就足够安全了。然后当另一个用户从后端请求签名数据时,后端服务器验证签名并通过 SSL 将数据发送给最终用户,他们可以安全地相信签名是有效的吗?如果这是可以接受的,那肯定会使开发更容易。
  • 如果您的 Web 应用程序满足所有安全要求,应该可以接受..!!检查是否有任何执法机构或土地法的指导..!
【解决方案2】:

但由于我希望将其用于网络应用程序,因此我不能那样做。所以我在想我的网络应用可以下载根 CA,因为它现在通过 HTTPS 是安全的吗?

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

  1. 客户您好
  2. 服务器-Hello

在 Server-Hello 步骤期间,服务器将其证书提供给客户端,客户端仅在证书的有效性检查通过后才接受证书,其中一项有效性检查是,

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

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

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

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

【讨论】:

  • 您好,感谢您的回复。我没有混淆这只是很难解释我的用例。事实上,我有一个 EV SSL 可以连接到HTTPS://app.myapp.com 的应用程序,所以这不是问题。在此之后,我的用户会签署并验证内容,但是,我认为下面的最后一条评论应该会有所帮助,因为这正是我所希望的。桌面应用程序没有问题,但使用服务器/客户端时不同。再次感谢
  • 我可以知道您的证书层次结构吗? (根 --> 中间 1 --> 中间 2 --> 叶?)?是否有可能您也可以将 [https] 根证书用于处方目的?在这种情况下,它已经在您的浏览器中可用!
  • 当然。网站 EV ask 是标准的。我的 PKI 是根证书 - 子 CA - 客户端证书。谢谢
猜你喜欢
  • 2018-11-15
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 2021-07-25
  • 1970-01-01
相关资源
最近更新 更多