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 پرهیز می‌کند. نمونه از TSA روی HTTP استفاده می‌کند؛ TSA روی HTTPS نیز مسیر HTTPS خود و سیاست معمول بررسی و احراز هویت را نیاز دارد.

مقالات مرتبط