[Git][debian-gis-team/josm][master] Drop remove_https_remote_control2.patch, ant fixed in Debian.
Bas Couwenberg
gitlab at salsa.debian.org
Tue Jul 3 16:49:14 BST 2018
Bas Couwenberg pushed to branch master at Debian GIS Project / josm
Commits:
7c40dd1d by Bas Couwenberg at 2018-07-03T17:48:33+02:00
Drop remove_https_remote_control2.patch, ant fixed in Debian.
Revert "Add upstream patch to disable HTTPS support in remote control."
This reverts commit 776431daa09f89b58adfa9918eff0d2c17434ac8.
- - - - -
2 changed files:
- − debian/patches/remove_https_remote_control2.patch
- debian/patches/series
Changes:
=====================================
debian/patches/remove_https_remote_control2.patch deleted
=====================================
--- a/debian/patches/remove_https_remote_control2.patch
+++ /dev/null
@@ -1,1180 +0,0 @@
-Description: Remove HTTPS remote control support.
-Author: Don-vip
-Origin: https://josm.openstreetmap.de/attachment/ticket/10033/remove_https_remote_control2.diff
-Bug: https://josm.openstreetmap.de/ticket/16451
-
---- a/build.xml
-+++ b/build.xml
-@@ -199,7 +199,7 @@ Debian-Release: ${debian.version}
- <attribute name="Debian-Release" value="${debian.version}"/>
- <attribute name="Class-Path" value="${classpathprop}"/>
- <!-- Java 9 stuff. Entries are safely ignored by Java 8 -->
-- <attribute name="Add-Exports" value="java.base/sun.security.util java.base/sun.security.x509 java.desktop/com.apple.eawt java.desktop/com.sun.imageio.spi javafx.graphics/com.sun.javafx.application jdk.deploy/com.sun.deploy.config" />
-+ <attribute name="Add-Exports" value="java.desktop/com.apple.eawt java.desktop/com.sun.imageio.spi javafx.graphics/com.sun.javafx.application jdk.deploy/com.sun.deploy.config" />
- <attribute name="Add-Opens" value="java.base/java.lang java.base/java.nio java.base/jdk.internal.loader java.base/jdk.internal.ref java.desktop/javax.imageio.spi java.desktop/javax.swing.text.html java.prefs/java.util.prefs" />
- </manifest>
- <service type="java.text.spi.DecimalFormatSymbolsProvider" provider="org.openstreetmap.josm.tools.JosmDecimalFormatSymbolsProvider" />
-@@ -378,10 +378,6 @@ Debian-Release: ${debian.version}
- <bottom><![CDATA[<a href="https://josm.openstreetmap.de/">JOSM</a>]]></bottom>
- <arg value="-html5" if:set="isJava9" />
- <arg value="--add-exports" if:set="isJava9" />
-- <arg value="java.base/sun.security.util=ALL-UNNAMED" if:set="isJava9" />
-- <arg value="--add-exports" if:set="isJava9" />
-- <arg value="java.base/sun.security.x509=ALL-UNNAMED" if:set="isJava9" />
-- <arg value="--add-exports" if:set="isJava9" unless:set="noJavaFX" />
- <arg value="javafx.graphics/com.sun.javafx.application=ALL-UNNAMED" if:set="isJava9" unless:set="noJavaFX" />
- <excludepackage name="org/openstreetmap/josm/io/audio/fx" if:set="noJavaFX" />
- </javadoc>
-@@ -474,10 +470,6 @@ Debian-Release: ${debian.version}
- <jvmarg value="--add-modules" if:set="isJava9" unless:set="isJava11" />
- <jvmarg value="java.activation,java.se.ee" if:set="isJava9" unless:set="isJava11" />
- <jvmarg value="--add-exports" if:set="isJava9" />
-- <jvmarg value="java.base/sun.security.util=ALL-UNNAMED" if:set="isJava9" />
-- <jvmarg value="--add-exports" if:set="isJava9" />
-- <jvmarg value="java.base/sun.security.x509=ALL-UNNAMED" if:set="isJava9" />
-- <jvmarg value="--add-exports" if:set="isJava9" unless:set="noJavaFX" />
- <jvmarg value="javafx.graphics/com.sun.javafx.application=ALL-UNNAMED" if:set="isJava9" unless:set="noJavaFX" />
- <jvmarg value="--add-exports" if:set="isJava9" unless:set="isJava11" />
- <jvmarg value="jdk.deploy/com.sun.deploy.config=ALL-UNNAMED" if:set="isJava9" unless:set="isJava11" />
---- a/src/org/openstreetmap/josm/data/Preferences.java
-+++ b/src/org/openstreetmap/josm/data/Preferences.java
-@@ -79,6 +79,8 @@ import org.xml.sax.SAXException;
- public class Preferences extends AbstractPreferences {
-
- private static final String[] OBSOLETE_PREF_KEYS = {
-+ "remotecontrol.https.enabled", /* remove entry after Dec. 2018 */
-+ "remotecontrol.https.port", /* remove entry after Dec. 2018 */
- };
-
- private static final long MAX_AGE_DEFAULT_PREFERENCES = TimeUnit.DAYS.toSeconds(50);
---- a/src/org/openstreetmap/josm/gui/MainApplication.java
-+++ b/src/org/openstreetmap/josm/gui/MainApplication.java
-@@ -27,12 +27,9 @@ import java.nio.file.Paths;
- import java.security.AllPermission;
- import java.security.CodeSource;
- import java.security.GeneralSecurityException;
--import java.security.KeyStoreException;
--import java.security.NoSuchAlgorithmException;
- import java.security.PermissionCollection;
- import java.security.Permissions;
- import java.security.Policy;
--import java.security.cert.CertificateException;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collection;
-@@ -1094,17 +1091,6 @@ public class MainApplication extends Mai
-
- SwingUtilities.invokeLater(new GuiFinalizationWorker(args, proxySelector));
-
-- if (Main.isPlatformWindows()) {
-- try {
-- // Check for insecure certificates to remove.
-- // This is Windows-dependant code but it can't go to preStartupHook (need i18n)
-- // neither startupHook (need to be called before remote control)
-- PlatformHookWindows.removeInsecureCertificates();
-- } catch (NoSuchAlgorithmException | CertificateException | KeyStoreException | IOException e) {
-- Logging.error(e);
-- }
-- }
--
- if (RemoteControl.PROP_REMOTECONTROL_ENABLED.get()) {
- RemoteControl.start();
- }
---- a/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java
-+++ b/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java
-@@ -7,26 +7,17 @@ import java.awt.Color;
- import java.awt.Font;
- import java.awt.GridBagLayout;
- import java.awt.event.ActionListener;
--import java.io.IOException;
--import java.security.GeneralSecurityException;
--import java.security.KeyStore;
--import java.security.KeyStoreException;
--import java.security.NoSuchAlgorithmException;
--import java.security.cert.CertificateException;
- import java.util.LinkedHashMap;
- import java.util.Map;
- import java.util.Map.Entry;
-
- import javax.swing.BorderFactory;
- import javax.swing.Box;
--import javax.swing.JButton;
- import javax.swing.JCheckBox;
- import javax.swing.JLabel;
--import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JSeparator;
-
--import org.openstreetmap.josm.Main;
- import org.openstreetmap.josm.gui.help.HelpUtil;
- import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
- import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
-@@ -36,12 +27,9 @@ import org.openstreetmap.josm.gui.util.G
- import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
- import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
- import org.openstreetmap.josm.io.remotecontrol.RemoteControl;
--import org.openstreetmap.josm.io.remotecontrol.RemoteControlHttpsServer;
- import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler;
- import org.openstreetmap.josm.spi.preferences.Config;
- import org.openstreetmap.josm.tools.GBC;
--import org.openstreetmap.josm.tools.Logging;
--import org.openstreetmap.josm.tools.PlatformHookWindows;
-
- /**
- * Preference settings for Remote Control.
-@@ -72,10 +60,6 @@ public final class RemoteControlPreferen
-
- private final Map<PermissionPrefWithDefault, JCheckBox> prefs = new LinkedHashMap<>();
- private JCheckBox enableRemoteControl;
-- private JCheckBox enableHttpsSupport;
--
-- private JButton installCertificate;
-- private JButton uninstallCertificate;
-
- private final JCheckBox loadInNewLayer = new JCheckBox(tr("Download as new layer"));
- private final JCheckBox alwaysAskUserConfirm = new JCheckBox(tr("Confirm all Remote Control actions manually"));
-@@ -92,10 +76,9 @@ public final class RemoteControlPreferen
- remote.add(descLabel, GBC.eol().insets(5, 5, 0, 10).fill(GBC.HORIZONTAL));
-
- final JLabel portLabel = new JLabel("<html>"
-- + tr("JOSM will always listen at <b>port {0}</b> (http) and <b>port {1}</b> (https) on localhost."
-- + "<br>These ports are not configurable because they are referenced by external applications talking to JOSM.",
-- Config.getPref().get("remote.control.port", "8111"),
-- Config.getPref().get("remote.control.https.port", "8112")) + "</html>");
-+ + tr("JOSM will always listen at <b>port {0}</b> (http) on localhost."
-+ + "<br>This port is not configurable because it is referenced by external applications talking to JOSM.",
-+ Config.getPref().get("remote.control.port", "8111")) + "</html>");
- portLabel.setFont(portLabel.getFont().deriveFont(Font.PLAIN));
- remote.add(portLabel, GBC.eol().insets(5, 5, 0, 10).fill(GBC.HORIZONTAL));
-
-@@ -107,54 +90,6 @@ public final class RemoteControlPreferen
-
- remote.add(wrapper, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 5, 5, 5));
-
-- boolean https = RemoteControl.PROP_REMOTECONTROL_HTTPS_ENABLED.get();
--
-- enableHttpsSupport = new JCheckBox(tr("Enable HTTPS support"), https);
-- wrapper.add(enableHttpsSupport, GBC.eol().fill(GBC.HORIZONTAL));
--
-- // Certificate installation only available on Windows for now, see #10033
-- if (Main.isPlatformWindows()) {
-- installCertificate = new JButton(tr("Install..."));
-- uninstallCertificate = new JButton(tr("Uninstall..."));
-- installCertificate.setToolTipText(tr("Install JOSM localhost certificate to system/browser root keystores"));
-- uninstallCertificate.setToolTipText(tr("Uninstall JOSM localhost certificate from system/browser root keystores"));
-- wrapper.add(new JLabel(tr("Certificate:")), GBC.std().insets(15, 5, 0, 0));
-- wrapper.add(installCertificate, GBC.std().insets(5, 5, 0, 0));
-- wrapper.add(uninstallCertificate, GBC.eol().insets(5, 5, 0, 0));
-- enableHttpsSupport.addActionListener(e -> installCertificate.setEnabled(enableHttpsSupport.isSelected()));
-- installCertificate.addActionListener(e -> {
-- try {
-- boolean changed = RemoteControlHttpsServer.setupPlatform(
-- RemoteControlHttpsServer.loadJosmKeystore());
-- String msg = changed ?
-- tr("Certificate has been successfully installed.") :
-- tr("Certificate is already installed. Nothing to do.");
-- Logging.info(msg);
-- JOptionPane.showMessageDialog(wrapper, msg);
-- } catch (IOException | GeneralSecurityException ex) {
-- Logging.error(ex);
-- }
-- });
-- uninstallCertificate.addActionListener(e -> {
-- try {
-- String msg;
-- KeyStore ks = PlatformHookWindows.getRootKeystore();
-- if (ks.containsAlias(RemoteControlHttpsServer.ENTRY_ALIAS)) {
-- Logging.info(tr("Removing certificate {0} from root keystore.", RemoteControlHttpsServer.ENTRY_ALIAS));
-- ks.deleteEntry(RemoteControlHttpsServer.ENTRY_ALIAS);
-- msg = tr("Certificate has been successfully uninstalled.");
-- } else {
-- msg = tr("Certificate is not installed. Nothing to do.");
-- }
-- Logging.info(msg);
-- JOptionPane.showMessageDialog(wrapper, msg);
-- } catch (KeyStoreException | NoSuchAlgorithmException | CertificateException | IOException ex) {
-- Logging.error(ex);
-- }
-- });
-- installCertificate.setEnabled(https);
-- }
--
- wrapper.add(new JSeparator(), GBC.eop().fill(GBC.HORIZONTAL).insets(15, 5, 15, 5));
-
- wrapper.add(new JLabel(tr("Permitted actions:")), GBC.eol().insets(5, 0, 0, 0));
-@@ -175,16 +110,6 @@ public final class RemoteControlPreferen
-
- ActionListener remoteControlEnabled = e -> {
- GuiHelper.setEnabledRec(wrapper, enableRemoteControl.isSelected());
-- enableHttpsSupport.setEnabled(RemoteControl.supportsHttps());
-- // 'setEnabled(false)' does not work for JLabel with html text, so do it manually
-- // FIXME: use QuadStateCheckBox to make checkboxes unset when disabled
-- if (installCertificate != null && uninstallCertificate != null) {
-- // Install certificate button is enabled if HTTPS is also enabled
-- installCertificate.setEnabled(enableRemoteControl.isSelected()
-- && enableHttpsSupport.isSelected() && RemoteControl.supportsHttps());
-- // Uninstall certificate button is always enabled
-- uninstallCertificate.setEnabled(RemoteControl.supportsHttps());
-- }
- };
- enableRemoteControl.addActionListener(remoteControlEnabled);
- remoteControlEnabled.actionPerformed(null);
-@@ -194,9 +119,7 @@ public final class RemoteControlPreferen
- @Override
- public boolean ok() {
- boolean enabled = enableRemoteControl.isSelected();
-- boolean httpsEnabled = enableHttpsSupport.isSelected();
- boolean changed = RemoteControl.PROP_REMOTECONTROL_ENABLED.put(enabled);
-- boolean httpsChanged = RemoteControl.PROP_REMOTECONTROL_HTTPS_ENABLED.put(httpsEnabled);
- if (enabled) {
- for (Entry<PermissionPrefWithDefault, JCheckBox> p : prefs.entrySet()) {
- Config.getPref().putBoolean(p.getKey().pref, p.getValue().isSelected());
-@@ -210,12 +133,6 @@ public final class RemoteControlPreferen
- } else {
- RemoteControl.stop();
- }
-- } else if (httpsChanged) {
-- if (httpsEnabled) {
-- RemoteControlHttpsServer.restartRemoteControlHttpsServer();
-- } else {
-- RemoteControlHttpsServer.stopRemoteControlHttpsServer();
-- }
- }
- return false;
- }
---- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
-+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControl.java
-@@ -10,7 +10,6 @@ import java.net.UnknownHostException;
- import org.openstreetmap.josm.data.preferences.BooleanProperty;
- import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler;
- import org.openstreetmap.josm.spi.preferences.Config;
--import org.openstreetmap.josm.tools.Logging;
-
- /**
- * Manager class for remote control operations.
-@@ -27,14 +26,6 @@ public class RemoteControl {
- public static final BooleanProperty PROP_REMOTECONTROL_ENABLED = new BooleanProperty("remotecontrol.enabled", false);
-
- /**
-- * If the remote control feature is enabled or disabled for HTTPS. If disabled,
-- * only HTTP access will be available.
-- * @since 7335
-- */
-- public static final BooleanProperty PROP_REMOTECONTROL_HTTPS_ENABLED = new BooleanProperty(
-- "remotecontrol.https.enabled", false);
--
-- /**
- * RemoteControl HTTP protocol version. Change minor number for compatible
- * interface extensions. Change major number in case of incompatible
- * changes.
-@@ -47,9 +38,6 @@ public class RemoteControl {
- */
- public static void start() {
- RemoteControlHttpServer.restartRemoteControlHttpServer();
-- if (supportsHttps()) {
-- RemoteControlHttpsServer.restartRemoteControlHttpsServer();
-- }
- }
-
- /**
-@@ -58,23 +46,6 @@ public class RemoteControl {
- */
- public static void stop() {
- RemoteControlHttpServer.stopRemoteControlHttpServer();
-- if (supportsHttps()) {
-- RemoteControlHttpsServer.stopRemoteControlHttpsServer();
-- }
-- }
--
-- /**
-- * Determines if the current JVM support HTTPS remote control.
-- * @return {@code true} if the JVM provides {@code sun.security.x509} classes
-- * @since 12703
-- */
-- public static boolean supportsHttps() {
-- try {
-- return Class.forName("sun.security.x509.GeneralName") != null;
-- } catch (ClassNotFoundException | SecurityException e) {
-- Logging.trace(e);
-- return false;
-- }
- }
-
- /**
---- a/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
-+++ b/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
-@@ -1,436 +0,0 @@
--// License: GPL. For details, see LICENSE file.
--package org.openstreetmap.josm.io.remotecontrol;
--
--import static org.openstreetmap.josm.tools.I18n.marktr;
--
--import java.io.IOException;
--import java.io.InputStream;
--import java.io.OutputStream;
--import java.math.BigInteger;
--import java.net.ServerSocket;
--import java.net.Socket;
--import java.net.SocketException;
--import java.nio.file.Files;
--import java.nio.file.Path;
--import java.nio.file.Paths;
--import java.nio.file.StandardOpenOption;
--import java.security.GeneralSecurityException;
--import java.security.KeyPair;
--import java.security.KeyPairGenerator;
--import java.security.KeyStore;
--import java.security.KeyStoreException;
--import java.security.NoSuchAlgorithmException;
--import java.security.PrivateKey;
--import java.security.SecureRandom;
--import java.security.cert.Certificate;
--import java.security.cert.CertificateException;
--import java.security.cert.X509Certificate;
--import java.util.Arrays;
--import java.util.Date;
--import java.util.Enumeration;
--import java.util.Locale;
--import java.util.Vector;
--
--import javax.net.ssl.KeyManagerFactory;
--import javax.net.ssl.SSLContext;
--import javax.net.ssl.SSLServerSocket;
--import javax.net.ssl.SSLServerSocketFactory;
--import javax.net.ssl.SSLSocket;
--import javax.net.ssl.TrustManagerFactory;
--
--import org.openstreetmap.josm.Main;
--import org.openstreetmap.josm.data.preferences.StringProperty;
--import org.openstreetmap.josm.spi.preferences.Config;
--import org.openstreetmap.josm.tools.Logging;
--
--import sun.security.util.ObjectIdentifier;
--import sun.security.x509.AlgorithmId;
--import sun.security.x509.BasicConstraintsExtension;
--import sun.security.x509.CertificateAlgorithmId;
--import sun.security.x509.CertificateExtensions;
--import sun.security.x509.CertificateSerialNumber;
--import sun.security.x509.CertificateValidity;
--import sun.security.x509.CertificateVersion;
--import sun.security.x509.CertificateX509Key;
--import sun.security.x509.DNSName;
--import sun.security.x509.ExtendedKeyUsageExtension;
--import sun.security.x509.GeneralName;
--import sun.security.x509.GeneralNameInterface;
--import sun.security.x509.GeneralNames;
--import sun.security.x509.IPAddressName;
--import sun.security.x509.OIDName;
--import sun.security.x509.SubjectAlternativeNameExtension;
--import sun.security.x509.URIName;
--import sun.security.x509.X500Name;
--import sun.security.x509.X509CertImpl;
--import sun.security.x509.X509CertInfo;
--
--/**
-- * Simple HTTPS server that spawns a {@link RequestProcessor} for every secure connection.
-- *
-- * @since 6941
-- */
--public class RemoteControlHttpsServer extends Thread {
--
-- /** The server socket */
-- private final ServerSocket server;
--
-- /** The server instance for IPv4 */
-- private static volatile RemoteControlHttpsServer instance4;
-- /** The server instance for IPv6 */
-- private static volatile RemoteControlHttpsServer instance6;
--
-- /** SSL context information for connections */
-- private SSLContext sslContext;
--
-- /* the default port for HTTPS remote control */
-- private static final int HTTPS_PORT = 8112;
--
-- /**
-- * JOSM keystore file name.
-- * @since 7337
-- */
-- public static final String KEYSTORE_FILENAME = "josm.keystore";
--
-- /**
-- * Preference for keystore password (automatically generated by JOSM).
-- * @since 7335
-- */
-- public static final StringProperty KEYSTORE_PASSWORD = new StringProperty("remotecontrol.https.keystore.password", "");
--
-- /**
-- * Preference for certificate password (automatically generated by JOSM).
-- * @since 7335
-- */
-- public static final StringProperty KEYENTRY_PASSWORD = new StringProperty("remotecontrol.https.keyentry.password", "");
--
-- /**
-- * Unique alias used to store JOSM localhost entry, both in JOSM keystore and system/browser keystores.
-- * @since 7343
-- */
-- public static final String ENTRY_ALIAS = "josm_localhost";
--
-- /**
-- * Creates a GeneralNameInterface object from known types.
-- * @param t one of 4 known types
-- * @param v value
-- * @return which one
-- * @throws IOException if any I/O error occurs
-- */
-- private static GeneralNameInterface createGeneralNameInterface(String t, String v) throws IOException {
-- switch (t.toLowerCase(Locale.ENGLISH)) {
-- case "uri": return new URIName(v);
-- case "dns": return new DNSName(v);
-- case "ip": return new IPAddressName(v);
-- default: return new OIDName(v);
-- }
-- }
--
-- /**
-- * Create a self-signed X.509 Certificate.
-- * @param dn the X.509 Distinguished Name, eg "CN=localhost, OU=JOSM, O=OpenStreetMap"
-- * @param pair the KeyPair
-- * @param days how many days from now the Certificate is valid for
-- * @param algorithm the signing algorithm, eg "SHA256withRSA"
-- * @param san SubjectAlternativeName extension (optional)
-- * @return the self-signed X.509 Certificate
-- * @throws GeneralSecurityException if any security error occurs
-- * @throws IOException if any I/O error occurs
-- */
-- private static X509Certificate generateCertificate(String dn, KeyPair pair, int days, String algorithm, String san)
-- throws GeneralSecurityException, IOException {
-- X509CertInfo info = new X509CertInfo();
-- Date from = new Date();
-- Date to = new Date(from.getTime() + days * 86_400_000L);
-- CertificateValidity interval = new CertificateValidity(from, to);
-- BigInteger sn = new BigInteger(64, new SecureRandom());
-- X500Name owner = new X500Name(dn);
--
-- info.set(X509CertInfo.VALIDITY, interval);
-- info.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(sn));
-- info.set(X509CertInfo.SUBJECT, owner);
-- info.set(X509CertInfo.ISSUER, owner);
--
-- info.set(X509CertInfo.KEY, new CertificateX509Key(pair.getPublic()));
-- info.set(X509CertInfo.VERSION, new CertificateVersion(CertificateVersion.V3));
-- AlgorithmId algo = new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
-- info.set(X509CertInfo.ALGORITHM_ID, new CertificateAlgorithmId(algo));
--
-- CertificateExtensions ext = new CertificateExtensions();
-- // Critical: Not CA, max path len 0
-- ext.set(BasicConstraintsExtension.NAME, new BasicConstraintsExtension(Boolean.TRUE, false, 0));
-- // Critical: only allow TLS ("serverAuth" = 1.3.6.1.5.5.7.3.1)
-- ext.set(ExtendedKeyUsageExtension.NAME, new ExtendedKeyUsageExtension(Boolean.TRUE,
-- new Vector<>(Arrays.asList(new ObjectIdentifier("1.3.6.1.5.5.7.3.1")))));
--
-- if (san != null) {
-- int colonpos;
-- String[] ps = san.split(",");
-- GeneralNames gnames = new GeneralNames();
-- for (String item: ps) {
-- colonpos = item.indexOf(':');
-- if (colonpos < 0) {
-- throw new IllegalArgumentException("Illegal item " + item + " in " + san);
-- }
-- String t = item.substring(0, colonpos);
-- String v = item.substring(colonpos+1);
-- gnames.add(new GeneralName(createGeneralNameInterface(t, v)));
-- }
-- // Non critical
-- ext.set(SubjectAlternativeNameExtension.NAME, new SubjectAlternativeNameExtension(Boolean.FALSE, gnames));
-- }
--
-- info.set(X509CertInfo.EXTENSIONS, ext);
--
-- // Sign the cert to identify the algorithm that's used.
-- PrivateKey privkey = pair.getPrivate();
-- X509CertImpl cert = new X509CertImpl(info);
-- cert.sign(privkey, algorithm);
--
-- // Update the algorithm, and resign.
-- algo = (AlgorithmId) cert.get(X509CertImpl.SIG_ALG);
-- info.set(CertificateAlgorithmId.NAME + "." + CertificateAlgorithmId.ALGORITHM, algo);
-- cert = new X509CertImpl(info);
-- cert.sign(privkey, algorithm);
-- return cert;
-- }
--
-- /**
-- * Setup the JOSM internal keystore, used to store HTTPS certificate and private key.
-- * @return Path to the (initialized) JOSM keystore
-- * @throws IOException if an I/O error occurs
-- * @throws GeneralSecurityException if a security error occurs
-- * @since 7343
-- */
-- public static Path setupJosmKeystore() throws IOException, GeneralSecurityException {
--
-- Path dir = Paths.get(RemoteControl.getRemoteControlDir());
-- Path path = dir.resolve(KEYSTORE_FILENAME);
-- Files.createDirectories(dir);
--
-- if (!path.toFile().exists()) {
-- Logging.debug("No keystore found, creating a new one");
--
-- // Create new keystore like previous one generated with JDK keytool as follows:
-- // keytool -genkeypair -storepass josm_ssl -keypass josm_ssl -alias josm_localhost -dname "CN=localhost, OU=JOSM, O=OpenStreetMap"
-- // -ext san=ip:127.0.0.1 -keyalg RSA -validity 1825
--
-- KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
-- generator.initialize(2048);
-- KeyPair pair = generator.generateKeyPair();
--
-- X509Certificate cert = generateCertificate("CN=localhost, OU=JOSM, O=OpenStreetMap", pair, 1825, "SHA256withRSA",
-- "dns:localhost,ip:127.0.0.1,ip:::1,uri:https://127.0.0.1:"+HTTPS_PORT+",uri:https://::1:"+HTTPS_PORT);
--
-- KeyStore ks = KeyStore.getInstance("JKS");
-- ks.load(null, null);
--
-- // Generate new passwords. See https://stackoverflow.com/a/41156/2257172
-- SecureRandom random = new SecureRandom();
-- KEYSTORE_PASSWORD.put(new BigInteger(130, random).toString(32));
-- KEYENTRY_PASSWORD.put(new BigInteger(130, random).toString(32));
--
-- char[] storePassword = KEYSTORE_PASSWORD.get().toCharArray();
-- char[] entryPassword = KEYENTRY_PASSWORD.get().toCharArray();
--
-- ks.setKeyEntry(ENTRY_ALIAS, pair.getPrivate(), entryPassword, new Certificate[]{cert});
-- try (OutputStream out = Files.newOutputStream(path, StandardOpenOption.CREATE)) {
-- ks.store(out, storePassword);
-- }
-- }
-- return path;
-- }
--
-- /**
-- * Loads the JOSM keystore.
-- * @return the (initialized) JOSM keystore
-- * @throws IOException if an I/O error occurs
-- * @throws GeneralSecurityException if a security error occurs
-- * @since 7343
-- */
-- public static KeyStore loadJosmKeystore() throws IOException, GeneralSecurityException {
-- try (InputStream in = Files.newInputStream(setupJosmKeystore())) {
-- KeyStore ks = KeyStore.getInstance("JKS");
-- ks.load(in, KEYSTORE_PASSWORD.get().toCharArray());
--
-- if (Logging.isDebugEnabled()) {
-- for (Enumeration<String> aliases = ks.aliases(); aliases.hasMoreElements();) {
-- Logging.debug("Alias in JOSM keystore: {0}", aliases.nextElement());
-- }
-- }
-- return ks;
-- }
-- }
--
-- /**
-- * Initializes the TLS basics.
-- * @throws IOException if an I/O error occurs
-- * @throws GeneralSecurityException if a security error occurs
-- */
-- private void initialize() throws IOException, GeneralSecurityException {
-- KeyStore ks = loadJosmKeystore();
--
-- KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
-- kmf.init(ks, KEYENTRY_PASSWORD.get().toCharArray());
--
-- TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
-- tmf.init(ks);
--
-- sslContext = SSLContext.getInstance("TLSv1.2");
-- sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
--
-- if (Logging.isTraceEnabled()) {
-- Logging.trace("SSL Context protocol: {0}", sslContext.getProtocol());
-- Logging.trace("SSL Context provider: {0}", sslContext.getProvider());
-- }
--
-- setupPlatform(ks);
-- }
--
-- /**
-- * Setup the platform-dependant certificate stuff.
-- * @param josmKs The JOSM keystore, containing localhost certificate and private key.
-- * @return {@code true} if something has changed as a result of the call (certificate installation, etc.)
-- * @throws KeyStoreException if the keystore has not been initialized (loaded)
-- * @throws NoSuchAlgorithmException in case of error
-- * @throws CertificateException in case of error
-- * @throws IOException in case of error
-- * @since 7343
-- */
-- public static boolean setupPlatform(KeyStore josmKs) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
-- Enumeration<String> aliases = josmKs.aliases();
-- if (aliases.hasMoreElements()) {
-- return Main.platform.setupHttpsCertificate(ENTRY_ALIAS,
-- new KeyStore.TrustedCertificateEntry(josmKs.getCertificate(aliases.nextElement())));
-- }
-- return false;
-- }
--
-- /**
-- * Starts or restarts the HTTPS server
-- */
-- public static void restartRemoteControlHttpsServer() {
-- stopRemoteControlHttpsServer();
-- if (RemoteControl.PROP_REMOTECONTROL_HTTPS_ENABLED.get()) {
-- int port = Config.getPref().getInt("remote.control.https.port", HTTPS_PORT);
-- try {
-- instance4 = new RemoteControlHttpsServer(port, false);
-- instance4.start();
-- } catch (IOException | GeneralSecurityException ex) {
-- Logging.debug(ex);
-- Logging.warn(marktr("Cannot start IPv4 remotecontrol https server on port {0}: {1}"),
-- Integer.toString(port), ex.getLocalizedMessage());
-- }
-- try {
-- instance6 = new RemoteControlHttpsServer(port, true);
-- instance6.start();
-- } catch (IOException | GeneralSecurityException ex) {
-- /* only show error when we also have no IPv4 */
-- if (instance4 == null) {
-- Logging.debug(ex);
-- Logging.warn(marktr("Cannot start IPv6 remotecontrol https server on port {0}: {1}"),
-- Integer.toString(port), ex.getLocalizedMessage());
-- }
-- }
-- }
-- }
--
-- /**
-- * Stops the HTTPS server
-- */
-- public static void stopRemoteControlHttpsServer() {
-- if (instance4 != null) {
-- try {
-- instance4.stopServer();
-- } catch (IOException ioe) {
-- Logging.error(ioe);
-- }
-- instance4 = null;
-- }
-- if (instance6 != null) {
-- try {
-- instance6.stopServer();
-- } catch (IOException ioe) {
-- Logging.error(ioe);
-- }
-- instance6 = null;
-- }
-- }
--
-- /**
-- * Constructs a new {@code RemoteControlHttpsServer}.
-- * @param port The port this server will listen on
-- * @param ipv6 Whether IPv6 or IPv4 server should be started
-- * @throws IOException when connection errors
-- * @throws GeneralSecurityException in case of SSL setup errors
-- * @since 8339
-- */
-- public RemoteControlHttpsServer(int port, boolean ipv6) throws IOException, GeneralSecurityException {
-- super("RemoteControl HTTPS Server");
-- this.setDaemon(true);
--
-- initialize();
--
-- // Create SSL Server factory
-- SSLServerSocketFactory factory = sslContext.getServerSocketFactory();
-- if (Logging.isTraceEnabled()) {
-- Logging.trace("SSL factory - Supported Cipher suites: {0}", Arrays.toString(factory.getSupportedCipherSuites()));
-- }
--
-- this.server = factory.createServerSocket(port, 1, ipv6 ?
-- RemoteControl.getInet6Address() : RemoteControl.getInet4Address());
--
-- if (Logging.isTraceEnabled() && server instanceof SSLServerSocket) {
-- SSLServerSocket sslServer = (SSLServerSocket) server;
-- Logging.trace("SSL server - Enabled Cipher suites: {0}", Arrays.toString(sslServer.getEnabledCipherSuites()));
-- Logging.trace("SSL server - Enabled Protocols: {0}", Arrays.toString(sslServer.getEnabledProtocols()));
-- Logging.trace("SSL server - Enable Session Creation: {0}", sslServer.getEnableSessionCreation());
-- Logging.trace("SSL server - Need Client Auth: {0}", sslServer.getNeedClientAuth());
-- Logging.trace("SSL server - Want Client Auth: {0}", sslServer.getWantClientAuth());
-- Logging.trace("SSL server - Use Client Mode: {0}", sslServer.getUseClientMode());
-- }
-- }
--
-- /**
-- * The main loop, spawns a {@link RequestProcessor} for each connection.
-- */
-- @Override
-- public void run() {
-- Logging.info(marktr("RemoteControl::Accepting secure remote connections on {0}:{1}"),
-- server.getInetAddress(), Integer.toString(server.getLocalPort()));
-- while (true) {
-- try {
-- @SuppressWarnings("resource")
-- Socket request = server.accept();
-- if (Logging.isTraceEnabled() && request instanceof SSLSocket) {
-- SSLSocket sslSocket = (SSLSocket) request;
-- Logging.trace("SSL socket - Enabled Cipher suites: {0}", Arrays.toString(sslSocket.getEnabledCipherSuites()));
-- Logging.trace("SSL socket - Enabled Protocols: {0}", Arrays.toString(sslSocket.getEnabledProtocols()));
-- Logging.trace("SSL socket - Enable Session Creation: {0}", sslSocket.getEnableSessionCreation());
-- Logging.trace("SSL socket - Need Client Auth: {0}", sslSocket.getNeedClientAuth());
-- Logging.trace("SSL socket - Want Client Auth: {0}", sslSocket.getWantClientAuth());
-- Logging.trace("SSL socket - Use Client Mode: {0}", sslSocket.getUseClientMode());
-- Logging.trace("SSL socket - Session: {0}", sslSocket.getSession());
-- }
-- RequestProcessor.processRequest(request);
-- } catch (SocketException e) {
-- if (!server.isClosed()) {
-- Logging.error(e);
-- }
-- } catch (IOException ioe) {
-- Logging.error(ioe);
-- }
-- }
-- }
--
-- /**
-- * Stops the HTTPS server.
-- *
-- * @throws IOException if any I/O error occurs
-- */
-- public void stopServer() throws IOException {
-- Logging.info(marktr("RemoteControl::Server {0}:{1} stopped."),
-- server.getInetAddress(), Integer.toString(server.getLocalPort()));
-- server.close();
-- }
--}
---- a/src/org/openstreetmap/josm/tools/PlatformHook.java
-+++ b/src/org/openstreetmap/josm/tools/PlatformHook.java
-@@ -9,7 +9,6 @@ import java.io.File;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.nio.charset.StandardCharsets;
--import java.security.KeyStore;
- import java.security.KeyStoreException;
- import java.security.NoSuchAlgorithmException;
- import java.security.cert.CertificateException;
-@@ -186,23 +185,6 @@ public interface PlatformHook {
- }
-
- /**
-- * Setup system keystore to add JOSM HTTPS certificate (for remote control).
-- * @param entryAlias The entry alias to use
-- * @param trustedCert the JOSM certificate for localhost
-- * @return {@code true} if something has changed as a result of the call (certificate installation, etc.)
-- * @throws KeyStoreException in case of error
-- * @throws IOException in case of error
-- * @throws CertificateException in case of error
-- * @throws NoSuchAlgorithmException in case of error
-- * @since 7343
-- */
-- default boolean setupHttpsCertificate(String entryAlias, KeyStore.TrustedCertificateEntry trustedCert)
-- throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
-- // TODO setup HTTPS certificate on Unix and OS X systems
-- return false;
-- }
--
-- /**
- * Returns the {@code X509Certificate} matching the given certificate amendment information.
- * @param certAmend certificate amendment
- * @return the {@code X509Certificate} matching the given certificate amendment information, or {@code null}
---- a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
-+++ b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
-@@ -30,7 +30,6 @@ import static org.openstreetmap.josm.too
- import static org.openstreetmap.josm.tools.Utils.getSystemProperty;
- import static org.openstreetmap.josm.tools.WinRegistry.HKEY_LOCAL_MACHINE;
-
--import java.awt.GraphicsEnvironment;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.IOException;
-@@ -45,20 +44,13 @@ import java.nio.file.FileSystems;
- import java.nio.file.Files;
- import java.nio.file.InvalidPathException;
- import java.nio.file.Path;
--import java.security.InvalidKeyException;
--import java.security.KeyFactory;
- import java.security.KeyStore;
- import java.security.KeyStoreException;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
--import java.security.NoSuchProviderException;
--import java.security.PublicKey;
--import java.security.SignatureException;
- import java.security.cert.Certificate;
- import java.security.cert.CertificateException;
- import java.security.cert.X509Certificate;
--import java.security.spec.InvalidKeySpecException;
--import java.security.spec.X509EncodedKeySpec;
- import java.text.ParseException;
- import java.util.ArrayList;
- import java.util.Arrays;
-@@ -72,8 +64,6 @@ import java.util.concurrent.TimeUnit;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
-
--import javax.swing.JOptionPane;
--
- import org.openstreetmap.josm.Main;
- import org.openstreetmap.josm.data.StructUtils;
- import org.openstreetmap.josm.data.StructUtils.StructEntry;
-@@ -133,33 +123,6 @@ public class PlatformHookWindows impleme
- }
- }
-
-- private static final byte[] INSECURE_PUBLIC_KEY = new byte[] {
-- 0x30, (byte) 0x82, 0x1, 0x22, 0x30, 0xd, 0x6, 0x9, 0x2a, (byte) 0x86, 0x48,
-- (byte) 0x86, (byte) 0xf7, 0xd, 0x1, 0x1, 0x1, 0x5, 0x0, 0x3, (byte) 0x82, 0x1, 0xf, 0x0,
-- 0x30, (byte) 0x82, 0x01, 0x0a, 0x02, (byte) 0x82, 0x01, 0x01, 0x00, (byte) 0x95, (byte) 0x95, (byte) 0x88,
-- (byte) 0x84, (byte) 0xc8, (byte) 0xd9, 0x6b, (byte) 0xc5, (byte) 0xda, 0x0b, 0x69, (byte) 0xbf, (byte) 0xfc,
-- 0x7e, (byte) 0xb9, (byte) 0x96, 0x2c, (byte) 0xeb, (byte) 0x8f, (byte) 0xbc, 0x6e, 0x40, (byte) 0xe6, (byte) 0xe2,
-- (byte) 0xfc, (byte) 0xf1, 0x7f, 0x73, (byte) 0xa7, (byte) 0x9d, (byte) 0xde, (byte) 0xc7, (byte) 0x88, 0x57, 0x51,
-- (byte) 0x84, (byte) 0xed, (byte) 0x96, (byte) 0xfb, (byte) 0xe1, 0x38, (byte) 0xef, 0x08, 0x2b, (byte) 0xf3,
-- (byte) 0xc7, (byte) 0xc3, 0x5d, (byte) 0xfe, (byte) 0xf9, 0x51, (byte) 0xe6, 0x29, (byte) 0xfc, (byte) 0xe5, 0x0d,
-- (byte) 0xa1, 0x0d, (byte) 0xa8, (byte) 0xb4, (byte) 0xae, 0x26, 0x18, 0x19, 0x4d, 0x6c, 0x0c, 0x3b, 0x12, (byte) 0xba,
-- (byte) 0xbc, 0x5f, 0x32, (byte) 0xb3, (byte) 0xbe, (byte) 0x9d, 0x17, 0x0d, 0x4d, 0x2f, 0x1a, 0x48, (byte) 0xb7,
-- (byte) 0xac, (byte) 0xf7, 0x1a, 0x43, 0x01, (byte) 0x97, (byte) 0xf4, (byte) 0xf8, 0x4c, (byte) 0xbb, 0x6a, (byte) 0xbc,
-- 0x33, (byte) 0xe1, 0x73, 0x1e, (byte) 0x86, (byte) 0xfb, 0x2e, (byte) 0xb1, 0x63, 0x75, (byte) 0x85, (byte) 0xdc,
-- (byte) 0x82, 0x6c, 0x28, (byte) 0xf1, (byte) 0xe3, (byte) 0x90, 0x63, (byte) 0x9d, 0x3d, 0x48, (byte) 0x8a, (byte) 0x8c,
-- 0x47, (byte) 0xe2, 0x10, 0x0b, (byte) 0xef, (byte) 0x91, (byte) 0x94, (byte) 0xb0, 0x6c, 0x4c, (byte) 0x80, 0x76, 0x03,
-- (byte) 0xe1, (byte) 0xb6, (byte) 0x90, (byte) 0x87, (byte) 0xd9, (byte) 0xae, (byte) 0xf4, (byte) 0x8e, (byte) 0xe0,
-- (byte) 0x9f, (byte) 0xe7, 0x3a, 0x2c, 0x2f, 0x21, (byte) 0xd4, 0x46, (byte) 0xba, (byte) 0x95, 0x70, (byte) 0xa9, 0x5b,
-- 0x20, 0x2a, (byte) 0xfa, 0x52, 0x3e, (byte) 0x9d, (byte) 0xd9, (byte) 0xef, 0x28, (byte) 0xc5, (byte) 0xd1, 0x60,
-- (byte) 0x89, 0x68, 0x6e, 0x7f, (byte) 0xd7, (byte) 0x9e, (byte) 0x89, 0x4c, (byte) 0xeb, 0x4d, (byte) 0xd2, (byte) 0xc6,
-- (byte) 0xf4, 0x2d, 0x02, 0x5d, (byte) 0xda, (byte) 0xde, 0x33, (byte) 0xfe, (byte) 0xc1, 0x7e, (byte) 0xde, 0x4f, 0x1f,
-- (byte) 0x9b, 0x6e, 0x6f, 0x0f, 0x66, 0x71, 0x19, (byte) 0xe9, 0x43, 0x3c, (byte) 0x83, 0x0a, 0x0f, 0x28, 0x21, (byte) 0xc8,
-- 0x38, (byte) 0xd3, 0x4e, 0x48, (byte) 0xdf, (byte) 0xd4, (byte) 0x99, (byte) 0xb5, (byte) 0xc6, (byte) 0x8d, (byte) 0xd4,
-- (byte) 0xc1, 0x69, 0x58, 0x79, (byte) 0x82, 0x32, (byte) 0x82, (byte) 0xd4, (byte) 0x86, (byte) 0xe2, 0x04, 0x08, 0x63,
-- (byte) 0x87, (byte) 0xf0, 0x2a, (byte) 0xf6, (byte) 0xec, 0x3e, 0x51, 0x0f, (byte) 0xda, (byte) 0xb4, 0x67, 0x19, 0x5e,
-- 0x16, 0x02, (byte) 0x9f, (byte) 0xf1, 0x19, 0x0c, 0x3e, (byte) 0xb8, 0x04, 0x49, 0x07, 0x53, 0x02, 0x03, 0x01, 0x00, 0x01
-- };
--
- private static final String WINDOWS_ROOT = "Windows-ROOT";
-
- private static final String CURRENT_VERSION = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
-@@ -348,104 +311,6 @@ public class PlatformHookWindows impleme
- return ks;
- }
-
-- /**
-- * Removes potential insecure certificates installed with previous versions of JOSM on Windows.
-- * @throws NoSuchAlgorithmException on unsupported signature algorithms
-- * @throws CertificateException if any of the certificates in the Windows keystore could not be loaded
-- * @throws KeyStoreException if no Provider supports a KeyStoreSpi implementation for the type "Windows-ROOT"
-- * @throws IOException if there is an I/O or format problem with the keystore data, if a password is required but not given
-- * @since 7335
-- */
-- public static void removeInsecureCertificates() throws NoSuchAlgorithmException, CertificateException, KeyStoreException, IOException {
-- // We offered before a public private key we need now to remove from Windows PCs as it might be a huge security risk (see #10230)
-- PublicKey insecurePubKey = null;
-- try {
-- insecurePubKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(INSECURE_PUBLIC_KEY));
-- } catch (InvalidKeySpecException | NoSuchAlgorithmException e) {
-- Logging.error(e);
-- return;
-- }
-- KeyStore ks = getRootKeystore();
-- Enumeration<String> en = ks.aliases();
-- Collection<String> insecureCertificates = new ArrayList<>();
-- while (en.hasMoreElements()) {
-- String alias = en.nextElement();
-- // Look for certificates associated with a private key
-- if (ks.isKeyEntry(alias)) {
-- try {
-- ks.getCertificate(alias).verify(insecurePubKey);
-- // If no exception, this is a certificate signed with the insecure key -> remove it
-- insecureCertificates.add(alias);
-- } catch (InvalidKeyException | NoSuchProviderException | SignatureException e) {
-- // If exception this is not a certificate related to JOSM, just trace it
-- Logging.trace(alias + " --> " + e.getClass().getName());
-- Logging.trace(e);
-- }
-- }
-- }
-- // Remove insecure certificates
-- if (!insecureCertificates.isEmpty()) {
-- StringBuilder message = new StringBuilder("<html>");
-- message.append(tr("A previous version of JOSM has installed a custom certificate "+
-- "in order to provide HTTPS support for Remote Control:"))
-- .append("<br><ul>");
-- for (String alias : insecureCertificates) {
-- message.append("<li>")
-- .append(alias)
-- .append("</li>");
-- }
-- message.append("</ul>")
-- .append(tr("It appears it could be an important <b>security risk</b>.<br><br>"+
-- "You are now going to be prompted by Windows to remove this insecure certificate.<br>"+
-- "For your own safety, <b>please click Yes</b> in next dialog."))
-- .append("</html>");
-- JOptionPane.showMessageDialog(Main.parent, message.toString(), tr("Warning"), JOptionPane.WARNING_MESSAGE);
-- for (String alias : insecureCertificates) {
-- Logging.warn(tr("Removing insecure certificate from {0} keystore: {1}", WINDOWS_ROOT, alias));
-- try {
-- ks.deleteEntry(alias);
-- } catch (KeyStoreException e) {
-- Logging.log(Logging.LEVEL_ERROR, tr("Unable to remove insecure certificate from keystore: {0}", e.getMessage()), e);
-- }
-- }
-- }
-- }
--
-- @Override
-- public boolean setupHttpsCertificate(String entryAlias, KeyStore.TrustedCertificateEntry trustedCert)
-- throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
-- KeyStore ks = getRootKeystore();
-- // Look for certificate to install
-- try {
-- String alias = ks.getCertificateAlias(trustedCert.getTrustedCertificate());
-- if (alias != null) {
-- // JOSM certificate found, return
-- Logging.debug(tr("JOSM localhost certificate found in {0} keystore: {1}", WINDOWS_ROOT, alias));
-- return false;
-- }
-- } catch (ArrayIndexOutOfBoundsException e) {
-- // catch error of JDK-8172244 as bug seems to not be fixed anytime soon
-- Logging.log(Logging.LEVEL_ERROR, "JDK-8172244 occured. Abort HTTPS setup", e);
-- return false;
-- }
-- if (!GraphicsEnvironment.isHeadless()) {
-- // JOSM certificate not found, warn user
-- StringBuilder message = new StringBuilder("<html>");
-- message.append(tr("Remote Control is configured to provide HTTPS support.<br>"+
-- "This requires to add a custom certificate generated by JOSM to the Windows Root CA store.<br><br>"+
-- "You are now going to be prompted by Windows to confirm this operation.<br>"+
-- "To enable proper HTTPS support, <b>please click Yes</b> in next dialog.<br><br>"+
-- "If unsure, you can also click No then disable HTTPS support in Remote Control preferences."))
-- .append("</html>");
-- JOptionPane.showMessageDialog(Main.parent, message.toString(),
-- tr("HTTPS support in Remote Control"), JOptionPane.INFORMATION_MESSAGE);
-- }
-- // install it to Windows-ROOT keystore, used by IE, Chrome and Safari, but not by Firefox
-- Logging.info(tr("Adding JOSM localhost certificate to {0} keystore", WINDOWS_ROOT));
-- ks.setEntry(entryAlias, trustedCert, null);
-- return true;
-- }
--
- @Override
- public X509Certificate getX509Certificate(NativeCertAmend certAmend)
- throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
---- a/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java
-+++ b/test/unit/org/openstreetmap/josm/io/remotecontrol/RemoteControlTest.java
-@@ -10,26 +10,13 @@ import java.io.InputStreamReader;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.nio.charset.StandardCharsets;
--import java.nio.file.Files;
--import java.nio.file.Paths;
- import java.security.GeneralSecurityException;
--import java.security.SecureRandom;
--import java.security.cert.X509Certificate;
--
--import javax.net.ssl.HostnameVerifier;
--import javax.net.ssl.HttpsURLConnection;
--import javax.net.ssl.SSLContext;
--import javax.net.ssl.TrustManager;
--import javax.net.ssl.X509TrustManager;
-
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- import org.openstreetmap.josm.JOSMFixture;
- import org.openstreetmap.josm.spi.preferences.Config;
--import org.openstreetmap.josm.tools.Logging;
--
--import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
- /**
- * Unit tests for Remote Control
-@@ -37,7 +24,6 @@ import edu.umd.cs.findbugs.annotations.S
- public class RemoteControlTest {
-
- private String httpBase;
-- private String httpsBase;
-
- /**
- * Starts Remote control before testing requests.
-@@ -46,65 +32,9 @@ public class RemoteControlTest {
- @Before
- public void setUp() throws GeneralSecurityException {
- JOSMFixture.createUnitTestFixture().init();
-- RemoteControl.PROP_REMOTECONTROL_HTTPS_ENABLED.put(true);
-- deleteKeystore();
-
- RemoteControl.start();
-- disableCertificateValidation();
- httpBase = "http://127.0.0.1:"+Config.getPref().getInt("remote.control.port", 8111);
-- httpsBase = "https://127.0.0.1:"+Config.getPref().getInt("remote.control.https.port", 8112);
-- }
--
-- /**
-- * Deletes JOSM keystore, if it exists.
-- */
-- public static void deleteKeystore() {
-- try {
-- Files.deleteIfExists(Paths.get(
-- RemoteControl.getRemoteControlDir()).resolve(RemoteControlHttpsServer.KEYSTORE_FILENAME));
-- } catch (IOException e) {
-- Logging.error(e);
-- }
-- }
--
-- /**
-- * Disable all HTTPS validation mechanisms as described
-- * <a href="http://stackoverflow.com/a/2893932/2257172">here</a> and
-- * <a href="http://stackoverflow.com/a/19542614/2257172">here</a>
-- * @throws GeneralSecurityException if a security error occurs
-- */
-- public void disableCertificateValidation() throws GeneralSecurityException {
-- // Create a trust manager that does not validate certificate chains
-- TrustManager[] trustAllCerts = new TrustManager[] {
-- new X509TrustManager() {
-- @Override
-- @SuppressFBWarnings(value = "WEAK_TRUST_MANAGER")
-- public X509Certificate[] getAcceptedIssuers() {
-- return new X509Certificate[0];
-- }
--
-- @Override
-- @SuppressFBWarnings(value = "WEAK_TRUST_MANAGER")
-- public void checkClientTrusted(X509Certificate[] certs, String authType) {
-- }
--
-- @Override
-- @SuppressFBWarnings(value = "WEAK_TRUST_MANAGER")
-- public void checkServerTrusted(X509Certificate[] certs, String authType) {
-- }
-- }
-- };
--
-- // Install the all-trusting trust manager
-- SSLContext sc = SSLContext.getInstance("TLS");
-- sc.init(null, trustAllCerts, new SecureRandom());
-- HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
--
-- // Create all-trusting host name verifier
-- HostnameVerifier allHostsValid = (hostname, session) -> true;
--
-- // Install the all-trusting host verifier
-- HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
- }
-
- /**
-@@ -124,15 +54,6 @@ public class RemoteControlTest {
- testListOfCommands(httpBase);
- }
-
-- /**
-- * Tests that sending an HTTPS request without command results in HTTP 400, with all available commands in error message.
-- * @throws Exception if an error occurs
-- */
-- @Test
-- public void testHttpsListOfCommands() throws Exception {
-- testListOfCommands(httpsBase);
-- }
--
- private void testListOfCommands(String url) throws IOException, ReflectiveOperationException {
- HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
- connection.connect();
---- a/test/unit/org/openstreetmap/josm/tools/PlatformHookOsxTest.java
-+++ b/test/unit/org/openstreetmap/josm/tools/PlatformHookOsxTest.java
-@@ -40,15 +40,6 @@ public class PlatformHookOsxTest {
- }
-
- /**
-- * Test method for {@code PlatformHookOsx#setupHttpsCertificate}
-- * @throws Exception if an error occurs
-- */
-- @Test
-- public void testSetupHttpsCertificate() throws Exception {
-- assertFalse(hook.setupHttpsCertificate(null, null));
-- }
--
-- /**
- * Test method for {@code PlatformHookOsx#afterPrefStartupHook}
- */
- @Test
---- a/test/unit/org/openstreetmap/josm/tools/PlatformHookWindowsTest.java
-+++ b/test/unit/org/openstreetmap/josm/tools/PlatformHookWindowsTest.java
-@@ -10,8 +10,6 @@ import static org.junit.Assert.fail;
-
- import java.io.File;
- import java.io.IOException;
--import java.security.KeyStore;
--import java.security.KeyStore.TrustedCertificateEntry;
- import java.security.KeyStoreException;
- import java.util.Collection;
-
-@@ -19,8 +17,6 @@ import org.junit.BeforeClass;
- import org.junit.Test;
- import org.openstreetmap.josm.JOSMFixture;
- import org.openstreetmap.josm.Main;
--import org.openstreetmap.josm.io.remotecontrol.RemoteControlHttpsServer;
--import org.openstreetmap.josm.io.remotecontrol.RemoteControlTest;
-
- /**
- * Unit tests of {@link PlatformHookWindows} class.
-@@ -60,45 +56,6 @@ public class PlatformHookWindowsTest {
- fail("Expected KeyStoreException");
- } catch (KeyStoreException e) {
- Logging.info(e.getMessage());
-- }
-- }
-- }
--
-- /**
-- * Test method for {@code PlatformHookWindows#removeInsecureCertificates}
-- * @throws Exception if an error occurs
-- */
-- @Test
-- public void testRemoveInsecureCertificates() throws Exception {
-- if (Main.isPlatformWindows()) {
-- PlatformHookWindows.removeInsecureCertificates();
-- } else {
-- try {
-- PlatformHookWindows.removeInsecureCertificates();
-- fail("Expected KeyStoreException");
-- } catch (KeyStoreException e) {
-- Logging.info(e.getMessage());
-- }
-- }
-- }
--
-- /**
-- * Test method for {@code PlatformHookWindows#setupHttpsCertificate}
-- * @throws Exception if an error occurs
-- */
-- @Test
-- public void testSetupHttpsCertificate() throws Exception {
-- RemoteControlTest.deleteKeystore();
-- KeyStore ks = RemoteControlHttpsServer.loadJosmKeystore();
-- TrustedCertificateEntry trustedCert = new KeyStore.TrustedCertificateEntry(ks.getCertificate(ks.aliases().nextElement()));
-- if (Main.isPlatformWindows()) {
-- hook.setupHttpsCertificate(RemoteControlHttpsServer.ENTRY_ALIAS, trustedCert);
-- } else {
-- try {
-- hook.setupHttpsCertificate(RemoteControlHttpsServer.ENTRY_ALIAS, trustedCert);
-- fail("Expected KeyStoreException");
-- } catch (KeyStoreException e) {
-- Logging.info(e.getMessage());
- }
- }
- }
---- a/josm-latest.jnlp
-+++ b/josm-latest.jnlp
-@@ -19,7 +19,7 @@
- <all-permissions/>
- </security>
- <resources>
-- <java version="1.8+" max-heap-size="2048m" java-vm-args="--add-modules=java.activation,java.se.ee --add-exports=java.base/sun.security.util=ALL-UNNAMED --add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED --add-exports=javafx.graphics/com.sun.javafx.application=ALL-UNNAMED --add-exports=jdk.deploy/com.sun.deploy.config=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.desktop/javax.imageio.spi=ALL-UNNAMED --add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED"/>
-+ <java version="1.8+" max-heap-size="2048m" java-vm-args="--add-modules=java.activation,java.se.ee --add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED --add-exports=javafx.graphics/com.sun.javafx.application=ALL-UNNAMED --add-exports=jdk.deploy/com.sun.deploy.config=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.desktop/javax.imageio.spi=ALL-UNNAMED --add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED"/>
- <jar href="josm-latest.jar"/>
- <property name="java.util.Arrays.useLegacyMergeSort" value="true"/>
- </resources>
---- a/josm.jnlp
-+++ b/josm.jnlp
-@@ -19,7 +19,7 @@
- <all-permissions/>
- </security>
- <resources>
-- <java version="1.8+" max-heap-size="2048m" java-vm-args="--add-modules=java.activation,java.se.ee --add-exports=java.base/sun.security.util=ALL-UNNAMED --add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED --add-exports=javafx.graphics/com.sun.javafx.application=ALL-UNNAMED --add-exports=jdk.deploy/com.sun.deploy.config=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.desktop/javax.imageio.spi=ALL-UNNAMED --add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED"/>
-+ <java version="1.8+" max-heap-size="2048m" java-vm-args="--add-modules=java.activation,java.se.ee --add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED --add-exports=javafx.graphics/com.sun.javafx.application=ALL-UNNAMED --add-exports=jdk.deploy/com.sun.deploy.config=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.desktop/javax.imageio.spi=ALL-UNNAMED --add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED"/>
- <jar href="josm-tested.jar"/>
- <property name="java.util.Arrays.useLegacyMergeSort" value="true"/>
- </resources>
=====================================
debian/patches/series
=====================================
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -7,4 +7,3 @@
07-use_system_fonts.patch
08-use_noto_font.patch
09-no-java-8.patch
-remove_https_remote_control2.patch
View it on GitLab: https://salsa.debian.org/debian-gis-team/josm/commit/7c40dd1d09af196a260d5bf235812655e66cf4f0
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/josm/commit/7c40dd1d09af196a260d5bf235812655e66cf4f0
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20180703/0e49c242/attachment-0001.html>
More information about the Pkg-grass-devel
mailing list