Navigatie

Archief

Categorieën

Blogroll

Contact

Send mail to the author(s) E-mail

View Richard Soeteman's profile on LinkedIn

RSS 2.0 | Atom 1.0 | CDF

Disclaimer
De inhoud van deze weblog betreft uitsluitend mijn persoonlijke mening, niet die van mijn werkgever. Mijn werkgever is niet verantwoordelijk voor de inhoud en sluit hierbij iedere aansprakelijkheid uit.

Sign In

Zoeken

 Monday, July 09, 2007
Monday, July 09, 2007 7:07:05 AM (W. Europe Daylight Time, UTC+02:00) ( )

 Een aantal weken terug heb ik het al eens gehad over problemen met Certificaten. Deze problemen leken opgelost te zijn totdat ik de applicatie in acceptatie ging zetten en direct de foutmelding "The request failed with HTTP status 403: Forbidden. " te zien kreeg. Via google kreeg ik vele resultaten echter was er geen van toepassing op mijn situatie.  

Mijn ASP.NET pagina roept een externe Webservice aan welke via HTTPS gehost wordt.  Wanneer ik een certificaat mee wil sturen werkt dit correct in mijn development webserver echter gehost via IIS werkt dit in het geheel niet. Het gevolg is een van onderstaande foutmeldingen:

  • The request failed with HTTP status 403: Forbidden.
  • The request was aborted: Could not create SSL/TLS secure channel
  • The underlying connection was closed: An unexpected error occurred on a send.

Het eerste waar je aan denkt is rechten. Dit bleek in mijn geval ook deels de oorzaak te zijn.  Om de rechten op het certificaat te controleren heb je de tool WinHttpCertCfg nodig.   Middels deze tool kan je per certificate store (Local_Machine of Current_User ) bekijken hoe de rechten voor een bepaald certificaat zijn ingesteld.

Current_User: "C:\Program Files\Windows Resource Kits\Tools\"winhttpcertcfg -l -c "CURRENT_USER\Root" -s "[naam van het certificaat]"
De volgende accounts dienen hier rechten op te hebben:

  • Ingelogde gebruiker
  • NT Authority\System

Local_Machine : "C:\Program Files\Windows Resource Kits\Tools\"winhttpcertcfg -l -c "LOCAL_MACHINE\Root" -s "[naam van het certificaat]"
De volgende accounts dienen hier rechten op te hebben:

  • Ingelogde gebruiker
  • NT Authority\System
  • ASP.NET Account / network service account (Windows 2003)

In mijn geval had het ASP.NET account nog geen rechten. Het instellen van de rechten doe je ook met de WinhttpCertcfg tool. Gebruik  hiervoor onderstaande parameters:

"C:\Program Files\Windows Resource Kits\Tools"\winhttpcertcfg -g -c "LOCAL_MACHINE\ROOT" -S "[naam van het certificaat]" -A "ASP.NET"

Na het toevoegen van de rechten kreeg ik echter nog steeds dezelfde foutmelding. In mijn geval had de systeembeheerder het certificaat ook in de verkeerde certificaat repository geïnstalleerd. Met de winhttpcertcfg tool kom je hier niet achter. Deze kijkt namelijk niet naar de locatie waar het certificaat geïmporteerd is.  Middels certificaten.msc te vinden onder systeembeheer heb ik vervolgens het certificaat geïmporteerd in onderstaande nodes.

Tip: Er bestaat een mogelijkheid om deze certificaten te copy/pasten. Gebruik deze optie niet met certificaten waarin een private key is opgenomen, deze wordt namelijk niet mee gekopieerd en geeft dus weer andere problemen.

Vervolgens de rechten voor ASP.NET account weer ingesteld en toen werkte alles naar behoren. Uiteindelijk een simpele oplossing van een probleem dat me een goede dag gekost heeft. 

Resources:

Comments [5] | | # 
 Wednesday, July 04, 2007
Wednesday, July 04, 2007 7:09:55 AM (W. Europe Daylight Time, UTC+02:00) ( )

Gisteren liep ik tegen een bug aan in IE6 waarbij selectboxen door mijn kalender modal dialog heen schijnen. Dit is te verhelpen door de selectboxen te verbergen als de kalender getoond wordt. Uiteraard wil je dit alleen doen voor selectboxen die daadwerkelijk door de modal dialog heen gaan schijnen. Het bepalen van de absolute positie van de selectboxen en de modal dialog is dus benodigd.  Even googelen levert veel resultaat op. Dit zijn echter veelal creatieve oplossingen zoals deze, waarvan het veelal niet duidelijk is of ze andere browsers dan IE ondersteunen. Ik besloot ook even te kijken in de documentatie van de Microsoft AJAX Library  en was blij verast toen ik zag dat mijn gewenste functionaliteit is opgenomen in deze Library. Zelfs in twee vormen:

getLocation
getlocation bepaald de absolute positie van het DOMElement.

function determinePosition(){
      var domElement = $get('domelement');
      var position = Sys.UI.DomElement.getLocation(domElement)
      alert('X:' + position.x + ' Y:' + position.y );
}

getBounds
getBounds bepaald de absolute positie van het DOMElement en bepaald tevens de hoogte en breedte van het element. Bij het bepalen van de hoogte en breedte wordt tevens rekening gehouden met de border en padding van dit element.

function determinePosition(){
      var domElement = $get('domelement');
      var bounds = Sys.UI.DomElement.getBounds(domElement)
      alert('X:' + bounds.x + ' Y:' + bounds.y + ' Height:' + bounds.height + ' Width:' + bounds.width);
}
Comments [0] | | # 
 Monday, July 02, 2007
Monday, July 02, 2007 7:23:29 AM (W. Europe Daylight Time, UTC+02:00) ( )

Cheat sheets zijn echt handige hulpmiddelen om snel je informatie te vinden. Voor de ASP.Net AJAX Library zijn o.a. de volgende cheat sheets beschikbaar:

 

Comments [0] | | # 
 Monday, May 21, 2007
Monday, May 21, 2007 1:51:57 PM (W. Europe Daylight Time, UTC+02:00) ( )

Okay het is maandag, nooit mijn beste dag dus een vage foutmelding komt meestal op dit soort dagen voor. Zo ook vandaag. Ik heb een webservice draaien, hiervoor heb ik een proxy klasse gemaakt zodat ik hem vanuit code kan gebruiken. Tamelijk standaard allemaal. Deze service heb ik getest op meerdere servers en draaien perfect. Vanochtend kreeg ik een bugmelding dat de webservice op 1 server een foutmelding gaf. De volgende foutmelding wordt getoond  "The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. "  

Eerst maar eens een SSL Site geconfigureerd in mijn lokale IIS, zodat ik dit probleem ook lokaal kan reproduceren en debuggen. Via deze link vind je de info hoe je dit snel kan doen. Toen ik mijn lokale site startte viel me direct op dat ik het beveiligingswaarschuwing dialoogscherm te zien kreeg.

Deze waarschuwing wordt uiteraard ook getoond als je de webservice opvraagt, hier moest het probleem wel ergens liggen. Eigenlijk wil kunnen opgeven dat ik standaard door wil gaan. M.a.w. ik vertrouw het certificaat van de website altijd. De allereerste post die ik over dit onderwerp tegenkwam was een blogpost van Jan Tielens.  De methode die hij beschrijft is obsolete in .NET 2.0. In .NET 2.0 moet je gebruik maken van de ServicePointManager.ServerCertificateValidationCallback Property. Feitelijk maak je een CallBack functie die wordt aangeroepen door de ServicePointManager wanneer een request via HTTPS wordt gedaan.

Onderstaand de callback in VB.Net. Deze retourneert altijd true. M.a.w. ik vertrouw het certificaat.

Private Function ValidateCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
        Return True
End Function

Onderstaande regel registreert de callback op ServicePointManager.

ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateCertificate)

Wanneer verificatie van het certificaat vereist is wordt nu ValidateCertificate aangeroepen wat altijd true terug geeft en werkt de webservice nu op alle servers. Uiteindelijk toch nog een goede maandag

Comments [0] | | # 
 Friday, May 18, 2007
Friday, May 18, 2007 7:36:16 AM (W. Europe Daylight Time, UTC+02:00) ( )

Tijdens mijn presentatie op Code-Camp werd door Peter Schipper de vraag gesteld hoe je ervoor kon zorgen dat Update Panels tijdens het laden van het eerste request voor een pagina direct afgaan. Dit zodat de gebruiker ook tijdens het eerste request niet lang hoeft te wachten voordat de pagina geladen is. Het antwoord op deze vraag had ik niet direct paraat en met het antwoord "hier kom ik nog op terug" sloot ik mijn sessie af. Peter is hier echter verder mee gegaan en heeft hier een uitgebreide blogpost over geschreven die ik jullie niet wil onthouden. 

Naar blogpost "Preloading ASP.Net AJAX UpdatePanel"

Comments [0] | | # 
 Sunday, May 13, 2007
Sunday, May 13, 2007 5:18:39 PM (W. Europe Daylight Time, UTC+02:00) ( )

Code-camp is afgelopen. Ik vond het een zeer geslaagd evenement. Er waren zeer veel interessante sessies en ook de sfeer was perfect. Ik hoop dat de organisatie daar ook zo over denkt en volgend jaar weer een code-camp gaat organiseren.

Mijn sessie ging over ASP.Net AJAX Extensions. Hierbij nog even een paar belangrijke punten waar je rekening mee moet houden:

  • Er zijn twee manieren om delen van je pagina te updaten:
    1. Via een updatepanel
    2. Via webservices en Client Script(Javascript)
  • Updates via een updatepanel doorlopen wel de volledige Page Life Cycle.
  • In een Updateprogresscontrol kan je code plaatsen dat de postback annuleert. Dit stopt echter alleen het proces aan de client kant en houdt feitelijk alleen in dat de pagina update niet wordt uitgevoerd. De server-side verwerking wordt volledig uitgevoerd.

Downloads:

Comments [0] | | # 
 Friday, April 20, 2007
Friday, April 20, 2007 6:34:56 AM (W. Europe Daylight Time, UTC+02:00) ( )
Enkele weken geleden heb ik al eens geschreven over Code Camp. Inmiddels is de lijst met sessies bekend. Ook is inschrijven al niet meer mogelijk, het zit compleet vol.  Het beloofd dus een spectaculaire dag te gaan worden. Zelf zal ik een sessie gaan houden over ASP.NET AJAX. Verder zullen twee van mijn Detrio Collega's ook spreken op dit evenement, te weten:

Tot 12 Mei!!
Comments [0] | | # 
 Friday, April 13, 2007
Friday, April 13, 2007 1:19:56 PM (W. Europe Daylight Time, UTC+02:00) ( )


Google is voor mij de beste zoekmachine die bestaat, echter vind hij vaak niet relevante zoekresultaten of zijn het er te veel. Dit kan aan mijn manier van zoeken liggen, maar het kost me dus een hoop tijd om uit dit resultaat het meest relevante artikel te vinden. Ik gebruik Google 99% van de tijd beroepsmatig. Dit houdt in dat ik in die gevallen alleen geïnteresseerd ben in .NET gerelateerde onderwerpen.

Ik was dan ook zeer verrast toen ik vorige week naar .Net Rocks aan het luisteren was en kon horen dat Dan Appelman een .Net zoekmachine op basis van Google Custom Search had ontwikkeld.  De zoekmachine doorzoekt niet alle sites waar het woord .Net in voorkomt, maar alleen degene die zijn opgenomen in de lijst van sites waarvan bekend is dat de content goed is.  Met deze zoekmachine hebben we dus de kracht van Google zonder de overbodige zoekresultaten. Inmiddels gebruik ik Search.Net een goede week en ik ben er zeer tevreden over. Het scheelt me enorm veel tijd doordat ik alleen maar relevante en vooral correcte zoekresultaten te zien krijg.

Naar Search.Net
Comments [1] | | #