공통 웹사이트의 인증서 오류를 무시하고 http 결과 조회하기(WinInet 이용)
2015.03.06 22:38
고객사에서 웹서비스 연동 시 아래와 같이 인증서가 잘못된 경우 무시할 수 있는 방법을 요청해 공유합니다.
1, 서버 인증서 오류 내용
한글 : 이 웹 사이트의 보안 인증서에 문제가 있습니다
영문 : There is a problem with this website's security certificate - http://support.microsoft.com/kb/931850/
2, 영문으로 검색 시 아래와 같은 키워드를 찾았습니다.
WINHTTP_OPTION_SECURITY_FLAGS
SECURITY_FLAG_IGNORE_UNKNOWN_CA
SECURITY_FLAG_IGNORE_CERT_CN_INVALID
SECURITY_FLAG_IGNORE_CERT_DATE_INVALID
(https://msdn.microsoft.com/en-us/library/windows/desktop/aa384066(v=vs.85).aspx)
위의 플래그들이 잘못된 인증서를 무시하라는 옵션설정으로 보입니다.
3, 위 보안 플래그를 설정하는 데모
http://www.nldelphi.com/showthread.php?39901-Bad-cipher-melding
http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_26824117.html
위 링크를 참고해 첨부파일의 샘플을 만들어 보았습니다.
주요 코드는 아래와 같으며 WinInet을 이용하기 위해 uses 절에 "Winapi.WinInet"를 추가해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 | ReqFlags := ReqFlags or SECURITY_FLAG_IGNORE_UNKNOWN_CA or SECURITY_FLAG_IGNORE_CERT_CN_INVALID or SECURITY_FLAG_IGNORE_CERT_DATE_INVALID or SECURITY_FLAG_IGNORE_REVOCATION; // Set new flags if not (InternetSetOption(hReq, INTERNET_OPTION_SECURITY_FLAGS, @ReqFlags, dwSize)) then begin // Get error code dwError := GetLastError; // Failure MessageBox( 0 , PChar (IntToStr(dwError)), PChar ( 'Confirm' ), MB_OK or MB_ICONINFORMATION); end ; |
4, 테스트 & 결과
첫번째 버튼은 TIdHttp 컴포넌트로 https를 호출하고
두번째 버튼은 WinInet을 이용했습니다.
아쉽게도 인증서 오류가 발생한 환경이 없어 고객에게 테스트 요청했습니다. 결과가 오거나 테스트 환경을 찾게되면 테스트 후 결과를 추가하겠습니다.(기본 동작만 https를 제공하는 facebook에서 확인한 상태입니다.)