WCF安全性:在许多服务器和服务器身份不重要的情况下,该怎么办?
所以我做了一些研究,发现确实,WCF是通过以明文形式发送用户名/密码来实现的。基本论点是“它不安全,因为它允许黑客拦截凭据”。因此,需要一个安全通道,为此,服务器需要一个X.509证书 好的,我明白了。但这里有一个问题:所述证书需要在客户端上受信任但是为什么呢?WCF安全性:在许多服务器和服务器身份不重要的情况下,该怎么办?,wcf,authentication,wcf-security,x509,Wcf,Authentication,Wcf Security,X509,所以我做了一些研究,发现确实,WCF是通过以明文形式发送用户名/密码来实现的。基本论点是“它不安全,因为它允许黑客拦截凭据”。因此,需要一个安全通道,为此,服务器需要一个X.509证书 好的,我明白了。但这里有一个问题:所述证书需要在客户端上受信任但是为什么呢? 可信证书通常用于Internet开放式服务器,以使客户端能够验证服务器的身份(即确保他们没有连接到伪造的服务器)。但是,如果服务器的标识在给定上下文中不重要呢 我的产品由两个应用程序组成。让我们称之为客户机和服务器1。 基本情况如下:
可信证书通常用于Internet开放式服务器,以使客户端能够验证服务器的身份(即确保他们没有连接到伪造的服务器)。但是,如果服务器的标识在给定上下文中不重要呢 我的产品由两个应用程序组成。让我们称之为客户机和服务器1。
基本情况如下:
(或者,用户也可以手动指定服务器地址)
(至少在本地;是的,我知道)
.
1需要注意的是,“服务器”一词在这里不是“互联网”的意思。也就是说,服务器不是web上的计算机,而是安装在某台计算机上的程序,甚至不必连接到Internet。其中有很多是由不同的客户安装在他们的网站上的,大多数情况下我都不知道。每个“服务器”不必有自己的唯一标识。所有“服务器”实例都可以使用相同的标识,您只需将客户端配置为期望该标识,而不管它与哪个“服务器”通信。这样,只要所有“服务器”使用相同的标识,客户机就不在乎了。本质上,这归结为为为“服务器”标识购买/生成单个证书,并确保所有“服务器”实例在其通信中使用该标识 从“服务器”配置的角度来看,您只需确保安装了密钥对,并使用
配置元素即可使用它:
<behavior name="MyServiceBehavior">
<!-- ... -->
<serviceCertificate findValue="AcmeCorpServer" storeLocation="LocalMachine" storeName="My" X509FindType="FindBySubjectName" />
<!-- ... -->
</behavior>
然后在客户端上,您只需确保已安装公钥并配置端点行为:
<behavior name="MyEndpointBehavior">
<!-- ... -->
<clientCredentials>
<clientCertificate findValue="MyClient" storeLocation="CurrentUser" storeName="My" X509FindType="FindBySubjectName" />
<serviceCertificate>
<defaultCertificate findValue="AcmeCorpServer" storeLocation="CurrentUser" storeName="TrustedPeople" X509FindType="FindBySubjectName" />
</serviceCertificate>
</clientCredentials>
<!-- ... -->
</behavior>
这更像是一种粗粒度的安全性方法,但它似乎适合您的特殊需要。这基本上就像说“允许我的客户与任何可能存在的服务对话,只要我们能够验证身份就是我们的身份”
最后,如果出于某种原因(例如,您不能/不想将内容放入证书存储),您不能/不想对配置执行此操作,那么也可以通过编程方式手动加载X.509证书,然后在运行时将其分配给客户机/服务器行为来执行此操作。为了避免证书验证,在
system.serviceModel/behaviors/endpointBehaviors/behavior/clientCredentials/serviceCertificate
元素中添加以下内容:
<authentication certificateValidationMode="None" />
当证书过期时,客户端会发生什么情况?@Fyodor Soikin:为了避免证书验证,可以在与defaultCertificate
元素
相同的级别添加以下内容。这样可以避免服务身份验证。如果证书过期,服务器和客户端都需要安装新的副本。这就是证书管理的本质。没有不能通过组策略轻松维护的内容。我知道您正在试图找到一种绕过服务器身份验证的方法,但我相信,如果您的软件存在安全漏洞,您的客户会更加不安,因为您会盲目地将敏感数据发送到任何冒充实例的“服务器”。此外,如果您的客户运行自己的CA,或者他们甚至可以信任您公司的CA,则无需购买证书。@Rest Wing-没错,但是,你首先放弃了使用证书的大部分安全性,因为你没有真正验证证书是否正确。@Drew Marsh:我看不到在“正确”使用证书的情况下不存在任何漏洞。我错过什么了吗?你能描述一下安全漏洞吗?