自签名证书是否足够安全?

时间:2012-07-01 09:33:28

标签: c# .net wcf digital-certificate

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

这样的配置足够安全吗?

3 个答案:

答案 0 :(得分:7)

我不确定您是否理解证书安全的含义。 问题是,你可能会说所有现代证书都是平等的。现代哈希和加密算法是免费提供的,它们几乎都是牢不可破的。安全和不安全证书的区别在于信任问题。

创建证书以识别潜在恶意网络中的受信任服务器。你可以将它们与警察徽章或身份证进行比较,不过我猜它还有更多的东西。因此,有关证书有效性的主要问题是:

  • 我是否认可该证书? (我能识别ID的类型吗?
  • 证书是否与使用它的服务器匹配? (照片是否类似于持票人?
  • 证书是否已被盗用? ( ID可能被盗了吗?
  • 根CA是否已被入侵? (有人可以伪造身份证吗?

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

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

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

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

答案 1 :(得分:1)

“足够安全吗?”我会问这个问题。所有自签名证书都在提供一定级别的身份验证,发送通信的人员具有该证书。

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

答案 2 :(得分:0)

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

相关问题