基于证书的身份validation的基础

我搜索了很多,并找到了很多关于如何在wcf中实现基于证书的身份validation的答案。 但我的问题与其基本原理有关。

在生产中实施基于证书的身份validation时,客户端是否提供了服务器需要在其受信任的人员存储中添加的证书? 或者服务器提供证书(由服务器签名)。

我想在配置wcf服务器时,我们只需配置证书位置和存储。 我们永远不会将它与任何域绑定。 因此,出示此证书的任何客户都可以访问我的服务。 如果证书需要绑定到域。 他们为什么不能只允许来自该域的所有请求。

当客户端调用wcf服务时,它会显示其证书。 该证书是否只带有公钥? 并且这个证书可以被窃取(因为它在网络上传播)并被黑客用来使用Web服务。

我知道ssl如何炒作。 在ssl的情况下,浏览器负责所有这些东西但是在wcf服务的情况下(当我们只想允许特定客户端访问我们的服务时)如何管理它。

提前致谢。

让我简单一点:

  1. 我想创建一个Web服务,我希望三个客户端(A,B和C)可以使用它。 我想通过证书validation这三个客户端。 在设置时,这些客户是否需要将证书发送给我。 或者我必须为他们创建证书? 客户端是否也会共享他们的私钥(在设置时)
  2. 我是否需要将这些证书放入受信任的人员商店?
  3. 当他们请求Web服务时,他们将出示他们的证书(仅限公钥)。 如果他们只使用公钥呈现,黑客可以窃取此公钥并请求我的网络服务。 我的web服务如何区分黑客/实际客户端。

在生产中实施基于证书的身份validation时,客户端是否提供了服务器需要在其受信任的人员存储中添加的证书? 或者服务器提供证书(由服务器签名)。

在安全服务中,服务器证书是必需的。 客户端证书是可选的。 可以将服务器配置为忽略接受要求客户端证书。

我想在配置wcf服务器时,我们只需配置证书位置和存储。 我们永远不会将它与任何域绑定。 因此,出示此证书的任何客户都可以访问我的服务。 如果证书需要绑定到域。 他们为什么不能只允许来自该域的所有请求。

不确定如何在没有客户端证书的情况下绑定到域。 你的意思是反向DNS查找? 这需要IP地址,恶意用户可以欺骗它。

通过客户端证书限制访问的典型方法是将客户端证书(通常是主题或域)中的一个字段映射到用户帐户。 您可以具有一对一映射(每个客户端证书代表单个用户)或多对一映射(如果客户端具有列表中的证书,则将其视为特定用户)。 如果未映射证书,则将用户视为匿名。 这里有更多信息,假设您使用的是IIS。

当客户端调用wcf服务时,它会显示其证书。 该证书是否只带有公钥? 并且这个证书可以被窃取(因为它在网络上传播)并被黑客用来使用Web服务。

您在安装过程中处理的证书FILE包含公钥和私钥。 证书本身包含在该文件中; 它包含一个包含公钥和MAC签名的有效负载,但不包含私钥。

私钥被放入安全存储中,永远不会在任何HTTP请求中发送。 只有证书(及其公钥)通过网络发送。 整个文件不会被发送。

编辑以回答进一步的问题

我想创建一个Web服务,我希望三个客户端(A,B和C)可以使用它。 我想通过证书validation这三个客户端。 在设置时,这些客户是否需要将证书发送给我。 或者我必须为他们创建证书?

在设置期间,必须由证书颁发机构(CA)生成客户端证书。 实际上,您可以将角色作为中间CA(对于生产证书)提供服务,该CA从根CA(例如Verisign)获取其权限。 为此,您必须从根权限请求证书。 他们将使用自己的公钥向您颁发证书,并为您提供私钥,以便您能够生成自己的证书并对其进行数字签名。 您通常需要为此权限付费。

此外,您可以成为自己的根CA! 这在开发阶段很常见。 基本上,您生成自己的公钥和私钥,并开始生成自己的证书。 这些称为自签名证书 。 作为您自己的CA的缺点是没有人会识别您的公钥,因此为了让任何人使用您的证书,您可以手动将您添加到其受信任的根权限列表中。

客户端是否也会共享他们的私钥(在设置时)

不,在整个PKI期间,没有人与任何人共享私钥。 永远。 这正是它被称为私钥的原因。 唯一的例外是当您是证书颁发机构并且要生成私钥以创建证书时。 在这种情况下,在处理过程中必须小心保护私钥。 作为SSL通信的一部分,它永远不会通过线路发送。

我是否需要将这些证书放入受信任的人员商店?

是的,不是。 如果您使用自签名证书,是的。 如果您使用的是由CA签名的证书,而该证书又具有由根CA签名的证书,则根CA也必须位于受信任的根权限列表中,但您可能不必添加它。 它应该自动存在。 这是使用受信任的root权限的全部目的 – 每个人都应该了解它们并且应该识别它们的公钥。 根证书通常在安装期间自动分发给浏览器,并使用浏览器的补丁和更新服务保持最新。

当他们请求Web服务时,他们将出示他们的证书(仅限公钥)。 如果他们只使用公钥呈现,黑客可以窃取此公钥并请求我的网络服务。 我的web服务如何区分黑客/实际客户端。

这是一个很好的问题。

重要的是要认识到SSL握手不仅包括共享证书。 除其他外,还有挑战/响应步骤。 以下是它的工作原理:

您的服务器将生成随机数或时间戳(“质询”)并将其发送到您的浏览器,挑战它加密它。 然后,浏览器将使用私钥(它只能访问)来加密质询。 然后将该“响应”发送回服务器以进行validation。 服务器使用客户端证书中的公钥来解密响应。 由于只有客户端具有私钥,并且由于公钥是公知的且可validation的(因为它包含在签名且防篡改的证书中),服务器可以告知响应必须由与之关联的客户端加密。证书。 并且因为挑战是由服务器生成的,并且每次都不同,黑客不能通过重放先前挑战的响应来冒充客户端。

在生产中实施基于证书的身份validation时,客户端是否提供了服务器需要在其受信任的人员存储中添加的证书?

是的,如果服务器要求它,否则不。

或者服务器提供证书(由服务器签名)。

总是。 这些不是相互排斥的。 两者都可能发生。

我想在配置wcf服务器时,我们只需配置证书位置和存储。 我们永远不会将它与任何域绑定。 因此,出示此证书的任何客户都可以访问我的服务。 如果证书需要绑定到域。 他们为什么不能只允许来自该域的所有请求。

我不能做任何一个的头或尾。

当客户端调用wcf服务时,它会显示其证书。

如果服务器要求它。

该证书是否只带有公钥?

是。

并且这个证书可以被窃取(因为它在网络上传播)并被黑客用来使用Web服务。

不,因为它只包含公钥。