基于证书的身份验证的基础

时间:2013-10-09 05:38:52

标签: c# wcf web-services security ssl

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

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

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

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

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

提前致谢。

让我说清楚:

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

2 个答案:

答案 0 :(得分:3)

  

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

是的,如果服务器要求,否则没有。

  

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

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

  

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

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

  

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

如果服务器要求它。

  

此证书是否只带有公钥?

  

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

不,因为它只包含公钥。

答案 1 :(得分:2)

  

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

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

  

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

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

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

  

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

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

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

编辑以回答更多问题

  

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

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

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

  

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

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

  

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

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

  

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

这是一个很好的问题。

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

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