Prinzipalnamen

Damit ein Client eine sich gegenseitig authentifizierte Sitzung mit einem Serverprogramm erstellen kann, muss er den erwarteten Prinzipalnamen des Servers angeben. Einige Protokolle, z. B. Kerberos, erfordern einen korrekten Serverprinzipalnamen für jede authentifizierte Sitzung. Ein Prinzipal ist eine Entität, die vom Sicherheitssystem erkannt wird. Dies schließt sowohl benutzer- als auch systemdienstliche Dienste ein. Alle Prinzipalnamen haben ein ähnliches Format für einen bestimmten Sicherheitssupportanbieter (Security Support Provider, SSP). Ein SSP ist ein Softwaremodul, das eine Sicherheitsüberprüfung durchführt. Weitere Informationen finden Sie unter Übersicht über die SSPI-Architektur. Um einheitlich zu bleiben, gibt ein Sicherheitsanbieter in der Regel Systemdiensten ähnliche Namen wie Benutzer. Unter einigen Sicherheitsanbietern haben Systemdienste möglicherweise keinen Prinzipalnamen.

Der Server registriert seinen Prinzipalnamen für den Sicherheitsanbieter mithilfe der RpcServerRegisterAuthInfo-Funktion. Für jeden Sicherheitsanbieter kann nur ein Serverprinzipalname verwendet werden. Wenn mehr als ein Name registriert ist, wird nach dem Zufallsprinzip ein Name ausgewählt und verwendet. Der SSP bestimmt das Format des Prinzipalnamens. Beispielsweise sehen die Kerberos/Negotiate-SSPs für einen Systemdienst ungefähr wie folgt aus: _ Computername$ @childdomain.parentdomain1.parentdomain2.COM .

Das empfohlene Verfahren zum Generieren von Prinzipalnamen besteht darin, dokumentierte APIs (z. B. die DsMakeSpn-Funktion) zu verwenden, anstatt den Prinzipalnamen aus Zeichenfolgen zusammenzuschneiden. Die Verwendung dokumentierter APIs erhöht die Portabilität zwischen verschiedenen Bereitstellungsumgebungen und vermeidet die Möglichkeit von Fehlern.

Wenn Sie einen falschen Prinzipalnamen angeben, können Client und Server möglicherweise keine authentifizierte Sitzung einrichten. Der SCHANNEL-SSP nimmt Prinzipalnamen in einer von zwei Formen an:

  • Das erste Formular für den SCHANNEL-Prinzipalnamen ist das Msstd-Formular. Namen in msstd-Form folgen im Allgemeinen dem Muster msstd:servername@serverdomain.com . Dies wird als Eigenschaft für den E-Mail-Namen bezeichnet. Wenn das Zertifikat eine Eigenschaft für den E-Mail-Namen und das @-Zeichen enthält, lautet der Prinzipalname msstd:email name. Andernfalls muss sie die Eigenschaft für den allgemeinen Namen enthalten. Interne umgekehrte Schrägstriche werden wie bei Zeichenfolgenbindungen verdoppelt.
  • Das zweite Formular für den SCHANNEL-Prinzipalnamen ist das vollständige Formular. Dies ist eine Reihe von RFC1779-kompatiblen Namen, die durch spitzen Klammern und durch umgekehrte Schrägstriche getrennt sind. Es folgt in der Regel dem Muster fullsic: \ < \ Authority \ SubAuthority \ ..... \ Person> oder fullsic: \ < \ Authority \ SubAuthority \ ..... \ ServerProgram>.

Wenn der Name nicht mit dem Zertifikat übereinstimmt, wird ERROR _ ACCESS _ DENIED zurückgegeben. Wenn das Namensformat ungültig ist, gibt SCHANNEL SSP den Code ERROR _ INVALID _ PARAMETER zurück.

Um den Prinzipalnamen des Servers abzufragen, können Anwendungen RpcMgmtInqServerPrincNameaufrufen. Dadurch wird eine auf NULL endende Zeichenfolge zugeordnet, die den Prinzipalnamen enthält. Bevor sie beendet wird, muss Ihre Anwendung RpcStringFree aufrufen, um den Arbeitsspeicher freizugeben, den diese Zeichenfolge belegt.

Das Abfragen des Servernamens auf diese Weise ist nicht sicher und sollte vermieden werden. Für die Serverauthentifizierung sollte das Clientprogramm wissen, mit welchem Server eine Verbindung hergestellt wird, und den Serverprinzipalnamen von Grund auf neu erstellen.