** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - solicitud http con certificado cliente
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

solicitud http con certificado cliente

 Responder Responder
Autor
Mensaje
leizmendi Ver desplegable
Nuevo
Nuevo


Unido: 27/Diciembre/2011
Estado: Sin conexión
Puntos: 10
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita leizmendi Cita  ResponderRespuesta Enlace directo a este mensaje Tema: solicitud http con certificado cliente
    Enviado: 06/Febrero/2023 a las 20:33
Buenos días, después de rebuscar en Google y repreguntarle a ChatGPT acudo a este foro. Pensaba que no iba a ser tan difícil y ahora estoy dudando de si va a ser posible.

Se trata de realizar una petición POST en la que se debe enviar un certificado cliente.
Buscando la documentación y por experiencias previas que han funcionado (sin la necesidad del certificado cliente) lo he intentado con este código, extraído lo esencial:

    Dim HttpRequest As New WinHttpRequest
    HttpRequest.Open "POST", sUrl, False
    HttpRequest.setRequestHeader "Accept", "*/*"
    HttpRequest.setRequestHeader "Content-Type", "application/xml;charset=UTF-8"
    HttpRequest.SetClientCertificate "CURRENT_USER\MY\CN=certificatename"
    
    HttpRequest.Send sBody
    sResponse = HttpRequest.ResponseText


Pero la línea en rojo no funciona, en realidad no tengo muy claro cómo o qué debe pasarse en el parámetro  del método SetClientCertificate

ClientCertificate [in]

Specifies the location, certificate store, and subject of a client certificate.


Toda ayuda será bienvenida tanto si es siguiendo este ejemplo como si existe otra manera de enviar la solicitud http

Muchas gracias, un saludo

Arriba
santiago Ver desplegable
Nuevo
Nuevo


Unido: 03/Junio/2011
Estado: Sin conexión
Puntos: 2
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita santiago Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 07/Febrero/2023 a las 05:23
Buenos días leizmendi, te comento lo que a mi me sirvió, que sería cambiar la linea que tienes en rojo por:
HttpRequest.SetOption SXH_OPTION_SELECT_CLIENT_SSL_CERT, "los datos del certificado"

Donde indico los datos del certificado, debes ir a los certificados en tu navegador, entrar al certificado y poner los datos que aparecen literalmente en Emitido para.

Espero que te sirva, un saludo a este foro que tanto me a ayudado.

Arriba
leizmendi Ver desplegable
Nuevo
Nuevo


Unido: 27/Diciembre/2011
Estado: Sin conexión
Puntos: 10
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita leizmendi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 07/Febrero/2023 a las 21:15
Gracias Santiago por el apoyo. No ha servido la parte del SetOption, pues el objeto WinHttpRequest no dispone del método SetOption, sí que ha servido lo de "entrar desde el navegador al certificado y copiar literalmente el nombre del certificado"

Así que finalmente ha funcionado, es posible, con
HttpRequest.SetClientCertificate "CURRENT_USER\MY\literal_del_nombre_comun_del_certificado"

Muchas gracias, un saludo
Lorenzo
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 07/Febrero/2023 a las 21:57
La cuestión puede estar en las variables:

    Dim objHttp As Object, XMLDoc As MSXML2.DOMDocument60
    Dim NombreCertificado As String, MensajeEnvio As String

        Set objHttp = CreateObject("MSXML2.ServerXMLHTTP")
        Set XMLDoc = New MSXML2.DOMDocument60
        objHttp.Open "Post", sURL, False
        objHttp.setRequestHeader "Content-Type", "text/xml"
        objHttp.SetOption SXH_OPTION_SELECT_CLIENT_SSL_CERT, NombreCertificado
        objHttp.Send (MensajeEnvio)
        XMLDoc.async = False
        XMLDoc.Load (objHttp.responseXML)
        XMLDoc.Save (CurrentProject.Path & "\Respuesta.xml")

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
leizmendi Ver desplegable
Nuevo
Nuevo


Unido: 27/Diciembre/2011
Estado: Sin conexión
Puntos: 10
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita leizmendi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 08/Febrero/2023 a las 06:46
Gracias Mihura, tendré que probar tu propuesta, que hace uso de otro objeto, MSXML2.ServerXMLHTTP, en lugar de WinHttpRequest. No sé qué diferencias hay entre ellos.

Lo probaré

Gracias, saludos!
Lorenzo
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable