Til implementering af sikkerhed mellem servicehost og klient, kan man benytte sig af X.509 certifikater. Der findes to måder, hvorpå denne sikkerhed kan opnås. Der kan enten benyttes af:

  1. Et dedikeret server certifikat og et klient certifikat til autentificering.
  2. Et enkelt certifikat til autentificering af både servicehost og klient.


Dette indlæg kommer til at handle om server og klient -certifikat autentificering.

Det er forudsat, man allerede har en WCF service kørende, der udstiller forskellige services til en serviceklient. I dette eksempel benyttes to seperate maskiner, der er medlem af samme domæne, dog er dette ikke noget krav. På den ene maskine (service host) udstiller en WCF service, og den anden maskine (service klient) konsumerer denne service. Har man allerede denne konstellation, er resten lidt konfiguration og lidt certifikat gymnastik.

Lad os starte med at danne certifikaterne, og her starter vi med at danne et WCF Server certifikat.
Vi benytter os af 'makecert.exe' command-line utility på den maskine, hvor vi har en WCF service kørende. Start en cmd prompt op og kør følgende kommando:

makecert -pe -ss My -sr LocalMachine -a sha1 -sky exchange -n CN=MyServer

Dette vil danne et certifkat og registrere det på den lokale maskine under 'Personal'. Udover dette er det mest væsentlige -pe, der sørger for, man kan eksportere certifikatet, hvilket skal gøres i forbindelse med klient autentificeringen. For at se om certifikatet er korrekt installeret på maskinen, kan mmc startes på følgende måde:

Tryk 'Start' -> Kør 'mmc'

Dette vil starte et konsol vindue, og for at se certifikatet skal man gøre følgende:

Tryk på 'File' -> 'Add/Remove Snap-in...' vælge 'Certificates' under 'Available snap-ins' og trykke på 'Add' -> 'Computer account' -> Next -> Finnish

Under 'Personal/Certificates' vil man finde certifikatet. Herefter skal "NETWORK SERVICE" tildeles læse rettigheder for at læse den private nøgle på certifikatet. 

Højreklik på 'MyServer' -> All Tasks -> 'Manage Private Keys...'.
Herefter gives "NETWORK SERVICE" Full control.

Certifikatet skal herefter eksporteres. Dette gøres på følgende måde:

Højreklik på 'MyServer' certifikatet -> All Tasks -> Export -> Next -> Vælg 'No, do not export the private key' -> Base-64 encoded X.509(.CER) -> 'MyServer' og gem certifikatet.

Kopier herefter certifikatet over på klient maskinen, så den er klar til senere brug.

Nu skal den maskine, der udstiller WCF service konfigureres.
I web.config filen skal følgende konfiguration sættes op:

serverconfig

Det der er værd at bemærke, er den del af konfigurationen, der beskriver serviceCredentials forbereder den kaldende part til at autentificere sig mod WCF serveren. Da disse certifikater ikke er udstedt af en betroet autoritet som fx. VeriSign, men er derimod selvskabte certifikater, sættes CertificationValidationMode til 'PeerTrust'. På denne måde angives, at certifikatet er 'self-issued' og kan bruges pålideligt imellem parterne.

Efterfølgende sættes klient maskinen op. Først skal 'MyServer' certifikatet fra tidligere importeres. Dette gøres ved at starte MMC på samme måde som før og tilføje certificates snap-in, 'Computer Account' og herefter højreklikke på 'Personal' -> All Task og vælge import. Højreklik herefter på 'MyServer' certifikatet og vælg 'Copy'. Find 'Trusted people\Certificates' og kopier certifikatet herunder.
Nu skal vi lave et klient certifikat, som skal bruges på serveren til at identificere klienten. Start en cmd prompt og kør følgende kommando:

makecert -pe -ss My -sr LocalMachine -a sha1 -sky exchange -n CN=MyClient

Tjek efter om certifikatet er kommet rigtigt ind under '
Personal\Certificates'.

Tildel "NETWORK SERVICE" læse rettigheder på samme måde som før. Eksportér herefter certifikatet efter samme fremgangsmåde som tidligere, og gem det på WCF serveren, så certifikatet er klar til senere import.

Nu sættes klientens web.config op.

clientconfig

Gå tilbage til WCF maskinen og importer 'MyClient' certifikatet, og kopier herefter certifikatet under 'Trusted People\Certicates'.

Test applikationen...og det hele burde spille fint uden problemer.

WCF sikkerheds autentificering af klient og server vha. X.509 certifikater.