3

我有一个需要通过 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 访问系统。我会将服务器的证书添加到每台客户端计算机的受信任证书颁发机构。

这样的配置是否足够安全?

4

3 回答 3

7

我不确定您是否理解证书安全意味着什么。问题是,您可能会说所有现代证书都是平等的。现代散列和加密算法是免费提供的,它们几乎都是牢不可破的。区分安全证书和不安全证书的是信任问题。

创建证书以识别潜在敌对网络中的受信任服务器。您可能会将它们与警察徽章或身份证进行比较,尽管我想还有更多的东西。因此,关于证书有效性的主要问题是:

  • 我完全认可证书吗?(我完全认得ID的类型吗?
  • 证书是否与使用它的服务器匹配?(照片和持票人很像吗?
  • 证书是否已被泄露?(会不会是身份证被盗了?
  • 根 CA 是否已被破坏?(有人可以伪造身份证吗?

创建安全证书的问题类似于关于其有效性的问题:

  • 在所有客户端上安装证书意味着识别服务器。
  • 确保服务器与证书匹配
  • 保护证书和根 CA。

当所有客户端和服务器都彼此密切了解时(例如在同一家公司;您的情况),可以使用自签名证书并手动将其安装在所有客户端上,以便它们能够识别它。由于服务器不对外部请求(来自任何人)开放,因此安全性也不是问题。因此,简而言之,只要您遵守标准安全准则,就您而言,自签名证书就可以了。

当您必须向外部访问者标识您的服务器时,就会出现问题。例如,如果我想使用您的 Web 服务,我的计算机不会知道您正在使用的证书(因为自签名证书必须显式安装在需要了解它的每台计算机上),因此 https 功能将毫无用处。在这种情况下,您必须从广泛认可的 CA 获得证书(这可能需要花钱)。这不会比自签名证书在本质上更安全,但它会更值得信赖。

于 2012-07-01T09:53:31.353 回答
1

“什么足够安全?” 是我要问的问题。自签名证书所做的只是提供一定级别的身份验证,即发送通信的人拥有该证书。

如果您相信签名是正确的签名,那么它就足够安全了。如果您想确保您和您的订阅者正在与您通信,而不是冒充您的人,那么您应该获得 CA 签名证书。

于 2012-07-01T09:39:41.087 回答
0

它具有相同级别的安全性,但主要区别在于信任。在您的情况下,我会购买便宜的证书。

于 2012-07-01T09:42:46.840 回答