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 API는 sun.security.tools.jarsigner.Main와 오래된 tools.jar 배치를 피합니다. 예제는 HTTP TSA를 사용합니다. HTTPS TSA에는 HTTPS 경로와 일반적인 검증 및 인증 정책도 필요합니다.

관련 글