我有一个需要通过https保护的WCF服务。 WCF服务服务器站点和使用WCF服务的客户端都是自行开发的。
我生成了自签名证书,并在我的服务中使用了以下帮助文章的帮助:http://msdn.microsoft.com/en-us/library/ff647171.aspx。
我的服务的绑定和行为配置如下:
<behaviors>
<serviceBehaviors>
<behavior name="SecureServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<serviceCertificate findValue="CN={my server's ip address}" />
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="SqlMembershipProvider" />
</serviceCredentials>
<serviceAuthorization principalPermissionMode="UseAspNetRoles"
roleProviderName="SqlRoleProvider" />
<serviceThrottling maxConcurrentCalls="128"
maxConcurrentSessions="128"
maxConcurrentInstances="128" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="MyBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
所有WCF客户都是我们公司的员工,他们将通过IP地址通过Internet访问系统。我将服务器的证书添加到每台客户端计算机的可信证书颁发机构。
这样的配置足够安全吗?
答案 0 :(得分:7)
我不确定您是否理解证书安全的含义。 问题是,你可能会说所有现代证书都是平等的。现代哈希和加密算法是免费提供的,它们几乎都是牢不可破的。安全和不安全证书的区别在于信任问题。
创建证书以识别潜在恶意网络中的受信任服务器。你可以将它们与警察徽章或身份证进行比较,不过我猜它还有更多的东西。因此,有关证书有效性的主要问题是:
创建安全证书的问题类似于有关其有效性的问题:
当所有客户端和服务器彼此密切相关时(例如在同一家公司;您的情况下),可以使用自签名证书并在所有客户端上手动安装它,以便他们能够识别它。由于服务器未针对外部请求(仅来自任何人)打开,因此安全性也不是问题。因此,简而言之,只要您遵守标准安全准则,在您的情况下,自签名证书就可以了。
当您必须向外部访问者标识您的服务器时,会出现此问题。例如,如果我想使用您的Web服务,我的计算机将不会使用您正在使用的证书的任何概念(因为必须在需要了解它的每台计算机上显式安装自签名证书),因此https功能将毫无用处。在这种情况下,您必须从广泛认可的CA(可能需要花钱)获得证书。这不会比自签名证书更具内在安全性,但它会更值得信赖。
答案 1 :(得分:1)
“足够安全吗?”我会问这个问题。所有自签名证书都在提供一定级别的身份验证,发送通信的人员具有该证书。
如果您相信签名是正确的签名,那么它足够安全。如果你想确定你&amp;您的订阅者正在与您通信,而不是冒充您的人,那么您应该获得CA签名证书。
答案 2 :(得分:0)
它具有相同的安全级别,但主要区别在于信任。在你的情况下,我会买一个便宜的证书。