We encountered an issue using client certificate authentication with a client certificate issued by a CA in the Trusted Root CA store.
The client certificate chain is valid when opening it on the server, showing the whole chain. When attaching it to a request the request would be rejected with response code 403 - Forbidden. Looking at the System eventlog for SChannel errors showed nothing.
Eventually we switched on WCF tracing, and found the following in the trace:
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Warning">Searching on Google brought us no closer, eventually I found an old link I've used before under different but related circumstances.http://code-clarity.blogspot.com/2012/06/how-to-troubleshoot-ssltsl-or-x509.html. I enabled CAPI2 logging in the Event Viewer, and saw entries containing the following:
<TraceIdentifier>http://msdn.microsoft.com/en-ZA/library/System.ServiceModel.Channels.HttpsClientCertificateInvalid.aspx</TraceIdentifier>
<Description>Client certificate is invalid with native error code 0x2013 (see http://go.microsoft.com/fwlink/?LinkId=187517 for details).</Description>
<AppDomain>MyApp.exe</AppDomain>
<Source>System.ServiceModel.Channels.HttpsChannelListener`1[System.ServiceModel.Channels.IReplyChannel]/30640645</Source>
<ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/HttpRequestTraceRecord">
<Headers>
<SOAPAction>"Authorize"</SOAPAction>
<Connection>Keep-Alive</Connection>
<Content-Length>1281</Content-Length>
<Content-Type>text/xml;charset=UTF-8</Content-Type>
<Accept-Encoding>gzip,deflate</Accept-Encoding>
<Host>MyAppURL</Host>
<User-Agent>Apache-HttpClient/4.1.1 (java 1.5)</User-Agent>
</Headers>
<Url>https://MyAppURL</Url>
</ExtendedData>
</TraceRecord>
<RevocationInfo>
<RevocationResult value="80092013">The revocation function was unable to check revocation because the revocation server was offline.</RevocationResult>
</RevocationInfo>
<TrustStatus>
<ErrorStatus value="1000040" CERT_TRUST_REVOCATION_STATUS_UNKNOWN="true" CERT_TRUST_IS_OFFLINE_REVOCATION="true" />
<InfoStatus value="102" CERT_TRUST_HAS_KEY_MATCH_ISSUER="true" CERT_TRUST_HAS_PREFERRED_ISSUER="true" />
</TrustStatus>
<CertVerifyRevocation>
<Certificate fileRef="C2CBFE64932BBB842F04874445416E34164E3FE5.cer" subjectName="Trustwave Organization Validation SHA256 CA, Level 1" />
<IssuerCertificate fileRef="8782C6C304353BCFD29692D2593E7D44D934FF11.cer" subjectName="SecureTrust CA" />
<Flags value="0" />
<AdditionalParameters timeToUse="2015-08-12T07:58:21.234Z" currentTime="2015-08-12T07:58:21.234Z" urlRetrievalTimeout="PT15S" />
<RevocationStatus index="0" error="80092013" reason="0" />
<EventAuxInfo ProcessName="lsass.exe" />
<CorrelationAuxInfo TaskId="{612311D8-4441-4C4B-91B1-0A049B93BFD7}" SeqNumber="5" />
<Result value="80092013">The revocation function was unable to check revocation because the revocation server was offline.</Result>
</CertVerifyRevocation>
To identify which URLs are not accessible, look for entries like these:
<CertRejectedRevocationInfo>
<SubjectCertificate fileRef="C2CBFE64932BBB842F04874445416E34164E3FE5.cer" subjectName="Trustwave Organization Validation SHA256 CA, Level 1" />
<IssuerCertificate fileRef="8782C6C304353BCFD29692D2593E7D44D934FF11.cer" subjectName="SecureTrust CA" />
<URL scheme="http">http://ocsp.trustwave.com/MFEwTzBNMEswSTAJBgUrDgMCGgUABBQ1mI4Ww4R5LZiQ295pj4OF%2F44yyAQUyk7dWyc1Kdn27sPlU%2B%2BkwBmWHa8CEEssZkb0NHdbZ980oE3VBOY%3D</URL>
<EarliestOnlineTime>2015-08-12T08:15:03.729Z</EarliestOnlineTime>
<Action name="CanRetrieveFromNetwork" />
<EventAuxInfo ProcessName="lsass.exe" />
<CorrelationAuxInfo TaskId="{612311D8-4441-4C4B-91B1-0A049B93BFD7}" SeqNumber="3" />
</CertRejectedRevocationInfo>
<CertRejectedRevocationInfo>Make sure that the URL(s) in the log entries are accessible, this should sort out the issue.
<SubjectCertificate fileRef="C2CBFE64932BBB842F04874445416E34164E3FE5.cer" subjectName="Trustwave Organization Validation SHA256 CA, Level 1" />
<IssuerCertificate fileRef="8782C6C304353BCFD29692D2593E7D44D934FF11.cer" subjectName="SecureTrust CA" />
<URL scheme="http">http://crl.trustwave.com/STCA.crl</URL>
<EarliestOnlineTime>2015-08-12T08:15:04.759Z</EarliestOnlineTime>
<Action name="CanRetrieveFromNetwork" />
<EventAuxInfo ProcessName="lsass.exe" />
<CorrelationAuxInfo TaskId="{612311D8-4441-4C4B-91B1-0A049B93BFD7}" SeqNumber="4" />
</CertRejectedRevocationInfo>