I'm using SSL Diag 1.1 to troubleshoot client cert problems. By using Client Cert Monitor I was able to pin it down to the following log entry:
Name="VerifyCertificate"
CertVerifyCertificateChainPolicy="0x1"
CertGetCertificateChain_dwFlags="0x40000000"
CERT_CHAIN_PARA.dwUrlRetrievalTimeout="0 ms"
CERT_CHAIN_PARA.fCheckRevocationFreshnessTime="FALSE"
CERT_CHAIN_PARA.dwRevocationFreshnessTime="0 sec"
CERT_CHAIN_POLICY_STATUS.dwError="0x800b010f"
CERT_CHAIN_POLICY_STATUS.lChainIndex="0"
CERT_CHAIN_POLICY_STATUS.lElementIndex="1"
In the client's browser it just said error 403.16, mal-formed cert or something. According to
http://msdn.microsoft.com/en-us/library/aa377188.aspx
CERT_CHAIN_POLICY_STATUS.dwError contains more information on exactly what causes the invalidity, but that page gives the error code in text, and certmon.log has it in hex. Does anyone know how to interpret the hex code?