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

Omt*_*ara 3 .net c# 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>
Run Code Online (Sandbox Code Playgroud)

所有WCF客户都是我们公司的员工,他们将通过IP地址通过Internet访问系统.我将服务器的证书添加到每台客户端计算机的可信证书颁发机构.

这样的配置足够安全吗?

Gre*_*Ros 7

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

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

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

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

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

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

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