[WIN] ServerXMLHTTP optioneel certificaat laten negeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • joppybt
  • Registratie: December 2002
  • Laatst online: 18:53
Vanuit VB (of JavaScript) probeer ik een SOAP-service te benaderen met behulp van ServerXMLHTTP.
Die SOAP-webserver is zo ingericht dat authenticatie mogelijk is met een client-certificaat of gewoon via basic authentication (naam/wachtwoord).

Als ik de URL benader met Internet Explorer krijg ik een popupje met de vraag om een client-certificaat te kiezen. Die heb ik niet dus druk ik op escape en komt er een nieuw popupje voor naam/wachtwoord. Die werkt vervolgens prima.
Het clientcertificaat is dus duidelijk optioneel.

Vervolgens probeer ik hetzelfde te doen vanuit mijn code (JavaScript hier maar in VB faalt het op dezelfde manier):
code:
1
2
3
4
5
6
7
8
9
var objXMLHTTP = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0") // of 4.0
objXMLHTTP.open("POST",
                "https://www.example.com",
                false,
                "username",
                "password");
objXMLHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
//   objXMLHTTP.setOption(2) = 13056; // Dit helpt niet
objXMLHTTP.send(XMLReq); // Dit faalt

Nu krijgt ik een foutmelding: 'msxml6.dll: An unknown error occurred while processing the certificate.' of 'msxml6.dll: A connection with the server could not be established'.

ServerXMLHTTP krijgt blijkbaar van de SOAP-server de vraag om het certificaat en geeft een foutmelding omdat hij die niet heeft terwijl hij gewoon vervolgens naam/wachtwoord moet gaan proberen.

Noot:
- Ik heb geen toegang tot de instellingen van de webservice.
- WinHTTP.WINHTTPRequest.5.1 maakt geen verschil.
- Let op: deze vraag is over **client** certificaten. `objXMLHTTP.setOption(2) = 13056` helpt alleen om fouten in **server** certificaten te negeren. Dat heb ik hier geprobeerd maar maakt geen verschil.

Acties:
  • 0 Henk 'm!

  • keesdewit
  • Registratie: December 2003
  • Laatst online: 09-05 12:25
Je kunt een "Authorization" header meesturen:

C#:
1
2
byte[] authBytes = Encoding.UTF8.GetBytes("user:password".ToCharArray()); 
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes);


Dit is wel C# code, maar het geeft je een idee van hoe het werkt.