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

[C# | ASP.NET] Client Certificaat probleem bij webservice

Pagina: 1
Acties:
  • 244 views sinds 30-01-2008
  • Reageer

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 10:10
Hoi Allen,

Ik zit hier nu enkele dagen met een probleem waarmee ik totaal niet verder kom. Ik doe dit alles op 1 Windows XP machine.

Ik probeer vanuit een ASP.NET applicatie een webservice aan te roepen die een client-certificaat
in het SOAP bericht verwacht. Dit ging in eerste instantie allemaal goed tijdens het ontwikkelen.
Ik maakte daarbij gebruik van de ingebouwde ASP.NET Development Server.

Nu wilde ik aan mijn interne collega's een kleine demo geven, dus ik publish ,mijn project op een interne
(IIS)webserver. Als ik daarop de webservice aanspreek krijg ik telkens de melding HTTP 403 FORBIDDEN.

Ik ben gaan zoeken en zoeken en overal kwam ik antwoorden tegen dat het certificaat niet gelezen kon worden
door een rechten probleem (ASPNET user zou geen rechten hebben op de certificaten store). Nadat ik de oplossing van vele
gebruikt heb om de rechten te corrigeren werkt het helaas nog niet.

Het test certificaat dat ik van de eigenaar van de webservice heb gehad was een PKI certificaat in de vorm van een p12 bestand met bijhorend wachtwoord.
In het SOAP bericht moet ik een X509 certificaat stoppen. Ik heb ondertussen drie manier gevonden om te zorgen dat het certificaat in het bericht gestopt
word. Het is trouwens de bedoeling dat alle client certificaten op de webserver blijven liggen, en op basis van gegevens van de ingelogde gegeven dat
het juiste certificaat geladen gaat worden.

Manier1:
Met de hand het PKI bestand importeren en vervolgens exporteren naar een X509 .cert file op de hardeschijf (dus niet in een user of machine store).
Bij het aanroepen van de webservice gebruik ik dan de volgende code:
code:
1
objORB.ClientCertificates.Add(X509Certificate.CreateFromCertFile(certificatePath + departmentWebservices.Xmlmode_rdw_certificaat))


Manier2:
Het PKI bestand importeren in de LocalMachine\My Store. Vervolgens rechten uitdelen voor het ASP.NET account met het 'winhttpcertcfg' tool.

Importeren:
winhttpcertcfg -i "c:\2\Certificates\3-7-2006_04500008.P12" -c LOCAL_MACHINE\My -p "******"

Rechten
winhttpcertcfg -g -c LOCAL_MACHINE\My -s "RDW Acceptatietest" -a "ASPNET"

code:
1
2
3
4
5
6
7
8
X509Store storeMachine = new X509Store(StoreLocation.LocalMachine);
storeMachine.Open(OpenFlags.MaxAllowed);                    
X509CertificateCollection x509CertCollectMachine = storeMachine.Certificates.Find(X509FindType.FindBySerialNumber, @"00 d5 ec 88 14 65 9d 3b bf b2 9d b3 ff 23 d1 6c f7", false);

for (int i = 0; i < x509CertCollectMachine.Count; i++)
    objORB.ClientCertificates.Add(x509CertCollectMachine[i]);

storeMachine.Close();


Manier3:
Niet eerst importen of exporten in de store of naar een .cert bestand, maar direct het PKI certificaat laden en deze vanuit code te exporteren.
code:
1
2
3
X509Certificate clientCertificate = new X509Certificate();
clientCertificate.Import(@"c:\2\Certificates\3-7-2006_04500008.P12", "******", X509KeyStorageFlags.DefaultKeySet);
objORB.ClientCertificates.Add(clientCertificate);


Verder vond ik ook nog wat tips dat mensen zeiden dat het met de credentials of proxy te maken had. Daarom heb ik de volgende regels ook maar opgenomen, helaas ook zonder resultaat.
code:
1
2
3
objORB.Proxy = System.Net.WebRequest.DefaultWebProxy;
objORB.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
objORB.Credentials = System.Net.CredentialCache.DefaultCredentials;


Weet misschien iemand hier wat ik nu fout doe of vergeet waardoor mijn code wel werkt vanuit de ASP.NET Development Server en niet vanuit IIS.

Lekker duurzaam. Skoda Enyaq EV - First edtion, Alpha Innotec Brine warmtepomp (MSW2-6S), Totaal 12135 Wp aan Zonnepanelen geïnstalleerd.


Verwijderd

ehm,. is het niet zo dat voor PKI certifikaten SSL aan MOET staan? Misschien dat development omgeving doet alsof ssl aanstaat maar dat de server geen ssl aan heeft staan.

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 10:10
Verwijderd schreef op donderdag 26 juli 2007 @ 12:39:
ehm,. is het niet zo dat voor PKI certifikaten SSL aan MOET staan? Misschien dat development omgeving doet alsof ssl aanstaat maar dat de server geen ssl aan heeft staan.
Nope, dat heb ik geprobeerd. Ook dan krijg ik nog steeds 403 FORBIDDEN.

Wel ben ik ondertussen weer iets wijzer geworden. Het werkt op de ASP.NET Development Server ook niet meer als ik het certificaat uit de store LOCAL_MACHINE\My haal.

Ik moet dus:
1)Het certificaat onder LOCAL_MACHINE\My geinstalleerd hebben staan
2)Vanuit code het certificaat in het SOAP bericht stoppen.

Ten eerste ben ben ik daar nou niet echt blij mee want ik wil niet straks voor al mijn klanten een geinstalleerd certificaat hebben. Tevens werkt het nog steeds niet vanuit IE, ook niet als ik de ASPNET user rechten geef op dat certificaat.

Lekker duurzaam. Skoda Enyaq EV - First edtion, Alpha Innotec Brine warmtepomp (MSW2-6S), Totaal 12135 Wp aan Zonnepanelen geïnstalleerd.


  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 10:10
Uiteindelijk heb ik het probleem gevonden.

Ik had een tweetal zaken niet goed.
1)Ik wist niet dat het certificaat op twee plekken nodig was. Eén keer om in het (SOAP)bericht te stoppen vanuit code en een keer wanneer de store geraadpleegd word ter verificatie.
2)Voor dat teruglezen moet het certificaat niet in Localmachine\My staan maar in de Localmachine\root.

Uiteindelijk heb ik het certificaat in beide stores gezet. Zodat ik de Localmachine\My store gebruik om het certificaat in het bericht te stoppen. Het certificaat in Localmachine\root word aanroepen door IIS.

Daarnaast moet de ASP.NET of Network Service account rechten hebben op het certificaat in beide stores.

Lekker duurzaam. Skoda Enyaq EV - First edtion, Alpha Innotec Brine warmtepomp (MSW2-6S), Totaal 12135 Wp aan Zonnepanelen geïnstalleerd.