/**
   * Ejecuta la aplicacion certutil para eliminar el certificado de confianza raíz SSL.
   *
   * @throws IOException Cuando no se encuentra o puede leer alguno de los ficheros necesarios.
   * @throws GeneralSecurityException Cuando no se puede ejecutar
   */
  private static void executeCertUtilToDelete(final File appConfigDir)
      throws IOException, GeneralSecurityException {

    final File certutilFile = new File(appConfigDir, DIR_CERTUTIL + File.separator + CERTUTIL_EXE);

    if (!certutilFile.exists() || !certutilFile.isFile() || !certutilFile.canExecute()) {
      throw new IOException(
          "No se encuentra o no se puede leer el ejecutable para la instalacion en Firefox"); //$NON-NLS-1$
    }

    // Obtenemos todos los directorios de perfil de Firefox del usuario
    boolean error = false;
    final File profilesDir =
        new File(MozillaKeyStoreUtilities.getMozillaUserProfileDirectory()).getParentFile();
    for (final File profileDir : profilesDir.listFiles()) {
      if (!profileDir.isDirectory()) {
        continue;
      }

      final String[] certutilCommands =
          new String[] {
            certutilFile.getAbsolutePath(),
            "-D", //$NON-NLS-1$
            "-d", //$NON-NLS-1$
            profileDir.getAbsolutePath(),
            "-n", //$NON-NLS-1$
            "\"" + CERT_ALIAS + "\"", // $NON-NLS-1$ //$NON-NLS-2$
          };

      final Process process = new ProcessBuilder(certutilCommands).start();

      // Cuando se instala correctamente no hay salida de ningun tipo, asi que se interpreta
      // cualquier salida como un error
      String line;
      try (final InputStream resIs = process.getInputStream();
          final BufferedReader resReader = new BufferedReader(new InputStreamReader(resIs)); ) {
        while ((line = resReader.readLine()) != null) {
          error = true;
          LOGGER.severe(line);
        }
      }

      try (final InputStream errIs = process.getErrorStream();
          final BufferedReader errReader = new BufferedReader(new InputStreamReader(errIs)); ) {
        while ((line = errReader.readLine()) != null) {
          error = true;
          LOGGER.severe(line);
        }
      }
    }

    if (error) {
      throw new KeyStoreException(
          "Error en el borrado del certificado de CA en alguno de los perfiles de usuario de Firefox"); //$NON-NLS-1$
    }
  }
 private static File getFirefoxProfilesDir() {
   File profilesDir;
   try {
     profilesDir =
         new File(MozillaKeyStoreUtilities.getMozillaUserProfileDirectory()).getParentFile();
   } catch (final Exception e) {
     LOGGER.warning(
         "No se encontro el directorio de perfiles de Mozilla Firefox: " + e); // $NON-NLS-1$
     profilesDir = null;
   }
   return profilesDir;
 }