הגדרות פרוקסי ב-JarSigner API של Java 9+ לבקשות חותמת זמן
השתמשו בהגדרת 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 שלו ולמדיניות האימות וההסמכה הרגילה.