Java ପ୍ରକ୍ସିର 407 ତ୍ରୁଟି: CONNECT ପାଇଁ Basic ପ୍ରମାଣୀକରଣ ଯାଞ୍ଚ କରନ୍ତୁ
Java ପ୍ରବେଶ ତଥ୍ୟକୁ ନିର୍ଦ୍ଦିଷ୍ଟ ପ୍ରକ୍ସିରେ ସୀମିତ ରଖନ୍ତୁ ଏବଂ HTTPS CONNECT ଟନେଲ ପାଇଁ JDKର ଅଲଗା Basic ପ୍ରମାଣୀକରଣ ନୀତି ଯାଞ୍ଚ କରନ୍ତୁ।
ବାରମ୍ବାର 407 ଆସିବାର ଅର୍ଥ ସବୁବେଳେ Java ଭୁଲ ପାସୱାର୍ଡ ପଠାଇଛି ବୋଲି ନୁହେଁ। JDKର ସନ୍ଦର୍ଭ କାର୍ଯ୍ୟାନ୍ୱୟନ ସାଧାରଣତଃ HTTPS CONNECT ଟନେଲ ପାଇଁ Basic ପ୍ରମାଣୀକରଣ ବନ୍ଦ କରେ। କେବଳ Basic ଦେଉଥିବା ପ୍ରକ୍ସି ଆପଣଙ୍କ ପ୍ରମାଣୀକରଣ callback ପ୍ରବେଶ ତଥ୍ୟ ଦେବା ପୂର୍ବରୁ ପ୍ରତ୍ୟାଖ୍ୟାତ ହୋଇପାରେ।
ପ୍ରବେଶ ତଥ୍ୟ callbackର ପରିସର ସୀମିତ ରଖନ୍ତୁ
Java HTTP କ୍ଲାଏଣ୍ଟରେ ଏକ Authenticator ଯୋଡ଼ନ୍ତୁ ଏବଂ ଏହାକୁ ବିନ୍ୟାସ କରାଯାଇଥିବା ପ୍ରକ୍ସିରେ ସୀମିତ ରଖନ୍ତୁ:
String proxyHost = "203.0.113.10";
int proxyPort = 8080;
String password = System.getenv("PROXY_PASSWORD");
if (password == null) {
throw new IllegalStateException("Set PROXY_PASSWORD");
}
java.net.Authenticator auth = new java.net.Authenticator() {
@Override
protected java.net.PasswordAuthentication getPasswordAuthentication() {
if (getRequestorType() == RequestorType.PROXY
&& proxyHost.equals(getRequestingHost())
&& proxyPort == getRequestingPort()) {
return new java.net.PasswordAuthentication(
"proxy-user", password.toCharArray());
}
return null;
}
};
java.net.http.HttpClient client = java.net.http.HttpClient.newBuilder()
.proxy(java.net.ProxySelector.of(
new java.net.InetSocketAddress(proxyHost, proxyPort)))
.authenticator(auth)
.connectTimeout(java.time.Duration.ofSeconds(5))
.build();
ଏହା ଗୋଟିଏ କ୍ଲାଏଣ୍ଟର ସେଟଅପ କୋଡ୍, ବିଶ୍ୱବ୍ୟାପୀ ଡିଫଲ୍ଟ ପ୍ରମାଣୀକରଣକାରୀ ନୁହେଁ। ଦଲିଲ ପାଇଁ ଦିଆଯାଇଥିବା ଠିକଣା ବଦଳାନ୍ତୁ ଏବଂ ସେହି ସେବା ପାଇଁ ପ୍ରକୃତରେ ଦିଆଯାଇଥିବା ପ୍ରବେଶ ତଥ୍ୟ ବ୍ୟବହାର କରନ୍ତୁ। ଅନୁରୋଧକାରୀଙ୍କ ପ୍ରକାର ଓ ଏଣ୍ଡପଏଣ୍ଟ ଯାଞ୍ଚ ସେହି callbackକୁ ୱେବସାଇଟର ପ୍ରମାଣୀକରଣ ଆହ୍ୱାନରେ ଅସାବଧାନ ଭାବେ ପ୍ରକ୍ସି ଖାତା ଦେବାରୁ ରୋକେ।
ପ୍ରମାଣୀକରଣର କେଉଁ ପର୍ଯ୍ୟାୟ ବିଫଳ ହେଉଛି ଯାଞ୍ଚ କରନ୍ତୁ
ସାଧାରଣ HTTP ପ୍ରକ୍ସି ବ୍ୟବହାର ଓ CONNECT ଟନେଲ ପାଇଁ JDKରେ ବନ୍ଦ ପ୍ରମାଣୀକରଣ ସ୍କିମର ଅଲଗା ସେଟିଂ ଅଛି। ସମ୍ପର୍କିତ ନାମ ହେଉଛି jdk.http.auth.proxying.disabledSchemes ଏବଂ jdk.http.auth.tunneling.disabledSchemes।
ଏହି କାରଣରୁ HTTP ଟ୍ରାଫିକର ପ୍ରମାଣୀକରଣ ସଫଳ ହେଲେ ମଧ୍ୟ ସେହି ପ୍ରକ୍ସି ମାଧ୍ୟମରେ HTTPS ଟନେଲ ବିଫଳ ହୋଇପାରେ। ଅନ୍ୟ ମେସିନରେ ସମାନ କାର୍ଯ୍ୟକାରୀ ଡିଫଲ୍ଟ ଅଛି ବୋଲି ନଭାବି ରନଟାଇମର conf/net.properties ଓ ନିୟୋଜନ ନୀତି ଯାଞ୍ଚ କରନ୍ତୁ।
ବନ୍ଦ ସ୍କିମ ତାଲିକାକୁ ସର୍ବତ୍ର ଖାଲି କରିବା ପ୍ରକ୍ସି ସୁଧାରର ସାଧାରଣ ଉପାୟ ନୁହେଁ। ଏନକ୍ରିପ୍ଟ ହୋଇନଥିବା HTTP ପ୍ରକ୍ସିକୁ ପଠାଯାଇଥିବା Basic ପ୍ରବେଶ ତଥ୍ୟକୁ ଗନ୍ତବ୍ୟ ସହ ପରେ ତିଆରି TLS ସଂଯୋଗ ସୁରକ୍ଷା ଦିଏନାହିଁ। ପରିବର୍ତ୍ତନ ଅନୁମୋଦନ ପୂର୍ବରୁ ପ୍ରକ୍ସିର ପରିବହନ, ପ୍ରମାଣୀକରଣ ପଦ୍ଧତି ଏବଂ ନିୟୋଜନ ନୀତି ସମୀକ୍ଷା କରନ୍ତୁ।
JDKର ଅନ୍ତର୍ନିର୍ମିତ ପ୍ରମାଣୀକରଣର ଦଲିଲଭୁକ୍ତ ଆଚରଣ ମଧ୍ୟ ପ୍ରକ୍ସି ଘୋଷଣା କରୁଥିବା ପ୍ରତ୍ୟେକ ସ୍କିମର ସମର୍ଥନ ପାଇଁ ପ୍ରତିଶ୍ରୁତି ନୁହେଁ। ହାତରେ ଦିଆଯାଇଥିବା Authorization କିମ୍ବା Proxy-Authorization ହେଡର ସ୍ୱୟଂଚାଳିତ ପ୍ରମାଣୀକରଣକାରୀର ପ୍ରବାହ ବଦଳାଏ; ତେଣୁ callbackର ଆଚରଣ ଉଦାହରଣଠାରୁ ଭିନ୍ନ ହେଲେ କଷ୍ଟମ ହେଡର ଯାଞ୍ଚ କରନ୍ତୁ।