如何在WCF服务中将密码与我的证书(X.509)一起发送?

Kri*_*ost 5 .net wcf x509certificate

我有一个WCF服务,它使用X.509证书作为客户端凭据.大多数这些凭据不需要密码来使用它,只是为了安装它.

但是现在,我们的客户有一个证书,每次使用时都要输入密码(即每次服务运行时).此服务每天调用另一个服务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>
Run Code Online (Sandbox Code Playgroud)

she*_*tie 4

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

将证书导入到证书存储区。

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

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

我知道在检索密码时没有办法以编程方式将密码传递到证书存储区。然而,如果你想一想,即使你成功了,你也必须以某种方式保护所述密码。您可以将密码加密到 .config 文件中,但现在您必须存储加密密钥。等等......某个地方会出现一个松散的结果,使得“强大的私钥保护”变得毫无意义。

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

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

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