WCF-Dienst mit WS-Sicherheit erfordert nur signierten Zeitstempel

Ich muss einem Drittanbieter einen Dienst bereitstellen, der Seifenmitteilungen mit einem signierten Zeitstempel sendet.

Wie kann ich meinen Dienst so konfigurieren, dass er dies unterstützt?

AKTUALISIERE Ich habe es geschafft, mich dem Format der angestrebten Soap-Nachricht zu nähern, aber WCF besteht darauf, sowohl den Benutzernamen als auch den Zeitstempel-Token zu signieren. Gibt es eine Möglichkeit, die Bindung so zu ändern, dass nur der Zeitstempel signiert wird?

Weiteres Update Hier sind unsere Anforderungen:

Das Timestamp-Element MUSS signiert sein.Der CN-Name auf dem zum Signieren verwendeten Zertifikat MUSS mit dem im UsernameToken-Element angegebenen Benutzernamen übereinstimmen.Das zum Signieren verwendete Zertifikat MUSS im BinarySecurityToken-Element gesendet werden. Das KeyInfo-Element DARF nur ein SecurityTokenReference-Element enthalten, das zum Verweisen auf das BinarySecurityToken verwendet werden muss.Ein Kanonisierungsalgorithmus MUSS angegeben werden. Die Signaturmethode MUSS angegeben werden und MUSS der SHA-1- oder SHA-2-Alghorithmus sein.Detached Signaturen sollten verwendet werden.

Irgendwelche Vorschläge

CURRENT CONFIG

Client Binding

<bindings>
  <wsHttpBinding>
    <binding name="WSBC">
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Certificate" proxyCredentialType="None"></transport>
        <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="false" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

Client Endpoint

<client>
  <endpoint address="https://localhost/WcfTestService/Service2.svc"
  behaviorConfiguration="CCB" binding="wsHttpBinding"
  bindingConfiguration="WSBC"
  contract="ServiceReference2.IService2"
  name="wsHttpBinding_IService2" />
</client>

Client Behavior

<behaviors>,
  <endpointBehaviors>
    <behavior name="MBB">
      <clientCredentials>
        <clientCertificate  findValue="03 58 d3 bf 4b e7 67 2e 57 05 47 dc e6 3b 52 7f f8 66 d5 2a"
                            storeLocation="LocalMachine"
                            storeName="My"
                            x509FindType="FindByThumbprint" />
        <serviceCertificate>
          <defaultCertificate findValue="03 58 d3 bf 4b e7 67 2e 57 05 47 dc e6 3b 52 7f f8 66 d5 2a"
                              storeLocation="LocalMachine"
                              storeName="My"
                              x509FindType="FindByThumbprint"  />
        </serviceCertificate>
      </clientCredentials>
    </behavior>
  </endpointBehaviors>
</behaviors>

Service Binding

<bindings>
  <wsHttpBinding>
    <binding name="ICB">
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Certificate" proxyCredentialType="None"></transport>
        <message    clientCredentialType="UserName" 
                    negotiateServiceCredential="false"
                    establishSecurityContext="false" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

Serice Endpoint

<service name="WcfTestService.Service2" behaviorConfiguration="SCB">
    <endpoint     address="" binding="wsHttpBinding" contract="WcfTestService.IService2"
    bindingConfiguration="ICB" name="MS" />
</service>

Service Behavior

<behaviors>
  <serviceBehaviors>
    <behavior name="SCB">
      <serviceCredentials>
        <serviceCertificate     findValue="4d a9 d8 f2 fb 4e 74 bd a7 36 d7 20 a8 51 e2 e6 ea 7d 30 08"
                                storeLocation="LocalMachine"
                                storeName="TrustedPeople"   
                                x509FindType="FindByThumbprint" />
        <userNameAuthentication 
            userNamePasswordValidationMode="Custom" 
            customUserNamePasswordValidatorType="WcfTestService.UsernameValidator, WcfTestService" />
        <clientCertificate>
          <authentication certificateValidationMode="None" revocationMode="NoCheck" />
        </clientCertificate>
      </serviceCredentials>
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Antworten auf die Frage(8)

Ihre Antwort auf die Frage