/** * 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; }