Principal Names
Voor een client om een wederzijds geverifieerde sessie met een serverprogramma te maken, moet deze de verwachte principal-naam van de server opgeven. Voor sommige protocollen, zoals Kerberos, is een juiste serverprincipalnaam vereist voor elke geverifieerde sessie. Een principal is een entiteit die door het beveiligingssysteem wordt herkend. Dit omvat zowel menselijke gebruikers als systeemservices. Alle principal-namen hebben een vergelijkbare indeling voor een bepaalde SSP (Security Support Provider). Een SSP is een softwaremodule die beveiligingsvalidatie uitvoert. Zie SSPI Architectural Overviewvoor meer informatie. Om uniformiteit te behouden, geeft een beveiligingsprovider meestal systeemservices vergelijkbare namen als gebruikers. Onder sommige beveiligingsproviders hebben systeemservices mogelijk geen principal-naam.
De server registreert de principal-naam voor de beveiligingsprovider met behulp van de RpcServerRegisterAuthInfo functie. Er kan slechts één server-principalnaam worden gebruikt voor elke beveiligingsprovider. Als er meer dan één naam is geregistreerd, wordt er willekeurig één naam gekozen en gebruikt. De SSP bepaalt de indeling van de principal-naam. De Kerberos/Negotiate-SSP's voor een systeemservice zien er bijvoorbeeld ongeveer als volgt uit: machine_name$@childdomain.parentdomain1.parentdomain2.COM.
De aanbevolen procedure voor het genereren van principal-namen is om gedocumenteerde API's (zoals de DsMakeSpn--functie) te gebruiken in plaats van de principal-naam uit tekenreeksen samen te voegen. Het gebruik van gedocumenteerde API's verhoogt de draagbaarheid tussen verschillende implementatieomgevingen en elimineert de kans op fouten.
Het opgeven van een onjuiste principal-naam kan verhinderen dat de client en server een geverifieerde sessie tot stand brengen. De SCHANNEL-SSP neemt principal-namen in een van de volgende twee vormen:
- Het eerste SCHANNEL-principalnaamformulier is het formulier msstd. Namen in msstd-vorm volgen over het algemeen het patroon msstd:servername@serverdomain.com. Dit wordt een e-mailnaameigenschap genoemd. Als het certificaat een e-mailnaameigenschap bevat en het bijteken (@) bevat, is de principal-naam msstd:email name. Anders moet deze de algemene naameigenschap bevatten. Interne backslashes worden verdubbeld, net als in tekenreeksbindingen.
- Het tweede SCHANNEL-principalnaamformulier is het fullsic formulier. Dit is een reeks RFC1779-compatibele namen die zijn gebonden door punthaken en gescheiden door backslashes. Meestal volgt het patroon fullsic:\<\Authority\SubAuthority\.....\Person> or fullsic:\<\Authority\SubAuthority\.....\ServerProgram>.
Als de naam niet overeenkomt met het certificaat, wordt ERROR_ACCESS_DENIED geretourneerd. Als de naamindeling ongeldig is, retourneert SCHANNEL SSP de code ERROR_INVALID_PARAMETER.
Als u een query wilt uitvoeren op de principal-naam van de server, kunnen toepassingen RpcMgmtInqServerPrincNameaanroepen. Hiermee wordt een tekenreeks met null-beëindiging toegewezen voor het opslaan van de principal-naam. Voordat deze wordt beëindigd, moet uw toepassing RpcStringFree aanroepen om het geheugen vrij te geven dat deze tekenreeks in beslag neemt.
Query's uitvoeren op de servernaam op deze manier is niet veilig en moet worden vermeden. Voor serververificatie moet het clientprogramma weten met welke server deze verbinding maakt en moet de server-principalnaam helemaal opnieuw worden gemaakt.