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 richtigen Serverprinzipalnamen für jede authentifizierte Sitzung. Ein Prinzipal ist eine Entität, die vom Sicherheitssystem erkannt wird. Dies umfasst sowohl menschliche Benutzer als auch Systemdienste. Alle Prinzipalnamen haben ein ähnliches Format für einen bestimmten Sicherheitsunterstützungsanbieter (Security Support Provider, SSP). Ein SSP ist ein Softwaremodul, das die Sicherheitsüberprüfung durchführt. Weitere Informationen finden Sie unter Übersicht über die SSPI-Architektur. Um die Einheitlichkeit zu gewährleisten, gibt ein Sicherheitsanbieter Systemdiensten in der Regel ähnliche Namen wie Benutzer. Bei einigen Sicherheitsanbietern verfügen Systemdienste möglicherweise nicht über einen 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 mehrere Namen registriert sind, wird ein Name zufällig ausgewählt und verwendet. Der SSP gibt das Format des Prinzipalnamens vor. Beispielsweise sehen die Kerberos/Negotiate-SSPs für einen Systemdienst ungefähr wie folgt aus: machine_name$@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 zusammenzuführen. Die Verwendung dokumentierter APIs erhöht die Portabilität zwischen verschiedenen Bereitstellungsumgebungen und beseitigt die Möglichkeit von Fehlern.

Die Angabe eines falschen Prinzipalnamens kann verhindern, dass der Client und der Server eine authentifizierte Sitzung einrichten. Der SCHANNEL-SSP akzeptiert Prinzipalnamen in einer von zwei Formen:

  • Das erste SCHANNEL-Prinzipalnamensformular ist das formular msstd . Namen in msstd-Form folgen in der Regel dem Muster msstd:servername@serverdomain.com. Dies wird als E-Mail-Name-Eigenschaft bezeichnet. Wenn das Zertifikat eine E-Mail-Name-Eigenschaft und das At-Zeichen (@) enthält, lautet der Prinzipalname msstd:email name. Andernfalls muss sie die eigenschaft common name enthalten. Interne umgekehrte Schrägstriche werden genauso wie bei Zeichenfolgenbindungen verdoppelt.
  • Das zweite SCHANNEL-Prinzipalnamensformular ist das vollständige Formular. Hierbei handelt es sich um eine Reihe von RFC1779-kompatiblen Namen, die durch schräge Klammern begrenzt und durch umgekehrte Schrägstriche getrennt sind. Sie 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 RpcMgmtInqServerPrincName aufrufen. Dadurch wird eine NULL-Zeichenfolge zugeordnet, die den Prinzipalnamen enthält. Bevor sie beendet wird, muss Ihre Anwendung RpcStringFree aufrufen, um den Speicher freizugeben, den diese Zeichenfolge belegt.

Die Abfrage des Servernamens auf diese Weise ist nicht sicher und sollte vermieden werden. Bei der Serverauthentifizierung sollte das Clientprogramm wissen, mit welchem Server es eine Verbindung herstellt, und den Serverprinzipalnamen von Grund auf neu erstellen.