MiniApplet 2.1 @firma firma de facturas

Es super sencillo, sin configuraciones de policies ni nada de nada.

		function saveSignatureCallback(signatureB64) {
			/* signatureB64 la firma */
			alert(signatureB64);
			/* Para fichero s de mas de 6 MB estos metodos devuelven null
			alert(MiniApplet.getTextFromBase64(signatureB64));
			alert(MiniApplet.getBase64FromText(signatureB64));
			*/
			/* Para guardar a fichero
			MiniApplet.saveDataToFile(
					signatureB64,
					"Guardar firma electru00F3nica",
					null,
					null,
					null);
			*/
		}
		
		function showLogCallback(errorType, errorMessage) {
			alert("Type: " + errorType + "nMessage: " + errorMessage);
		}
	
		function doSign() {
			try {
				var data = document.getElementById("data").value;
				
				alert(MiniApplet.getTextFromBase64(data));
				
				MiniApplet.sign(
					(data != undefined && data != null && data != "") ? data : null,
					'SHA1withRSA',
					'FacturaE',
					null,
					saveSignatureCallback,
					showLogCallback);
			
			} catch(e) {
				try {
					alert("Type: " + MiniApplet.getErrorType() + "nMessage: " + MiniApplet.getErrorMessage());
				} catch(ex) {
					alert("Error: " + e);
				}
			}
		}
<html>
	<head>
                <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
	        <script type="text/javascript" src="miniapplet.js"></script>
	        <script type="text/javascript">
                        // codigo anterior
	        </script>
	</head>
	<body>
		<script type="text/javascript">
			MiniApplet.cargarMiniApplet('file:///C:/@firma/bin/MiniApplet_v1_2/MiniApplet_v1_2/');
			// MiniApplet.checkTime(MiniApplet.CHECKTIME_RECOMMENDED, 60.000);
			// MiniApplet.setLocale("gl_ES");
		</script>
	</body>

dentro de file:///C:/@firma/bin/MiniApplet_v1_2/MiniApplet_v1_2/ hay los siguientes ficheros:

  • miniapplet_facturae.html. El que estoy mostrando
  • Originales (venian en el zip):
    • miniapplet_full.html.
    • miniapplet-full_1_2.jar
    • miniapplet.js
MiniApplet 2.1 @firma firma de facturas

Firmar un JAR

para firmar un jar es muy sencillo, basta tener la JDK, un “key store” con su user/pass/alias/private pass.

A la hora de firmar un jar lo que se hace es:
1.- generar un hash de cada clase en SHA y lo agrega al manifest de la siguiente manera

Manifest-Version: 1.0
Implementation-Vendor: Gobierno de Espana
Implementation-Title: es.gob.afirma
Implementation-Version: build01
Application-Library-Allowable-Codebase: *
Specification-Vendor: Gobierno de Espana
Application-Name: Applet Cliente Afirma
Name: es/gob/afirma
Permissions: all-permissions
Specification-Title: Applet Cliente Afirma
Specification-Version: 3.3.1 u5
Caller-Allowable-Codebase: *
Codebase: *

Name: org/bouncycastle/jcajce/provider/digest/Whirlpool$Digest.class
SHA-256-Digest: FKks3RbQC/oJ2jlI2P9GKwYkEQdZNBOUW6dFI8uVdmM=

...

2.- Agrega unos ficheros que contienen el certificado, con el que se ha firmado, en la misma carpeta donde esta el MANIFEST.MF

En consola

jarsigner -keystore keystore.jks -storepass keystore_pass -keypass keystore_pass -signedjar jarsfirmados/LO_QUE_SEA.jar -verbose jars/LO_QUE_SEA.jar keystore_alias

Maven

			  <plugin>
				    <groupId>org.apache.maven.plugins</groupId>
				    <artifactId>maven-jarsigner-plugin</artifactId>
				    <version>1.2</version>
				    <executions>
				        <execution>
				            <id>sign</id>
				            <goals>
				                <goal>sign</goal>
				            </goals>
				        </execution>
				    </executions>
				    <configuration>
				        <keystore>/path/to/testkeystore</keystore>
				        <alias>myalias</alias>
				        <storepass>depo.root</storepass>
				    </configuration>
				</plugin>
Firmar un JAR