CAPI2-Debugging
CAPI2 hat nicht mit der ISDN-CAPI zu tun, sondern beschreibt die CryptoAPI 2.0, auf der die SSL/TLS-Verbindungen von Windows basieren. Wenn immer ein Client oder Server eine Verbindung per TLS aufbaut oder annimmt ist die CAPI2 mit im Boot. Wenn die Applikation aber keine Fehlermeldung ausgibt, dann sind Protokollfehler oder Probleme mit dem Zertifikat nur schwer zu finden. CAPI2-Debugging kann hier weiter helfen ist zudem ein praktisches Beispiel der erweiterten Protokollfunktionen von Windows im EventViewer.
Schannel ist nicht genug
Vielleicht haben Sie im System-Eventlog schon Fehlermeldungen von "SCHANNEL" gefunden, die aber nicht immer viel aussagen.
Es gibt sehr viele Treffer, wenn Sie nach Schannel und die Fehlernummer suchen, aber meist keine qualifizierte Fehlersuche sondern viele Hinweise, wie man bestimmte TLS-Versionen im Internet Explorer abschaltet oder Einstellungen von Schannel schwächt mit der Hoffnung auf Abhilfe. Besser wäre es aber die Ursache zu finden und dann zu überlegen, was der richtige und sichere Weg zur Korrektur ist. Schließlich möchten Sie mit Verschlüsselung ja etwas erreichen.
- SSL/TLS Alert Protocol & the Alert Codes
https://blogs.msdn.microsoft.com/kaushal/2012/10/05/ssltls-alert-protocol-the-alert-codes/
Aktivieren von CAPI2 Debugging
Zuerst müssen Sie den klassischen EventViewer (Eventvwr.exe) starten und unter "Application and Service Log/Microsoft/Windows/CAPI2" das Logging aktivieren
Dann dauert es ein paar Sekunden und das Eventlog füllt sich mit Einträgen.
In der Beschreibung zum Event ist leider fast nie etwas zu sehen. Sie müssen den Event also schon öffnen und dann über Details die XML-Ansicht nutzen:
Meist steht der Fehler ziemlich weit unten. Ich kopiere den Inhalt daher über die Zwischenablage in einen Editor meiner Wahl um dort einen besseren Überblick zu erhalten.
Wichtiger Hinweis
Dies ist eine temporäre Option zum Suchen von
Fehlern, die zusätzliche Ressourcen fordert.
Vergessen Sie also nicht am Ende ihrer
Fehlersuche das Logging wieder abzuschalten.
Beispiele
Vielleicht funktioniert bei ihnen ja alles. Dann werden Sie in der Regel keine Fehler finden. Hier sind zwei Logs als Beispiel.
Log Name: Microsoft-Windows-CAPI2/Operational
Source: Microsoft-Windows-CAPI2
Event ID: 11
Task Category: Build Chain
Level: Error
Keywords: Path Discovery,Path Validation
Computer: fe2.msxfaq.net
Description: für more details für this event, please refer to the "Details" section
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-CAPI2" Guid="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" />
<EventID>11</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>11</Task>
<Opcode>2</Opcode>
<Keywords>0x4000000000000003</Keywords>
<TimeCreated SystemTime="2013-01-13T09:32:45.228804600Z" />
<EventRecordID>4</EventRecordID>
<Correlation />
<Execution ProcessID="1192" ThreadID="1384" />
<Channel>Microsoft-Windows-CAPI2/Operational</Channel>
<Computer>fe2.msxfaq.net</Computer>
<Security UserID="S-1-5-21-1614895754-1454471165-682003330-826" />
</System>
<UserData>
<CertGetCertificateChain>
<Certificate fileRef="C9231E0C550F956D32EADD6E731A173831F345FF.cer" subjectName="Microsoft Time-Stamp Service" />
<AdditionalStore>
<Certificate fileRef="580A6F4CC4E4B669B9EBDC1B2B3E087B80D0678D.cer" subjectName="Microsoft Windows Production PCA 2011" />
<Certificate fileRef="7DE47E2554CE16104732642B874FE89C32591FBE.cer" subjectName="Microsoft Windows" />
<Certificate fileRef="C9231E0C550F956D32EADD6E731A173831F345FF.cer" subjectName="Microsoft Time-Stamp Service" />
<Certificate fileRef="2AA752FE64C49ABE82913C463529CF10FF2F04EE.cer" subjectName="Microsoft Time-Stamp PCA 2010" />
</AdditionalStore>
<ExtendedKeyUsage />
<Flags value="4" CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL="true" />
<ChainEngineInfo context="User" />
<CertificateChain chainRef="{450CD1F1-664B-4394-A7F1-58A0CD193090}">
<TrustStatus>
<ErrorStatus value="1" CERT_TRUST_IS_NOT_TIME_VALID="true" />
<InfoStatus value="100" CERT_TRUST_HAS_PREFERRED_ISSUER="true" />
</TrustStatus>
<ChainElement>
<Certificate fileRef="C9231E0C550F956D32EADD6E731A173831F345FF.cer" subjectName="Microsoft Time-Stamp Service" />
<SignatureAlgorithm oid="1.2.840.113549.1.1.11" hashName="SHA256" publicKeyName="RSA" />
<PublicKeyAlgorithm oid="1.2.840.113549.1.1.1" publicKeyName="RSA" publicKeyLength="2048" />
<TrustStatus>
<ErrorStatus value="1" CERT_TRUST_IS_NOT_TIME_VALID="true" />
<InfoStatus value="102" CERT_TRUST_HAS_KEY_MATCH_ISSUER="true" CERT_TRUST_HAS_PREFERRED_ISSUER="true" />
</TrustStatus>
<ApplicationUsage>
<Usage oid="1.3.6.1.5.5.7.3.8" name="Time Stamping" />
</ApplicationUsage>
<IssuanceUsage />
</ChainElement>
<ChainElement>
<Certificate fileRef="2AA752FE64C49ABE82913C463529CF10FF2F04EE.cer" subjectName="Microsoft Time-Stamp PCA 2010" />
<SignatureAlgorithm oid="1.2.840.113549.1.1.11" hashName="SHA256" publicKeyName="RSA" />
<PublicKeyAlgorithm oid="1.2.840.113549.1.1.1" publicKeyName="RSA" publicKeyLength="2048" />
<TrustStatus>
<ErrorStatus value="0" />
<InfoStatus value="102" CERT_TRUST_HAS_KEY_MATCH_ISSUER="true" CERT_TRUST_HAS_PREFERRED_ISSUER="true" />
</TrustStatus>
<ApplicationUsage any="true" />
<IssuanceUsage>
<Usage oid="1.3.6.1.4.1.311.46.3" />
</IssuanceUsage>
</ChainElement>
<ChainElement>
<Certificate fileRef="3B1EFD3A66EA28B16697394703A72CA340A05BD5.cer" subjectName="Microsoft Root Certificate Authority 2010" />
<SignatureAlgorithm oid="1.2.840.113549.1.1.11" hashName="SHA256" publicKeyName="RSA" />
<PublicKeyAlgorithm oid="1.2.840.113549.1.1.1" publicKeyName="RSA" publicKeyLength="4096" />
<TrustStatus>
<ErrorStatus value="0" />
<InfoStatus value="13C" CERT_TRUST_HAS_NAME_MATCH_ISSUER="true"
CERT_TRUST_IS_SELF_SIGNED="true"
CERT_TRUST_AUTO_UPDATE_CA_REVOCATION="true"
CERT_TRUST_AUTO_UPDATE_END_REVOCATION="true"
CERT_TRUST_HAS_PREFERRED_ISSUER="true" />
</TrustStatus>
<ApplicationUsage any="true" />
<IssuanceUsage any="true" />
</ChainElement>
</CertificateChain>
<EventAuxInfo ProcessName="consent.exe" impersonateToken="S-1-5-21-1454471165-1614895754-682003330-82066" />
<CorrelationAuxInfo TaskId="{9F06EC07-A318-479E-B10C-8148D8F2F336}" SeqNumber="3" />
<Result value="800B0101">A required certificate is not within its validity period when verifying against the current system clock or the timestamp in the signed file.</Result>
</CertGetCertificateChain>
</UserData>
</Event>
Interessant ist hier die Meldung am Ende, die sagt: "<Result value="800B0101">A required certificate is not within its validity period when verifying against the current system clock or the timestamp in the signed file.</Result>".
Log Name: Microsoft-Windows-CAPI2/Operational Source: Microsoft-Windows-CAPI2 Event ID: 30 Task Category: Verify Chain Policy Level: Error Keywords: Path Validation User: NETWORK SERVICE Computer: fe2.msxfaq.net Description: für more details für this event, please refer to the "Details" section Event Xml: <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="Microsoft-Windows-CAPI2" Guid="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" /> <EventID>30</EventID> <Version>0</Version> <Level>2</Level> <Task>30</Task> <Opcode>0</Opcode> <Keywords>0x4000000000000001</Keywords> <TimeCreated SystemTime="2013-01-13T09:34:43.285446000Z" /> <EventRecordID>78</EventRecordID> <Correlation /> <Execution ProcessID="236" ThreadID="384" /> <Channel>Microsoft-Windows-CAPI2/Operational</Channel> <Computer>fe2.msxfaq.net</Computer> <Security UserID="S-1-5-20" /> </System> <UserData> <CertVerifyCertificateChainPolicy> <Policy type="CERT_CHAIN_POLICY_SSL" constant="4" /> <Certificate fileRef="xxxxxxxxxxxxxxxx.cer" subjectName="lyncpool.msxfaq.net" /> <CertificateChain chainRef="{xxxxxxxxx}"> <TrustStatus> <ErrorStatus value="0" /> <InfoStatus value="0" /> </TrustStatus> <ChainElement> <Certificate fileRef="xxxxxxxxxxxxxxxx.cer" subjectName="lyncpool.msxfaq.net" /> <SignatureAlgorithm oid="1.2.840.113549.1.1.5" hashName="SHA1" publicKeyName="RSA" /> <PublicKeyAlgorithm oid="1.2.840.113549.1.1.1" publicKeyName="RSA" publicKeyLength="2048" /> <TrustStatus> <ErrorStatus value="0" /> <InfoStatus value="0" /> </TrustStatus> <ApplicationUsage any="true" /> <IssuanceUsage any="true" /> </ChainElement> </CertificateChain> <Flags value="0" /> <SSLAdditionalPolicyInfo authType="server" serverName="dbserver.msxfaq.net"> <IgnoreFlags value="2280" SECURITY_FLAG_IGNORE_REVOCATION="true" SECURITY_FLAG_IGNORE_WRONG_USAGE="true" SECURITY_FLAG_IGNORE_CERT_DATE_INVALID="true" /> </SSLAdditionalPolicyInfo> <Status chainIndex="0" elementIndex="0" /> <EventAuxInfo ProcessName="RtcHost.exe" /> <CorrelationAuxInfo TaskId="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" SeqNumber="2" /> <Result value="800B010F">The certificate's CN name does not match the passed value.</Result> </CertVerifyCertificateChainPolicy> </UserData> </Event>
Hier ist auch wieder das "Result" der wichtig Hinweis, dass der Name im Zertifikat mit dem gewünschten Ziel nicht übereinstimmt. Ich habe ihnen "Rot" den angefragten Server markiert und in Grün der Name, der im gelieferten Zertifikat enthalten ist. Da wollte mein Server also eine TLS-Verbindung zum "dbserver.msxfaq.net" aufbauen aber der Name war nicht im Zertifikat enthalten.
IIS SChannel Debugging
Eine weitere Möglichkeit eine Diagnosefunktion zu aktivieren erfolgt über REGEDIT. Bislang habe ich diesen Weg aber noch nicht benötigt.
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel Value Name: EventLogging Value Type: REG_DWORD Value Data: 7
- 260729 How to enable Schannel event logging in IIS
- Schannel SSP Architecture
http://technet.microsoft.com/en-us/library/cc783349%28WS.10%29.aspx - Schannel level of logging NPS
http://technet.microsoft.com/en-us/library/dd197492%28WS.10%29.aspx
Weitere Links
- SSL/TLS Alert Protocol & the
Alert Codes
https://blogs.msdn.microsoft.com/kaushal/2012/10/05/ssltls-alert-protocol-the-alert-codes/ - 2328240 Event ID 4107 or Event ID 11 is logged in the Application log in Windows and in Windows Server
- Enable CAPI2 event logging
to troubleshoot PKI and SSL
Certificate Issues
http://blogs.msdn.com/b/benjaminperkins/archive/2013/10/01/enable-capi2-event-logging-to-troubleshoot-pki-and-ssl-certificate-issues.aspx - Enable CAPI2 event logging
to troubleshoot PKI and SSL
Certificate Issues
https://blogs.msdn.microsoft.com/benjaminperkins/2013/09/30/enable-capi2-event-logging-to-troubleshoot-pki-and-ssl-certificate-issues/ - Troubleshooting PKI Problems
on Windows Vista
http://technet.microsoft.com/en-us/library/cc749296(v=WS.10).aspx