Eclipse에서 기본 API를 사용하여 HTTPS를 통해 서버에 연결하고 있습니다. 내 키 저장소에 연결된 인증서가 있습니다. 그러나 Windows는 그것을 좋아하지 않으며 certificate chaining error
을 던집니다. 우분투에서는 실제로 잘 작동합니다!Java 및 Windows - HTTPS를 통한 인증 문제
이제 Windows에서 나는 모든 인증서를 사용할 수있는 TrustManager
을 기본적으로 생성하는 "해킹"을 보았습니다. 당분간 이것은 괜찮습니다. 나중에 다시 돌아올거야.하지만 내 현재 문제는 내 코드가 서버에 연결하고 uc.setRequestProperty("Authorization", "Basic " + encodedLogin);
을 사용하여 인증하지만 내 양식에 대한 HTML 코드를 반환한다는 것입니다. 실제로는 처음에 로그인하는 것으로 생각했습니다. . 그 라인이 없으면 나는 403
이된다.
브라우저에서 사이트에 갔을 때 로그인 상자가 나타납니다. 로그인했을 때 문제없이 로그인했습니다. Cancel
을 클릭하고 로그인 상자를 닫으면 코드가 반환하는 정확한 HTML 양식으로 이동했습니다. 따라서이 팝업 상자에 어떻게 든 로그인해야하거나 웹 양식에 로그인하기 위해 두 번째 인증을해야합니다. 나는 충분히 명확한 설명이 그것 희망한다.
내 궁극적 인 목표는 분명히 로그인하여 사이트와의 추가 통신을 위해 인증 객체를 내 코드로 돌려 보내는 것입니다. 나는이 작은 딱딱한 부분에 며칠 동안 붙어있다! 어떤 도움이라도 대단히 감사합니다 !!
본인의 코드와 HTML 양식의 코드를 첨부했습니다.
감사합니다.
내 코드 :
try
{
String login = "MyUser:MyPass";
byte[] encodedLogin = new Base64().encode(login.getBytes());
StringBuilder parsedContentFromUrl = new StringBuilder();
HttpsURLConnection uc = (HttpsURLConnection) webURL.openConnection();
//uc.setRequestProperty("Proxy-Authorization", "Basic " + encodedLogin);
uc.setRequestProperty("Authorization", "Basic " + encodedLogin);
//uc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
uc.connect();
//uc.getInputStream();
BufferedInputStream in = new BufferedInputStream(uc.getInputStream());
//System.out.println(uc.getRequestProperty("WWW-Authenticate"));
int ch;
while ((ch = in.read()) != -1) {
parsedContentFromUrl.append((char) ch);
}
System.out.println(parsedContentFromUrl);
}
catch (IOException e)
{
System.out.println("IOException::"+e.getMessage());
e.printStackTrace();
}
HTML 웹 양식
<FORM METHOD=POST ACTION="/mylogin.form">
<FONT SIZE="+2">
<TABLE BORDER="0" WIDTH="400">
<TR>
<TD ALIGN="LEFT"><UL><LI>Username</LI></UL></TD>
<TD><INPUT NAME="username" SIZE="15"></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><UL><LI>Password</LI></UL></TD>
<TD><INPUT TYPE="PASSWORD" NAME="password" SIZE="15"></TD>
</TR>
</TABLE>
</FONT>
<INPUT TYPE="HIDDEN" NAME="login-form-type" VALUE="pwd">
<BR><INPUT TYPE="SUBMIT" VALUE="Login">
</FORM>
인증 체인은 유효한 인증 기관에서 그 아래 특정 인스턴스까지의 체인입니다. 예 : 인증서를 서명 한 SectionB 인증서에 서명 한 CompanyZ 인증서에 서명하는 Verisign. 표준 호환 응용 프로그램을 사용하면 부인할 수 있습니다. – Alfabravo
주석 주셔서 감사하지만 내 코드는 우분투에서 작동합니다. 내가 아는 한 내 질문의 그 부분은 Windows keytool/keystore 문제입니다. 다음 주에 다시 보도록하겠습니다. – eoinzy