Налаштування проксі для запитів позначки часу в Java 9+ JarSigner API
Використовуйте публічне налаштування JarSigner у Java 9+ з перевірками запитувача, хоста й порту проксі замість внутрішніх класів команд.
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 — це наявний KeyStore.PrivateKeyEntry. Передайте значення облікового запису проксі з джерела облікових даних застосунку, потім використовуйте цей підписувач у його звичайному робочому потоці ZipFile і вихідного потоку.
Присудок типу запитувача тримає автентифікацію проксі й призначення окремо та не дає виклику призначення отримати пароль проксі; хост і порт обмежують посередника.
Системні властивості й типовий Authenticator впливають на всю JVM. Встановлюйте їхній час життя під час запуску, а не перемикайте навколо паралельних завдань.
Публічний API jdk.security.jarsigner уникає sun.security.tools.jarsigner.Main і старих схем tools.jar. Приклад використовує HTTP TSA; для HTTPS TSA також потрібні власний HTTPS-маршрут і звичайна політика перевірки та автентифікації.