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 كله. اضبط عمرها عند بدء التشغيل بدل تبديلها حول مهام متزامنة.

تتجنب واجهة jdk.security.jarsigner العامة sun.security.tools.jarsigner.Main وتخطيطات tools.jar القديمة. يستخدم المثال TSA عبر HTTP؛ ويحتاج TSA عبر HTTPS أيضاً إلى مساره الآمن وسياسة التحقق والمصادقة المعتادة.

مقالات ذات صلة