$certData['subject'] ?? null, 'validFrom' => date('Y-m-d H:i:s', $certData['validFrom_time_t'] ?? 0), 'validTo' => date('Y-m-d H:i:s', $certData['validTo_time_t'] ?? 0), 'fingerprint' => $fingerprint, ]; } /** * Firma digitalmente una cadena usando una llave privada. * * @param string $data Cadena original a firmar. * @param string $privateKeyPath Ruta a la llave privada. * @param string $passphrase Passphrase de la llave privada. * @return string Firma en base64. * @throws \Exception Si falla la firma. */ public function signData($data, $privateKeyPath, $passphrase) { $privateKeyContent = file_get_contents($privateKeyPath); $privateKey = openssl_pkey_get_private($privateKeyContent, $passphrase); if (!$privateKey) { throw new \Exception("No se pudo cargar la llave privada."); } if (!openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256)) { throw new \Exception("Error al firmar los datos."); } return base64_encode($signature); } }