System.setProperty("http.proxyHost", "proxy.example");
System.setProperty("http.proxyPort", "8080");

java.net.Authenticator.setDefault(new java.net.Authenticator() {
    @Override
    protected java.net.PasswordAuthentication getPasswordAuthentication() {
        if (getRequestorType() == RequestorType.PROXY
                && "proxy.example".equalsIgnoreCase(getRequestingHost())
                && getRequestingPort() == 8080) {
            return new java.net.PasswordAuthentication(
                proxyUser, proxyPassword.toCharArray());
        }
        return null;
    }
});

var signer = new jdk.security.jarsigner.JarSigner.Builder(signingEntry)
    .tsa(java.net.URI.create("http://tsa.example/"))
    .build();

signingEntry est le KeyStore.PrivateKeyEntry existant. Fournissez les valeurs du compte proxy depuis la source d'identifiants de l'application, puis utilisez ce signataire dans son flux de travail habituel ZipFile et flux de sortie.

Le prédicat de type de demandeur maintient l'authentification du proxy et de la destination séparées et empêche un défi de destination de recevoir le mot de passe du proxy ; l'hôte et le port limitent l'intermédiaire.

Les propriétés système et l'Authenticator par défaut affectent toute la JVM. Fixez leur durée de vie au démarrage au lieu de les permuter autour de tâches concurrentes.

L'API publique jdk.security.jarsigner évite sun.security.tools.jarsigner.Main et les anciennes dispositions tools.jar. L'exemple utilise un TSA HTTP ; un TSA HTTPS a aussi besoin de sa route HTTPS et de la politique habituelle de vérification et d'authentification.

Articles similaires