Primero, asegúrate de tener todos los archivos necesarios para la FIREL, como el certificado (.cer) y la llave privada (.key).
Aquí tienes un ejemplo de cómo podrías hacerlo:
Configuración del entorno:
Asegúrate de tener Node.js instalado y crea un nuevo proyecto.
mkdir firel-signature
cd firel-signature
npm init -y
npm install express body-parser
Crear el servidor con Express:
Configura un servidor básico con Express para servir la aplicación.
// server.js
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const app = express();
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Crear la página HTML:
Crea una página HTML con un formulario para cargar el documento a firmar y los archivos de la FIREL.
<!-- public/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Firma Electrónica</title>
</head>
<body>
<h1>Firma Electrónica</h1>
<form id="signForm">
<label for="document">Documento:</label>
<input type="file" id="document" name="document" required><br><br>
<label for="certificate">Certificado (.cer):</label>
<input type="file" id="certificate" name="certificate" required><br><br>
<label for="privateKey">Llave Privada (.key):</label>
<input type="file" id="privateKey" name="privateKey" required><br><br>
<button type="submit">Firmar Documento</button>
</form>
<script src="signature.js"></script>
</body>
</html>
Agregar la lógica de firma en JavaScript:
Utiliza la API WebCrypto para realizar la firma en el cliente.
// public/signature.js
document.getElementById('signForm').addEventListener('submit', async (event) => {
event.preventDefault();
const documentFile = document.getElementById('document').files[0];
const certificateFile = document.getElementById('certificate').files[0];
const privateKeyFile = document.getElementById('privateKey').files[0];
const documentBuffer = await documentFile.arrayBuffer();
const certificateBuffer = await certificateFile.arrayBuffer();
const privateKeyBuffer = await privateKeyFile.arrayBuffer();
// Convert buffers to Uint8Array
const documentArray = new Uint8Array(documentBuffer);
const certificateArray = new Uint8Array(certificateBuffer);
const privateKeyArray = new Uint8Array(privateKeyBuffer);
// Import private key
const privateKey = await window.crypto.subtle.importKey(
'pkcs8',
privateKeyArray,
{
name: 'RSASSA-PKCS1-v1_5',
hash: 'SHA-256'
},
false,
['sign']
);
// Sign the document
const signature = await window.crypto.subtle.sign(
{
name: 'RSASSA-PKCS1-v1_5'
},
privateKey,
documentArray
);
console.log('Document signed successfully:', new Uint8Array(signature));
});
Este es un ejemplo básico y hay varios puntos que se deben considerar para un entorno de producción, como el manejo seguro de archivos, validaciones adicionales, y el manejo de errores. También, puede ser necesario usar una biblioteca específica para manejar los certificados FIREL si la implementación de la firma requiere pasos adicionales específicos de este tipo de certificados.
Comentarios
Publicar un comentario