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 este KeyStore.PrivateKeyEntry existent. Furnizați valorile contului proxy din sursa de acreditări a aplicației, apoi folosiți acest semnatar în fluxul său obișnuit ZipFile și flux de ieșire.

Predicatul tipului de solicitant ține autentificarea proxy și a destinației separate, împiedicând ca o provocare a destinației să primească parola proxy; gazda și portul restricționează intermediarul.

Proprietățile de sistem și Authenticatorul implicit afectează întreaga JVM. Stabiliți durata lor de viață la pornire în loc să le comutați în jurul sarcinilor concurente.

API-ul public jdk.security.jarsigner evită sun.security.tools.jarsigner.Main și vechile dispuneri tools.jar. Exemplul folosește TSA HTTP; TSA HTTPS are nevoie și de ruta sa HTTPS și de politica obișnuită de verificare și autentificare.

Articole similare