【问题标题】:Must the person who requests an SSL certificate have their private key on their machine? [closed]请求 SSL 证书的人必须在他们的机器上拥有他们的私钥吗? [关闭]
【发布时间】:2023-03-30 00:13:01
【问题描述】:

我正在尝试在服务器端为我的网站用户创建证书,以便他们可以进行身份​​验证,而不是我已经提供的基本身份验证,即用户名/密码。

我可以在服务器端而不是客户端完成生成用于创建 CSR 的公钥/私钥的整个过程吗?

我正在考虑以下过程:

用户登录网站并通过用户名/密码进行身份验证。

用户将通过用户浏览器和服务器之间的 SSL 连接通过 Web 表单提交识别详细信息。

然后服务器将为该用户创建公钥/私钥,并使用它们在服务器上创建 CSR。然后服务器将使用 CSR 为用户创建证书。然后它将通过 SSL 将证书发送给用户。然后服务器将删除创建的公钥/私钥。

最后,用户将在他们的浏览器上安装证书。

这行得通吗?它在某种程度上不安全吗? 是否可以像这样从客户端转移到服务器端来创建用于创建 CSR 的公钥/私钥的责任? 这是否会使创建的证书在某些方面对用户的用处降低?

【问题讨论】:

  • Startcom 使用此工作流程。首先,您使用用户名/密码创建一个帐户。创建基本帐户后,他们会向您颁发 PKI 证书以访问所有服务。你应该研究他们的工作流程。
  • 我今天早些时候看到了下面的帖子security.stackexchange.com/a/22682/46055 但想知道,用户用于签署 CSR 的私钥是否需要在颁发证书的过程之外进行?如果不是,为什么链接讨论中的人们担心 Startcom(可能)保存这些私钥?
  • "...是用户用于签署 CSR 的私钥..." - 不,CSR 不是由主体(即用户)签署的。 CA 唯一需要的是主体的信息(即用户的信息)和他/她的公钥。这就是 X509 证书所做的全部 - 它将公钥绑定到实体。绑定通过受委托方的签名(即 CA 的签名)发生。
  • "...为什么链接讨论中的人们关心 Startcom(可能)保存那些私钥” - Startcom 这样做是为了让一些用户更容易(想想:非技术人员) . SE 的观察是正确的——你不应该让像 Startcom 这样的人生成私钥(顺便说一下,微软在其开发人员程序中做了同样的事情)。由于您是技术用户,因此您应该只使用另一种方法(即,做额外的工作以确保安全)。
  • @jww 我看不到你的回复,为什么人们会担心。如果他们的机器上没有私钥,或者其他人有他们的私钥,什么是行不通的?

标签: ssl ssl-certificate x509 csr


【解决方案1】:

申请 SSL 证书的人是否必须在他们的机器上拥有他们的私钥?

是的。在没有私钥的情况下,客户端无法在 SSL 握手中将证书作为自己的证书,因为使用该密钥的数字签名也是 SSL 握手的一部分,以验证客户端是否拥有它。如果客户端不需要私钥来出示证书,任何人都可以出示任何人的证书,整个系统将毫无意义。

这行得通吗?

没有。

它在某些方面不安全吗?

是的。

是否可以像这样将创建公钥/私钥以创建 CSR 的责任从客户端转移到服务器端?

没有。

这是否会降低创建的证书在某些方面对用户的用处?

是的。

这是行不通的。您必须找到一种安全的方式让私钥存在于客户端计算机上。

您的提议完全无效且不安全。私钥应该对拥有它的人来说是私有的。如果其他人知道它,它就无法执行它所设计的功能。具体来说,任何拥有它的人都可以冒充所有者。设计这样的工作流程的人正在让自己陷入法律痛苦的世界。首先考虑一下失去不可否认性。

【讨论】:

  • 好吧,由于密钥、CSR和证书的创建都是在服务器端完成的,它是根据要求完成的(如果我们的目的是为服务器)。服务器现在可以将证书发送给申请人。服务器只需要知道申请人是他们在申请表上声称的真实人物。这是通过在提交申请表之前通过用户名/密码验证申请人来完成的。我看不出这个工作流程有任何缺陷。此外,从您的描述看来,私钥似乎以后不再使用。
  • 对私钥的要求是它是私有的。如果您在服务器和客户端上都有它,则它不是私有的。我已经明确解决了您的最后一句话:“没有私钥,客户端不能在 SSL 握手中将证书作为他们自己的证书”。此工作流程中的缺陷是:(1)私钥不是私有的,或者(2)没有私钥的证书没有任何用处,以及(3)您失去了客户交易的不可否认性。这不是小事,您应该就此寻求法律意见。
  • 谢谢。然而,这是我的想法:(1)证书创建算法中的私钥要求有一个目的......创建签名,以便 CA 可以对申请人进行身份验证。这个目的还是达到了。 (2) 为什么?申请人可以提供证书来验证自己。这是一个用处。 (3) 你的意思是???可以违反加密吗?证书发送给申请人后,用于签署 CSR 的私钥不再使用。或者您的意思是 CA 可能会与其他人共享它?所以呢?身份验证已经完成。而且前提是CA是可信的。
  • 第三次,客户端需要私钥来执行 SSL 握手。 “证书创建算法中的私钥要求”本末倒置。 certificate 的唯一目的是验证公钥,而公钥的唯一目的是与私钥结合使用,例如在 SSL 握手中。我再次重申,如果你有私钥,你可以冒充申请人,因此他可以将他执行的任何交易的所有责任转回给你。在法律上。不可否认性丢失。查一下。与律师交谈。
  • 在握手的什么时候,客户端使用他们的私钥?
猜你喜欢
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 2019-06-05
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多