Accediendo al token automático ePass2003 a través del navegador

Resuelto Mitz asked hace 4 años • 1 respuestas

Tengo el token automático ePass2003 cargado con un certificado autofirmado. Obtuve el archivo lib**.so para cargar en Firefox y ahora Firefox puede incluir el certificado en el token. Mi requisito es acceder al almacén de claves para firmar, cifrar y descifrar, es decir, claves públicas y privadas para operaciones criptográficas en ellas. ¿Puedo solicitar orientación sobre la API de JavaScript para realizar la operación criptográfica anterior?

Mitz avatar May 24 '20 14:05 Mitz
Aceptado

Divulgación: trabajo para CISPL

Para acceder a ePass2003 o cualquier tarjeta inteligente o token USB criptográfico, debe utilizar la extensión del navegador. Hasta donde yo sé, los navegadores pueden usar las claves del dispositivo criptográfico para el protocolo de enlace TLS. Mi empresa proporciona dicha extensión Signer.Digital Browser Extension . Chrome y Firefox

El host de Windows se puede descargar desde https://signer.digital/downloads/Signer.Digital.Browser.Extension.Setup.msi

En Windows, no necesitamos PKCS#11 pero usamos Windows CSP. Por lo tanto, el controlador del token USB debe estar instalado en el dispositivo cliente de Windows para que funcione desde el navegador web. El archivo lib**.so no es para Windows pero sí para Linux.

El host Linux utiliza este archivo .so y PKCS#11 para realizar la tarea, pero esto es transparente para los usuarios de ePass2003 y la aplicación Host se encarga de esto.

Mi requisito es acceder al almacén de claves para firmar, cifrar y descifrar, es decir, claves públicas y privadas para operaciones criptográficas en ellas. ¿Puedo solicitar orientación sobre la API de JavaScript para realizar la operación criptográfica anterior?

Estoy enumerando la API de JavaScript (Signer.Digital versión 1.8.0) que proporciona las siguientes promesas:

  1. Seleccionar certificado: esto abrirá una ventana emergente para seleccionar el certificado. Se puede proporcionar el parámetro certThumbPrint para seleccionar el certificado de forma silenciosa.

SignerDigital.getSelectedCertificate(certThumbPrint = "", showExpired = false, keyUsageFilter = 128)

Los valores de keyUsageFilter serían según System.Security.Cryptography.X509Certificates.X509KeyUsageFlags Enum y se pueden agregar (sumar) varios valores.

  1. Hash de signo:

SignerDigital.signHash(hash, certAlgorithm, certThumbPrint = "")

  1. Firmar token de autenticación/datos: calcula el hash de los datos y luego firma el hash.

SignerDigital.signAuthToken(authtoken, certAlgorithm, certThumbPrint = "", showExpired = false)

certAlgorithm tiene un algoritmo que se utilizará. por ejemplo: "SHA256" o "SHA-256"

La bandera showExpired se puede usar aquí para permitir que el usuario simplemente inicie sesión con un certificado caducado y proporcione acceso únicamente al área donde el usuario puede cargar su nuevo certificado.

  1. Firmar PDF : - Devuelve el contenedor de firma PKCS7

SignerDigital.signPdfHash(hash, certThumbPrint, certAlgorithm)

SignerDigital.signHashCAdESBr(hash, certThumbPrint, certAlgorithm) //para el PCI-Brasil

El funcionamiento de la firma de PDF y la autenticación basada en firma digital se puede probar en https://web.signer.digital/

  1. Firmar XML:

SignerDigital.signXML(xmlDoc, xmlSignParms, certThumbPrint)

xmlSignParms tiene una gama más amplia de parámetros y brindamos soporte para la integración en función de los esfuerzos.

  1. RSA Encrypt: (Usando la clave privada del usuario)

SignerDigital.encryptB64Data(b64Data, useOAEPPadding, certThumbPrint = "", showExpired = false, keyUsageFilter = 32)

Ejemplo:

var strToEnc = "Clear Text String to Encrypt.";
var strB64Data = btoa(strToEnc);
console.log("Base64 String of Clear Text String: " + strB64Data);

//Do not provide last parm - certThumbPrint to open dialog to select certificate.
SignerDigital.encryptB64Data(strB64Data, false, "224D7F695ABF0E22EA8D314497F5B56AEFA96FFE") //false for PKCS1 padding, true for OAEP padding
  .then(
    function(EncryptedB64String) { //Success returns xmlSign
      console.log("Encrypted Base64 String: " + EncryptedB64String);
      console.log("Encrypted String: " + atob(EncryptedB64String));
    },
    function(ErrMsg) {
      console.log(ErrMsg);
    }
  )
Expandir fragmento

  1. RSA Decrypt: (Usando la clave privada del usuario)

SignerDigital.decryptB64Data(b64Data, useOAEPPadding, certThumbPrint = "", showExpired = false, keyUsageFilter = 32)

Ejemplo:

console.log("Encrypted B64 string from server: " + EncB64String);
SignerDigital.decryptB64Data(EncB64String, false, "224D7F695ABF0E22EA8D314497F5B56AEFA96FFE")
  .then(
    function(DecryptedB64String) { //Success returns xmlSign
      console.log("Decrypted Base64 String: " + DecryptedB64String);
      console.log("Decrypted String: " + atob(DecryptedB64String));
    },
    function(ErrMsg) {
      console.log(ErrMsg);
    }
  )
},
error: function(msg) {
  console.debug(msg);
}
Expandir fragmento

  1. Firmar la declaración IT/eTDS: (Firmar la declaración del impuesto sobre la renta de la India/eTDS: igual que el método signHash, excepto el parámetro opcional adicional: PAN)

SignerDigital.signITHash(hash, PAN, certThumbPrint = "")

Pase PAN en blanco para abrir el cuadro de diálogo Seleccionar certificado. Si PAN no está vacío y el certificado para PAN está presente, seleccionará silenciosamente el certificado.

  1. Firmar CMS: (Firmar digitalmente la devolución del GST de India)

SignerDigital.signHashCms(hash, certAlgorithm, certIncludeOptions = 2, certThumbPrint = "")

Utilice el método SignerDigital.signHashCAdESBr para la firma ICP-Brasil y el método SignerDigital.signHashCAdESEg para la firma ITIDA CAdES-BES de Egipto.

  1. Firmar datos de IceGate: (Firmar IceGate - Datos de aduanas de la India - Json, texto, XML)

SignerDigital.signIceGate(b64Data, certThumbPrint = "")

Julio de 2021 A continuación se agregaron las API para que las utilicen las autoridades certificadoras (la CA debe estar inscrita en la extensión del navegador Signer.Digital)

  1. Detectar tarjeta inteligente conectada: (Detección automática de tarjeta inteligente o token USB conectado)

SignerDigital.getPCSCReaders(onlyConnected = true) //Listar lectores PCSC, establecer el parámetro en falso si desea enumerar todos los lectores disponibles

  1. Generar CSR: (para Inscripción de Certificado en Smartcard o Token USB)

SignerDigital.genCSR(PKCS11Lib, certSubject, certIssuer, keyBits = 2048, hasgAlgorithm = "SHA256", forceUserPinChangeIfDefault = false)

  1. Importar/descargar certificado (Importar certificado de usuario y cadena de certificado de confianza a tarjeta inteligente o token USB)

SignerDigital.importCer(PKCS11Lib, b64Payload, certIssuer)

Para obtener más detalles, ejemplos de código de detección automática de tarjetas inteligentes , genCSR e importCer consulte Respuesta con diagrama de flujo

Actualización junio 2021

Signer.Digital Browser Extension Host versión 1.7.0 ahora ofrece un mejor control del usuario para mejorar la seguridad al preguntar al usuario sobre el origen permitido (sitio web) que intenta acceder a los certificados/claves. Además, esta versión tiene la función de actualización automática para que el usuario obtenga automáticamente actualizaciones/mejoras de seguridad después de aprobar la actualización mediante el cuadro de diálogo Control de cuentas de usuario.

Cuadro de diálogo Orígenes permitidos de la extensión del navegador Signer.Digital

Bharat Vasant avatar Jul 30 '2020 12:07 Bharat Vasant