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 שלו ולמדיניות האימות וההסמכה הרגילה.

מאמרים קשורים