Después de haber importado un certificado digital en el Facturador SUNAT v1.5 y al intentar generar un comprobante se podría obtener un error como el siguiente:
content[0] is not a valid X509Data type
En cuyo caso es posible que se deba a que la entrada de la clave en el PFX importado tiene un nombre que incluye espacios, como se muestra en el ejemplo a continuación, donde la entrada de clave posee el nombre “juan carlos perez diaz”:
>keytool -list -keystore certificado.pfx ... juan carlos perez diaz, Jul 22, 2017, PrivateKeyEntry, Certificate fingerprint (SHA1): D7:5C:99:FC:CE:00:90:D8:02:21:56:40:D5:A5:8E:7C:D7:55:1D:BC
Y esta condición explota un “bug” en el Facturador SUNAT v1.5, que no está soportando apropiadamente las entradas con espacios en su nombre.
De cualquier manera, un sencillo “workaround” consiste en reemplazar aquel nombre por uno que no contenga espacios, para nuestro ejemplo esto se obtendría con el siguiente comando:
>keytool -changealias -keystore certificado.pfx -alias "juan carlos perez diaz" -destalias "juancarlosperezdiaz"
Después de lo cual se debería importar el certificado nuevamente al Facturador SUNAT y volver a generar el comprobante.
Como mencioné anteriormente, esto se debe a un “bug” en la aplicación Facturador SUNAT y si resulta de interés para alguno, el problema se encuentra en el siguiente método, pe.gob.sunat.servicio2.registro.service.BandejaDocumentosServiceImpl#importarCertificado
, específicamente donde se resalta a continuación:
salida = FacturadorUtil.executeCommand("keytool -importkeystore -srcalias " + aliasPfx + " -srckeystore " + rutaCertificado + " -srcstoretype pkcs12 -srcstorepass " + passPrivateKey + " -destkeystore " + this.comunesService.obtenerRutaTrabajo("ALMC") + "FacturadorKey.jks -deststoretype JKS -destalias certContribuyente -deststorepass **********");
Cuya solución (rápida pero lejos de lo ideal) podría ser envolver el valor de la variable aliasPfx
en comillas dobles como se muestra a continuación:
salida = FacturadorUtil.executeCommand("keytool -importkeystore -srcalias \"" + aliasPfx + "\" -srckeystore " + rutaCertificado + " -srcstoretype pkcs12 -srcstorepass " + passPrivateKey + " -destkeystore " + this.comunesService.obtenerRutaTrabajo("ALMC") + "FacturadorKey.jks -deststoretype JKS -destalias certContribuyente -deststorepass **********");
Por último, me gustaría comunicar esta incidencia a SUNAT para que lo solucionen de su lado, pero no conozco el canal correcto de reporte de incidencias a SUNAT, por lo que agradecería aquella información.
Excelente aporte! mencionar que hasta la fecha; enero del 2018, el problema aún persiste.
Estoy intentando importar el certificado digital en el facturar sunat pero cuando le doy en importar de queda congelado, no importa a que se debe eso???
No se cual es la causa, pero cambiando el explorer funcionó
Tambien me ocurre que cargando el certificado se queda congelada la pagina de carga, y no lo llega a cargar. El SFS lo tengo instalado en un Linux, y ya intente con varios browser: chrome, firefox sin éxito. Alguna idea ?
Te sugiero que pruebes en Windows, pues cuando le di una mirada al código fuente me pareció que su operación estaba amarrada al estilo de rutas de este SO.
Estimado, consulta, lograste ejecutar el SFS en tu linux???
No lo he intentado pero si lo vas a hacer te sugiero que lo hagas con depurador a la mano, ej. IntelliJ IDEA.
Algo a tomar en cuenta, es que el *Alias* tampoco puede tener caracteres númericos porque sino tampoco funciona.
me aparece este problema
Cannot run program “keytool”: CreateProcess error=2, El sistema no puede encontrar el archivo especificado
por favor ayuda
Instala un JDK reciente y encontraras ese programa entre los binarios en la carpeta /bin dentro de archivos de programa.
A mi tambien me sale este error pudiste resolverlo
Luis, como solucionaste el error puedes ayudarnos
Alguien encontró la soucion a este erro
Cannot run program “keytool”: CreateProcess error=2, El sistema no puede encontrar el archivo especificado
Estas usando Windows 10? Intenta con Windows 7, 8
Instala un JDK reciente y encontraras ese programa entre los binarios en la carpeta /bin dentro de archivos de programa. es la solución de hablutzel1. me funciono bien. cambie la ruta del PATH por la nueva que instale y luego reiniciar para que los valores del sistema sean tomados y funciono perfectamente.