C# https 로그인 질문2

안녕하세요

초보 코더인데 https 문제를 해결하지 못해 가능한 많은 정보를 덧붙여 문의 드립니다

고수분께서 해결 방향이라도 알려주시면 감사하겠습니다.

o접속 사이트: 사설아이피로 구성된 사내망 단말 https://172.16.x.x

  • 단말 접속시 로그인 정보를 내부적으로 확인후 미 로그인시 창 팝업 뛰음(사용자이름, 비밀번호 입력 필요)

  • 로그인창 팝업이 뜨는데 F12키로 관련 소스나 팝업 정보를 알 수 없음

o에러 메시지 : System.Net.WebException:‘작업 시간이 초과되었습니다’ (아패 코드에서 라인 바이 라인으로 실행시 에러 부분 표기)

o생각: 제가 초보라 간단한 http 읽기는 할 수 있는데, https 에서 한 달째 헤매고 있습니다. 저는 웹에서 어떤 내용이라도 읽어오면 그걸 기반으로 대응하는 코드를 작성하려 생각합니다. 그런데, https에서 응답을 주지않고 에러만 발생하는데, 원인이 로그인을 하지 않아서 인지, 인증서 문제인지 알수가 없습니다.

o https 자체 작성 코드

string strurl = “https://172.16.x.x

StringBuilder dataparams = new StringBuilder();

byte[] bytedataparams = UTF8Encoding.UTF8.GetBytes(dataparams.ToString());

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strurl);

request.Method = “POST”

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;

ServicePointManager.ServerCertificateValidationCallback = delegate {return true;};

request.ContentType = “application/x-www-form-urlencoded”;

request.ContentLength = bytedataparams.Length;

Stream stdataparams = request.GetRequestStream();

stdataparams.Write(bytedataparams, 0, bytedataparams.Lenght);

stdataparams.Close();

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); —> System.Net.WebException:‘작업 시간이 초과되었습니다’

Stream streaddata = response.GetResponseStream();

StreamReader srreaddata = new StreamReader(streaddata, Encoding.Default);

string strresult = srreaddata.ReadToEnd();

https라고
일반 web request를 하는것과 다르지 않습니다.

궁금한점이 인증 부분이 필요하다고 하셨는데 이 부분이 웹서버 계정 인증 형식으로 되어 있는지

일반 자체적은 인증 형식으로 되어 있는지 궁금합니다.

  • 보통 서버 계정 인증 형식인 경우 브라우저에서 자체적으로 아이디와 패스워드를 요구하는 창이 표시됩니다.

해당 웹 페이지가 서버 계정 인증인 경우 request시 해당 웹 서버에 맞는 네트워크 자격증명을 추가해야 합니다.

HttpWebRequest.Credentials 속성으로 설정 가능합니다.

해당 자격증명이 맞지 않는 경우 서버에서는 아무런 응답을 주지 않기 때문에 타임아웃 이후 응답 오류로 나올 것입니다.
(라인 별로 천천히 디버깅시에는 디버깅중 요청응답 시간이 지났기 때문에 아마 ‘작업 시간이 초과되었습니다’ 오류 메세지가 표시 됬을 것 같습니다.)

위 서버 계정 인증방식이 아닌 경우 인증을 하지 않고 요청해도
이는 오류가 아닌 정상 요청으로
해당 웹에서 렌더링 되서 표시되는 html이 정상 응답코드와 함께 response됩니다.

아래와 같은 방식으로 로그인 정보를 넣었는데, 동일하게 작업 시간 초과로 에러가 나옵니다.

request.Credentials = new NetworkCredential(UserName, PassWord);

c# 코드

코드는 다음과 같습니다.
안되는 원인을 모르니 답답하네요

피들러 같은 웹캡쳐 툴로

실제 브라우저에서 잘 동작 되었을때 헤더와 기타 정보 보고

똑같이 동일하게 맞추고 요청해 보세요.


피들러 설치하고 아래와 같은 정보를 얻었는데, 이걸 어덯게 활용할 수 있을까요?


피들러 통해 보니 https decryption is disabled 메시지가 나오네요

제가 너무 기초가 없는게 맞습니다.

사내에서 자체적으로 개발하려 하다보니 어려움이 있습니다.

telnet, ssh, http 등으로 접속하여 정보를 얻어 오는 것은 그럭저럭 만들어서 편리하게 사용하고 있습니다.

c# 으로 https 접속하는 좋은 책이나 정보를 얻을 수 있는 곳이 있을까요?

이번 추석 연휴에 공부해서 해결하고자 합니다

피들러를 쓰실 때 https 에 대해서도 캡처하셔야 한다면 HTTPS 설정을 해야합니다.

image

이렇게 하세요

그리고 또한 네트워크에 대한 내용 자체가 워낙 방대해서 책으로 집대성이 불가능합니다.
필요하신 분야만 구글링하셔서 찾아보시면 관련 기사들이 나올 것 같습니다.
아마 책은 절대 없을 거 같고, 있더라도 외국도서일거라 추석 내에 책으로 학습은 불가능하실 거 같습니다.
.NET HTTP 관련 아티클을 많이 찾아보시는게 좋을 듯 합니다.

그리고 초보시니까 헷갈리실 수 있는데
WebClient, HttpWebRequest, HttpClient들은 모두 비슷비슷한 역할을 하니까 필요하신 기능 구현에 대해서 위 클래스들의 예제가 있다면 그냥 가져다 쓰시면 될 듯합니다.

감사합니다. 취미로 프로그래밍 하는 수준으로 소소한 재미를 느끼고 있습니다. 업무 개선을 위해 https 하려다 보니 생각보다 자료가 없고, 있어도 초보가 이해하기 어려운 수준이네요


위에 알려주신 설정 적용했더니, 피들러에서 접속 되었다고 나오네요
그럼 현재 문제는 접속이후 로그인이 안되거나, 읽어오기가 안되어 시간 초과가 되는 것 같습니다