Freigeben über


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. Dazu gehören sowohl menschliche Benutzer als auch Systemdienste. Alle Prinzipalnamen verwenden ein ähnliches Format für einen bestimmten SSP (Security Support Provider). Ein SSP ist ein Softwaremodul, das eine Sicherheitsüberprüfung durchführt. Weitere Informationen finden Sie unter SSPI Architectural Overview. Um die Einheitlichkeit aufrechtzuerhalten, gibt ein Sicherheitsanbieter Systemdiensten in der Regel ähnliche Namen wie Benutzer. Unter 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 mehr als ein Name registriert ist, wird ein Name zufällig 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: 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 zusammenzukreisen. 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 zwei Formen:

  • Das erste SchANNEL-Prinzipalnamenformular ist das msstd Formular. Namen in msstd-Formular folgen in der Regel dem Muster msstd:servername@serverdomain.com. Dies wird als E-Mail-Namenseigenschaft bezeichnet. Wenn das Zertifikat eine E-Mail-Namenseigenschaft enthält und das At-Zeichen (@) enthält, lautet der Prinzipalname "msstd:email name". Andernfalls muss sie die gemeinsame Namenseigenschaft enthalten. Interne Umgekehrte Schrägstriche werden wie bei Zeichenfolgenbindungen verdoppelt.
  • Das zweite SCHANNEL-Prinzipalnamenformular ist das vollständigen Formulars. Dies ist eine Reihe von RFC1779 kompatiblen Namen, die durch winkelbasierte Klammern und durch umgekehrte Schrägstriche getrennt sind. Es folgt normalerweise 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 mit Null beendete Zeichenfolge zugewiesen, um den Prinzipalnamen zu enthalten. 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. Für die Serverauthentifizierung sollte das Clientprogramm wissen, mit welchem Server es eine Verbindung herstellt und den Serverprinzipalnamen von Grund auf neu erstellen sollte.