Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[.NET/WCF] Aangepaste validatie certificaten van client

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het idee dat ik tegen een grens ben opgelopen van de out-of-the-box mogelijkheden van Windows Communication Foundation. Ik wil namelijk aan de serverkant speciale validatie handelingen verrichten voor het certificaat waar de client mee komt.

Nu bestaat hier gewoon de X509CertificateValidationMode.Custom voor, en ik kan dan prima een class maken die afleidt van X509CertificateValidator om mijn eigen validatie implementatie te schrijven.

Echter, het lijkt niet mogelijk te zijn om enige informatie van de context te krijgen. Ik wil namelijk aan de hand van de DNS name van de client bepalen of het certificaat voor deze client bestemd is. Net als dat een client het subject van het server certificaat vergelijkt met de hostnaam waar hij verbinding mee maakt, wil ik dat de server controleert of het gebruikte certificaat bestemd is voor de client.

Waarom? Mijn klanten kunnen alleen mijn server aanspreken via certificaten, en alleen klanten kunnen dat. Ik wil met andere woorden voorkomen dat men die certificaten gaat verspreiden om verbinding met mijn server te kunnen maken. Wellicht is hier een héél andere methode voor, en ik zit compleet verkeerd, maar dat hoor ik dan graag.

Iemand enig idee? Alvast bedankt voor enige suggesties.

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Heb je uberhaupt wel de MSDN gelezen? Extending WFC --> Custom Credentials --> How to create a service employing a custom certificate. Hier de link naar de online versie: http://msdn2.microsoft.com/en-us/library/ms733806.aspx

Als je als subject user @ bedrijf gebruikt kun in de Validate override controleren of de username in het subject overeenkomt met het bedrijf. Je kunt echter niet voorkomen dat mensen hun certificaten doorgeven aan anderen. Als je zelf een goed serienummer beleid uitvoert, worden er dus geen dubbele serienummers uitgegeven. Je kunt dan de aanname doen dat een certificaat niet tweemaal kan worden gebruikt en indien een authenticatie plaats vind terwijl het serienummer al een sessie heeft, dan kun je het certificaat revoken en de bestaande sessie afbreken.

Eenzelfde techniek gebruik ik al langere tijd bij mijn eigen SSL socket services.

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
Bedankt voor de reactie. Ja, ik had dat artikel gezien. Ik weet dat er mensen zijn die niets opzoeken en altijd eerst hier posten maar daar ben ik er geen van. Ik heb mijn validator class al en deze werkt prima, alleen je hebt op dat moment geen context. Je weet niets over de verbinding aangezien OperationContext uiteraard niet beschikbaar is. Je hebt dus niets aan zo'n custom validator in dit geval.

Ik heb uit pure wanhoop Microsoft's WCF guru Nicholas Allen aangeschreven, en kreeg als reactie:
Hi Johan,

I think that a certificate validator is the wrong place to implement this behavior. In your case, the certificate is valid according to its definition but you want to refuse to authorize the user unless the certificate is sent from a specific machine. I would put that access check in a later processing stage to validate the certificate against the client address. If you have specific authorization code elsewhere already, that may be a good place to centralize the validation rules.

- Nicholas
Die "later processing stage" is wat vaag. Wat is daar een voorbeeld van, als je kijkt tussen de validatie van het certificaat en het uitvoeren van een operation? Ik denk dat authorization code per operation verschillend kan zijn, terwijl ik alleen klanten toesta om uberhaupt mijn service te gebruiken, los van wat ze mogen. Ik wil ze dus bij authentication weigeren, niet met authorization. Maargoed, dat wil niet zeggen dat authorization niet effectief is. Ik ga daar eens naar kijken.

Wat je zegt over het serienummer van een certificaat is niet erg gebruikersvriendelijk lijkt me. Een klant mag het certificaat dan maar één keer installeren en wanneer je klant dit een tweede keer doet bij een herinstallatie of iets dergelijks dan moet hij wachten op een actie van jou om even het bijbehorende serienummer te resetten. Neemt niet weg dat het effectief is en zal het daarom als een mogelijkheid erbij houden. De DNS naam van de klant is ook niet constant, maar wel constanter dan een installatie.

[ Voor 7% gewijzigd door Verwijderd op 30-10-2007 19:47 ]