Setări proxy pentru cererile de marcă temporală în API-ul JarSigner din Java 9+
Folosiți configurarea publică JarSigner din Java 9+ cu verificări ale solicitantului, gazdei și portului proxy în locul claselor de comenzi interne.
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.