I am testing a web service with an external partner using 2 way SSL under IIS 7.5. I am requiring SSL, requiring a client cert, and using one to one mapping to authenticate to a domain account. I have configured everything and it works fine on our network (I am able to provide a client cert, get authenticated and invoke the service from browser and test harness).
From outside of our network (in most cases, see below), I am getting a 403.7 error. I have gone through the machine level certificate store and made sure the certificates and CAs are trusted.
Here’s the weird thing. I obtained a Type I cert to test from home (and got 403.7 like our intended partner is). So I setup Fiddler to debug SSL and send my certificate, and this works for some reason. I setup a test harness to pass the exact same certificate, and got 403.7. I test in my browser (IE 9), don’t get a prompt for a client cert, and get 403.7.
Any help appreciated.
Bill
I am testing a web service with an external partner using 2 way SSL
Share
Last time I checked, IIS was using re-negotiation (by default) to get the client certificate: there is a first handshake where the server doesn’t request a client certificate, followed by another handshake (encrypted this time) where the server requests the certificate (via a TLS
CertificateRequestmessage). This will prevent you from seeing anything from Wireshark, unless you configure it to use the server’s private key and decipher the traffic (note that this only works with some cipher suites).One way to see the client-certificate negotiation is to configure IIS to use initial client certificate negotiation, using netsh and clientcertnegotiation=true (which is about initial negotiation). At least the
CertificateRequestand the certificate will be sent in clear during the handshake, so you should be able to see this with Wireshark.If the client isn’t sending a certificate to the server as a response to the
CertificateRequest, you’ll still see an emptyCertificatemessage from the client.If you don’t export the private key with the certificate to use with Fiddler or whichever other client, there is no chance that it will be able to use the certificate. It may at best try to send the certificate, but the handshake will fail (since the
CertificateVerifymessage needs to be signed by the client’s private key).I guess you may encounter a problem whereby:
unsupported_certificate,certificate_revoked,certificate_expired,certificate_unknownshould be fatal, so this is at the server’s discretion).