【问题标题】:How can I send a password along with my certificate (X.509) in a WCF Service?如何在 WCF 服务中发送密码和我的证书 (X.509)?
【发布时间】:2010-11-05 09:36:10
【问题描述】:

我有一个使用 X.509 证书作为客户端凭据的 WCF 服务。这些凭据中的大多数不需要密码即可使用,只需安装即可。

但是现在,我们的一个客户有一个证书,每次使用它时都需要输入密码(即每次服务运行时)。此服务每天调用另一个服务 n 次,但如果无法验证证书,则会失败。

到目前为止,我们每次遇到此问题时都要求客户订购(并支付)新证书,但我和我们的客户都厌倦了每次都经历这个问题。我自己没有做过这项服务,也没有太多关于 WCF 和服务的任何经验。

我想知道的是:是否可以将此密码连同有关证书的所有其他信息一起输入到我们的配置文件中?

这是服务的 XML 配置的一部分:

<configuration>
  <system.serviceModel>
    <client>
      <endpoint
        address="***"
        binding="basicHttpBinding"
        bindingConfiguration="***"
        behaviorConfiguration="HTTPSEndpoint"
        contract="***"
        name="***" />
    </client>
    <bindings>
      <basicHttpBinding>
        <binding
          name="***"
          sendTimeout="00:05:00"
          maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647" >
          <readerQuotas maxStringContentLength="2147483647" />
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name ="HTTPSEndpoint">
          <clientCredentials>
            <clientCertificate
              findValue="***"
              storeLocation="LocalMachine"
              storeName="My"
              x509FindType="FindBySubjectName"/>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

【问题讨论】:

    标签: .net wcf x509certificate


    【解决方案1】:

    从客户端计算机上的证书存储区检索证书时需要输入密码,因为证书是在选中“启用强私钥保护”选项的情况下导入的:

    这通常设置为标准服务器强化过程的一部分。它适用于证书在用户出席时使用远程系统对用户进行身份验证的情况。

    由于密码提示是由于证书导入过程引起的,并且不是证书的固有属性,因此购买新证书不会改变任何内容。

    我知道在检索密码时无法以编程方式将密码传递给证书存储区。但是,如果您考虑一下,即使您成功了,也必须以某种方式保护上述密码。您可能会将密码加密到您的 .config 文件中,但现在您必须存储加密密钥。依此类推……总会有一个松散的结局,使“强大的私钥保护”变得毫无意义。

    基本上,您的客户不能同时拥有这两种方式:他们不能“启用强私钥保护”,并且每次需要客户证书时都不必输入密码。他们正确存储证书要好得多。

    对于无人值守的客户端服务,最安全的客户端证书存储方法如下:

    1. 在具有高强度密码的特定帐户下运行您的客户服务。
    2. 从 LocalMachine 存储中删除证书。机器上运行的任何帐户都可以访问安装在 LocalMachine 存储中的证书。
    3. 在客户端服务帐户的 CurrentUser 存储中安装证书。这意味着证书只能由客户服务帐户访问。安装证书后,请务必取消选中“启用强私钥保护”选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多