(Gepostet in ServerFault anstelle von StackOverflow, da es meines Erachtens mehr um die Betriebssystemkonfiguration als um Programmcode geht).
Ich bin derzeit für die Wartung eines Systems verantwortlich, das eine Verbindung zu einem Webservice eines Drittanbieters herstellt. Dieser Webservice erfordert Clientauthentifizierungszertifikate, was fair genug ist. Der Webservice selbst ist jedoch durch ein selbstsigniertes Zertifikat geschützt, das von einem selbst erstellten Stammzertifizierungsstellenzertifikat erstellt wird - dem Stamm, der die Clientauthentifizierungszertifikate erstellt.
Es würde ausreichen, nur das aktuelle Dienstzertifikat zur Liste der vertrauenswürdigen Adressen hinzuzufügen und das selbst erstellte Autorisierungszertifikat zu ignorieren. Leider ändert sich das Dienstzertifikat regelmäßig, sodass das Autorisierungszertifikat vertrauenswürdig sein muss, um sicherzustellen, dass die Anwendung nicht beschädigt wird, wenn die Service-Zertifikat wird erneuert.
Aufgrund meiner Erfahrung mit dem Unternehmen, das den Webservice betreibt, vertraue ich dem CA-Zertifikat jedoch nicht (persönlich). Es würde mich nicht überraschen, wenn es ins Internet gelangen würde. Bedenklicherweise unterliegt das CA-Zertifikat keinen Einschränkungen hinsichtlich der Schlüsselverwendung es (während externe MITM-Angriffe eine Möglichkeit sind, obwohl remote, mache ich mir mehr Sorgen über ein durchgesickertes Zertifikat, das zum Beispiel für die Codesignatur verwendet wird).
Kann ich meinem Computer (derzeit eine Server-Box, in Zukunft jedoch normale Desktop-Client-Boxen) mitteilen, einer Zertifizierungsstelle zu vertrauen, jedoch nur für eine bestimmte Anzahl von Schlüsselnutzungen und eine kleine Anzahl möglicher Subjektnamen (Domain-Namen)? )?
Der Server ist derzeit Windows Server 2012 R2, kann jedoch auf einer Linux-Box ausgeführt werden - obwohl es sich bei den Desktop-Computern ausschließlich um Windows-Boxen handelt.
Antworten:
Ja, es ist möglich. Bei Windows gibt es eine Funktion mit der Bezeichnung "Gegenzertifizierung" oder "Qualifizierte Unterordnung".
Die Idee ist, dass Sie das ausstellende CA-Zertifikat eines Drittanbieters in Ihrer Umgebung signieren. Als Ergebnis wird das Remote-SSL-Zertifikat an Ihr eigenes Stammzertifizierungsstellenzertifikat gekettet. Um sich vor möglichen falschen Zertifikaten zu schützen, implementieren Sie eine
Name Constraints
Zertifikatserweiterung, in der Sie eine Liste zulässiger Namen angeben. Wenn eine Drittanbieter-Zertifizierungsstelle ein Zertifikat für einen anderen Namen ausstellt (der nicht ausdrücklich in der Namensbeschränkungserweiterung angegeben ist), wird dies von Ihrem CryptoAPI-Anbieter automatisch abgelehnt.Zusätzlich zu den Namensbeschränkungen können Sie die Einschränkung der erweiterten Schlüsselverwendung beschreiben, indem Sie die
Application Policies
Zertifikatserweiterung im Gegenzertifikat definieren . Daher überprüft Ihr Vertrauensanbieter erfolgreich nur die in derApplication Policies
Erweiterung angegebenen Verwendungen .Weitere Informationen: Planen und Implementieren von Gegenzertifizierung und qualifizierter Unterordnung unter Windows Server 2003
ps Obwohl der Artikel gegen Windows Server 2003 geschrieben wurde, gilt der Artikel immer noch für die neueste Windows Server-Version.
quelle