FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
acceder a Webservice con certificado de cliente
Buenas a tod@s...
relacionado con el TicketBai, y para evitar errores, he visto que la AEAT tiene una servicio web de validación de NIF. https://www2.agenciatributaria.gob.e...ws/VNifV2.wsdl He importado el wsdl perfectamente y lo uso así:
Funciona sin problema (o casi), hasta que al hacer la llamada y esperar la respuesta del servicio : VNifV2Salida := nifValidatorWS.VNifV2(VNifV2Entrada); me pide el certificado de cliente para la autentificación (Vamos se abre el selector de certificados del explorador) Sé que puedo acceder poner un certificado de cliente con la propiedad ClientCertificate en el THTTPReqResp del HTTPRIO del servicio, pero el Tipo TClientCert solo tiene las propiedades certName y serialNumber... Además no quiero que se seleccione del almacén del S.O., ya que me obliga a instalarlo y yo quiero seleccionarlo de un fichero. ¿Alguien ha lidiado ya con esto? Gracias. |
#2
|
|||
|
|||
bueno.. después de media mañana buscando y releyendo....
he encontrado esto en el propio foro... http://www.clubdelphi.com/foros/show...postcount=1198 Ahí lo hace... pero usando capicom...no me gusta mucho, pero por ahora es lo que hay...ç Saludos.. |
#3
|
|||
|
|||
Como la respuesta era de 2017 y ha llovido un poquito desde entonces, CAPICOM debe haber cambiado de versión y hay cosas que no funcionan.......
Concretamente: - ya no existe el tipo PCCERT_CONTEXT, - la excepcion EOleSysError no existe - ni la función InternetSetOption( Última edición por iMia fecha: 26-08-2021 a las 17:07:26. |
#4
|
|||
|
|||
Yo lo he hecho con Delphi 2010 con llamadas a la biblioteca WinCrypt.
Cargas el archivo PFX con el certificado (o lo puedes tener almacenado en la base de datos o en un recurso) a un almacén de certificados temporal, extraes el certificado y lo añades al WebService.
Para las declaraciones de la biblioteca uso JwaWinCrypt y añado la declaración de PFXImportCertStore. En Delphi 2010 sólo parte de las declaraciones están en CertHelper por eso prefiero las del JEDI, puede que en versiones más modernas esté más completa.
|
#5
|
|||
|
|||
InernetSetOpcion está en WinInet
|
#6
|
|||
|
|||
Me faltaba el uses de System.Win.ComObj para el EOleSysError
y el uses del WinInet para el InternetSetOption como tu bien has apuntado! Gracias! Última edición por iMia fecha: 26-08-2021 a las 17:30:12. |
#7
|
|||
|
|||
Funcionando....
el último problema lo tenia en la estructura CERT_CONTEXT, pero solo la necesitaba para darle una dimensión máxima, por lo que la he fijado a 1024, más que de sobras para el certificado. Con eso el WS contesta perfectamente... gracias a tod@s... P.D.: Después de unos 4 o 5 años sin hacer nada de WS en Delphi (ni de delphi en 2 años...) me he tenido que poner al dia rapidito... |
#8
|
|||
|
|||
CERT_CONTEXT tiene un tamaño fijo, usa SizeOf(CERT_CONTEXT) me imagino que es para la llamada a InternetSetOption. Fíjate en los ejemplos.
Por cierto, el que dejé no usa Capicom sino WinCrypt y te ahorras estar instalandola. |
#9
|
|||
|
|||
Acceder al servicio web desde java 8
Buenas, estoy desarrollando una especie de API REST con Spring boot donde yo solo recibo el id del ticket, genero el XML y hago conexión con hacienda, Esto lo hago para no hacerlo dentro del mismo programa del tpv de la empresa, estoy usando java 8_191, he creado un restTemplate donde añado el fichero del certificado,
Código:
/** * */ package com.tbai.api.rest.controller; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import java.util.ArrayList; import java.util.List; import javax.net.ssl.SSLContext; import org.apache.http.Header; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLContexts; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import com.tbai.api.rest.service.IFacturaGeneradorXMLService; import com.tbai.api.rest.util.Constantes; /** * @author Christan * */ @RestController @RequestMapping("/api/tbai") public class RestControllerTbai { @Value("${trust.store}") private String trustStore; @Value("${trust.store.password}") private String trustStorePassword; // @Autowired private IFacturaGeneradorXMLService facturaService; // @Autowired // private RestTemplate restTemplate; private final static Logger log = LogManager.getLogger(); /** * Devuelve el xml en fotmaro String * * @param idLargoTicket * @return * @throws Exception */ @PostMapping("/generarXML/{idLargoTicket}") @ResponseBody public String getFacturaXML(@PathVariable String idLargoTicket) throws Exception { log.debug("Entra peticion para generar XML de ticket: " + idLargoTicket); String xmlFactura = facturaService.generarXMLFactura(idLargoTicket); RestTemplate restTemplate = restTemplate(); HttpEntity<String> httpEntity = new HttpEntity<>(xmlFactura); String response = restTemplate.postForObject(Constantes.URL_API_ENTORNO_PRUEBAS_ALAVA_ALTA_FACTURA, httpEntity, String.class); return response; } public RestTemplate restTemplate() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, CertificateException, MalformedURLException, IOException, UnrecoverableKeyException { InputStream cpStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(trustStore); // load the keystore KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); keystore.load(cpStream, trustStorePassword.toCharArray()); SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(keystore).build(); SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext); // Configure header List<Header> headers = new ArrayList<>(); Header header = new BasicHeader("Content-Type", "application/xml;charset=UTF-8"); headers.add(header); CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory) .setDefaultHeaders(headers).build(); ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); RestTemplate restTemplate = new RestTemplate(requestFactory); return restTemplate; } } Cita:
Si alguien ha tenido este error o ha hecho algo similar agradecería infinitamente cualquier ayuda al respecto, me interesa seguir haciendolo en Java ya que es la tecnología que más manejo además que la arquitectura que he planteado fue para que sea una especie de microservicio separado del programa principal. psdt: he cambiado el enlace del servicio porque no me dejaba `publicar la respuesta De antemano, muchas gracias |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Conectar Webservice con httpRio+Certificado | gasal | Internet | 2 | 20-07-2018 18:11:08 |
Problema: Delphi no encuentra ningún certificado electrónico para acceder a un WS | davidrgh | Varios | 4 | 18-05-2017 17:53:07 |
Acceder remotamente a webservice | giulichajari | Delphi para la web | 2 | 28-05-2014 01:32:32 |
SOAP POST - Webservice con Certificado y SSL | JXJ | Varios | 5 | 09-05-2011 21:11:08 |
|