La era de la firma digital SignaToken
Registro de Solicitudes de Firma Digital
Solicitud de Firma Digital
3. Envío de datos CPT
4. Entrega de datos CPT
5. Consulta de estado solicitud
6. Envío de certificado firmado
7. Recojo de Certificado (TOKEN / SOFTWARE)
8. Entrega de enlace descarga Certificado (HSM / SOFTWARE)
Que es el CSR?
- El CSR o Certificate Signing Request (Solicitud de Firma de Certificado) es un bloque de texto cifrado que normalmente es
generado en el servidor donde el certificado SSL será utilizado, aunque también puede ser generado externamente.
- El formato de un CSR es el siguiente:
Generación y envío de CSR
Recepción y Verificación CPT
Entregado de certificado
Código fuente Generación CSR
public RespuestaSolicitudCertificadoADSIBDto generarCertificadoPersonaJuridica(SolicitudCertificadoADSIBDto pSolicitud) {
RespuestaSolicitudCertificadoADSIBDto respuesta = new RespuestaSolicitudCertificadoADSIBDto();
respuesta.setOk(false);
try {
Security.addProvider(new BouncyCastleProvider());
X500NameBuilder nameBuilder = new X500NameBuilder();
nameBuilder.addRDN(new ASN1ObjectIdentifier("2.5.4.3"), pSolicitud.getNombres()+" "+pSolicitud.getApPaterno()+" "+pSolicitud.getApMaterno());
nameBuilder.addRDN(new ASN1ObjectIdentifier("1.3.6.1.1.1.1.0"), pSolicitud.getNroDocumento());
nameBuilder.addRDN(new ASN1ObjectIdentifier("2.5.4.10"),pSolicitud.getNombreEntidad());
nameBuilder.addRDN(new ASN1ObjectIdentifier("2.5.4.6"), pSolicitud.getPais());
nameBuilder.addRDN(new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1"),
(pSolicitud.getComplementoDocumentoIdentidad()==null)?"":pSolicitud.getComplementoDocumentoIdentidad());
nameBuilder.addRDN(new ASN1ObjectIdentifier("1.2.840.113549.1.9.1"), pSolicitud.getCorreoElectronico());
nameBuilder.addRDN(new ASN1ObjectIdentifier("2.5.4.46"), pSolicitud.getTipoDocumento());
nameBuilder.addRDN(new ASN1ObjectIdentifier("2.5.4.5"), (pSolicitud.getNit()==null)?"":pSolicitud.getNit());
nameBuilder.addRDN(new ASN1ObjectIdentifier("2.5.4.11"), pSolicitud.getUnidadOrganizativa());
nameBuilder.addRDN(new ASN1ObjectIdentifier("2.5.4.12"), pSolicitud.getNombreCargo());
X500Name x500Name = nameBuilder.build();
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair pair = keyPairGenerator.genKeyPair();
PrivateKey privateKey = pair.getPrivate();
PKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder(x500Name, pair.getPublic());
JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder("SHA256withRSA");
ContentSigner signer = csBuilder.build(privateKey);
PKCS10CertificationRequest csr = p10Builder.build(signer);
String certificadoGenerado = certificatesToPEMString(csr);
respuesta.setCsr(certificadoGenerado);
String llavePrivada = keyPrivateToPEMString(privateKey);
respuesta.setPrivateKey(llavePrivada);
respuesta.setOk(true);
} catch (NoSuchAlgorithmException e) {
respuesta.setOk(false);
e.printStackTrace();
} catch (IOException e) {
respuesta.setOk(false);
e.printStackTrace();
} catch (OperatorCreationException e) {
respuesta.setOk(false);
e.printStackTrace();
}
return respuesta;}
Código fuente firmado JWS
public RespuestaFirmadoJWSDto firmadorJWS(SolicitudFirmadoJWSDto pSolicitud) {
RespuestaFirmadoJWSDto respuesta= new RespuestaFirmadoJWSDto();
try {
Security.addProvider(new BouncyCastleProvider());
KeyFactory factory = KeyFactory.getInstance("RSA", "BC");
PrivateKey privateKey = Utiles.generatePrivateKey(factory, pSolicitud.getLlavePrivada());
byte[] encoded = pSolicitud.getPayload().getBytes();
JWSHeader jwsHeader = new JWSHeader(JWSAlgorithm.RS256, null, null, null, null, null,
new URI(FirmaDigitalParametros.URI_FIRMADOR_JWS+pSolicitud.getSerialNumber()), null, null, null, null, null, null);
JWSObject jwsObject = new JWSObject(jwsHeader, new Payload(new String(encoded, StandardCharsets.UTF_8)));
jwsObject.sign(new RSASSASigner(privateKey));
respuesta.setCertificadoFirmado(jwsObject.serialize());
respuesta.addMensaje(mensajesService.getMensaje(EnumSubsistema.AGENCIA_REGISTRO, EnumAgenciaRegistroMensajes.CONFIRMACION_FIRMADO_JWS));
respuesta.setOk(true);
} catch (URISyntaxException ex) {
respuesta.addMensaje(mensajesService.getMensaje(EnumSubsistema.AGENCIA_REGISTRO, EnumAgenciaRegistroMensajes.ERROR_PROCESO_FIRMADO_JWS));
respuesta.setOk(false);
} catch (JOSEException ex) {
respuesta.addMensaje(mensajesService.getMensaje(EnumSubsistema.AGENCIA_REGISTRO, EnumAgenciaRegistroMensajes.ERROR_PROCESO_FIRMADO_JWS));
respuesta.setOk(false);
} catch (NoSuchAlgorithmException ex) {
respuesta.addMensaje(mensajesService.getMensaje(EnumSubsistema.AGENCIA_REGISTRO, EnumAgenciaRegistroMensajes.ERROR_PROCESO_FIRMADO_JWS));
respuesta.setOk(false);
} catch (NoSuchProviderException ex) {
respuesta.addMensaje(mensajesService.getMensaje(EnumSubsistema.AGENCIA_REGISTRO, EnumAgenciaRegistroMensajes.ERROR_PROCESO_FIRMADO_JWS));
respuesta.setOk(false);
}
return respuesta;
}
- ü https://es.wikipedia.org/wiki/Firma_digital
- ü http://siatinfo.impuestos.gob.bo/index.php/menu-uno-4/firma-digital
- ü http://siatinfo.impuestos.gob.bo/index.php/descargas-adicionales
- ü https://www.aduana.gob.bo/firmadigital/
- ü https://www.edatalia.com/es/productos/36-articulos/154-asegurar-validez-en-la-firma-digital-mediante-un-sistema-de-software-y-hardware-adecuado
- ü https://www.firmadigital.bo/
- ü https://acrobat.adobe.com/es/es/sign/capabilities/digital-signatures-faq.html
- ü https://www.macroseguridad.net/soluciones/solucion_precio_transferencia.php
- ü https://www.seguridadamerica.com/que-es-una-firma-digital-aatl/
Comentarios
Publicar un comentario
Únete a la conversación y comparte tú Opinión