miércoles, 20 de junio de 2012

WebServices y certificados vencidos

Perdí varias horas de pruebas y repruebas por un problema que ya había tenido pero que tarde días en recordar. Según algunos informes, internet paso a ser una extensión de nuestra memoria y en general muchas situaciones se olvidan rápidamente para dejar lugar a cuestiones mas inmediatas.
El problema era la imposibilidad de consumir un servicio https y que tenia un certificado vencido. Tarde mucho tiempo en recordad la solución como para dejarla pasar y no registrarla en el blog.
La cuestion se resuelve seteando una simple opcion que no esta tan visible ni es tan accesible asi que aqui el codigo con la explicacion.

var
  r:Integer;
  msg:string;
  ss:ServiceSoap;
  RIO : THTTPRIO;
begin
  { Place thread code here }
  //Creo un componentes http RIO
  RIO := THTTPRIO.Create(nil);
//Aca lo importante, colocar la opcion soIgnoreInvalidCerts para que haga caso omiso de certificados  //vencidos y que siga trabajando
RIO.HTTPWebNode.InvokeOptions :=
            [soPickFirstClientCertificate ,soIgnoreInvalidCerts, soAutoCheckAccessPointViaUDDI];

  //Pasar el componentes THTTPRIO como parametro, y listo funciona!!
  ss :=GetServiceSoap(false, defURL, RIO);

  try

    r := ss.MiMetodo('Hola mundo')

...................
...................