Necesito proporcionar un servicio a un tercero que enviará mensajes soap con una marca de tiempo firmada.WCF Service with WS-Security requiere Signed Timestamp only
¿Cómo puedo configurar mi servicio para admitir esto?
ACTUALIZACIÓN He conseguido acercarse al formato del mensaje SOAP que estamos buscando, pero WCF insiste en firmar tanto el nombre de usuario y las fichas de sello de tiempo, ¿Hay una manera de modificar la unión a solo firme la marca de tiempo?
nueva actualización Éstos son nuestros requisitos:
- El elemento Marca de tiempo debe ser firmado.
- El nombre CN en el certificado utilizado para la firma DEBE coincidir con el nombre de usuario otorgado en el elemento UsernameToken.
- El certificado utilizado para la firma DEBE enviarse en el elemento BinarySecurityToken.
- El elemento KeyInfo DEBE contener solo un elemento SecurityTokenReference, que se debe usar para hacer referencia al BinarySecurityToken.
- Se DEBE especificar un algoritmo de canonicalización.
- El SignatureMethod DEBE especificarse y DEBE ser el alghorithm SHA-1 o SHA-2.
- Las firmas separadas DEBERÍAN ser utilizadas.
¿Alguna sugerencia?
de configuración actual
cliente Encuadernación
<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>
cliente de Endpoint
<client>
<endpoint address="https://localhost/WcfTestService/Service2.svc"
behaviorConfiguration="CCB" binding="wsHttpBinding"
bindingConfiguration="WSBC"
contract="ServiceReference2.IService2"
name="wsHttpBinding_IService2" />
</client>
comportamiento de los clientes
<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>
Encuadernación
<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 extremo de servicio
<service name="WcfTestService.Service2" behaviorConfiguration="SCB">
<endpoint address="" binding="wsHttpBinding" contract="WcfTestService.IService2"
bindingConfiguration="ICB" name="MS" />
</service>
Comportamiento Servicio
<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>
¿Logró que la configuración funcionara para que solo se firmara el elemento Timestamp? Actualmente estoy tratando de lograr lo mismo. – Edward