Problema con el certificado digital en Facturador SUNAT v1.5

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.

Grid card for two-factor authentication

I’ve been asked to develop a demonstration of two-factor authentication using a grid card (aka. bingo card) so I started researching a little bit on this and the only thing I could find is the following fork for the phpSec project, https://github.com/multiwebinc/phpSec, which implements it.

So I downloaded the source code and assembled a very simple demonstration page hosted at http://gridcard.demo.blobfish.pe.

Some screenshots follows:

Source code at https://github.com/hablutzel1/phpsec_gridcard_demo.

 

 

JBoss AS 7.1.1 as a service in Windows

First, download http://downloads.jboss.org/jbossnative/2.0.10.GA/jboss-native-2.0.10-windows-x86-ssl.zip and uncompress its contents over the JBoss  AS 7.1.1 directory and you should now have service.bat in bin/ directory.

Now you should modify service.bat as follows:

Replace all occurrences of run.bat with standalone.bat.

Replace all occurences of run.log with standalone.log.

Then, replace all occurrences of:

call shutdown -S < .s.lock >> shutdown.log 2>&1

With the following:

call jboss-cli.bat --connect --command=:shutdown >> shutdown.log 2>&1

Now, optionally, you can modify the following lines as follows:

...
set SVCNAME=JBAS711SVC
set SVCDISP=JBoss Application Server 7.1.1
set SVCDESC=JBoss Application Server 7.1.1
...

Now you have to comment out the following line by prepending REM to it.

...
REM Suppress killing service on logoff event
REM set JAVA_OPTS=-Xrs
...

And you need to create the following highlighted line in standalone.conf.bat, almost at the end, just before :JAVA_OPTS_SET:

...
set "JAVA_OPTS=%JAVA_OPTS% -Xrs"
:JAVA_OPTS_SET

It is very important to perform the previous step, otherwise, you could start experiencing issues when Windows users log off or during server shutdown/restart.

Finally, you just need to install the service as follows from an administrator Command Prompt:

And now you can set the service to Automatic start if you want, in which case, JBoss will start automatically upon Windows start.

References: