Mobile-하이브리드앱

전자정부 모바일 하이브리드(Cordova/폰갭) 프레임워크에서 HTTPS(SSL)사용하기 - iOS

무한열정 2016. 8. 21. 15:41


전자정부에서 기본 배포되는 버전을 사용하면 다음과 같은 오류가 날수 있습니다.


2016-08-21 13:45:34.566 DeviceInfoGuide[3424:338118] network started

2016-08-21 13:45:34.618 DeviceInfoGuide[3424:338614] CFNetwork SSLHandshake failed (-9807)

2016-08-21 13:45:34.621 DeviceInfoGuide[3424:338118] error : Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date)" UserInfo={NSUnderlyingError=0x7866afa0 {Error Domain=NSOSStatusErrorDomain Code=-9807 "(null)"}, NSLocalizedDescription=A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date)}

2016-08-21 13:45:34.621 DeviceInfoGuide[3424:338118] network failed

2016-08-21 13:45:34.622 DeviceInfoGuide[3424:338118] error : Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date)" UserInfo={NSUnderlyingError=0x7866afa0 {Error Domain=NSOSStatusErrorDomain Code=-9807 "(null)"}, NSLocalizedDescription=A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date)}

2016-08-21 13:45:34.631 DeviceInfoGuide[3424:338118] Error in Success callbackId: InterfaceAPI449559228 : TypeError: undefined is not an object (evaluating 'data.deviceInfoList.length')


공인인증되지 않은 private 인증서를 사용하다보니 오류가 나오네요.

eGovComModule이라는 전자정부가 제공하는 통신 모듈을 약간 수정해 줘야 하는데요.

* 이게 ~~~.a로 되어 있는 static library로 배포되서 수정이 어렵습니다.

  그래서 다음처럼 하면 private 라이브러리를 사용한 WAS에서도 테스트가 가능합니다.


1. 전자정부 모바일 프레임워크 WIKI사이트에서 eGovComModule소스를 다운로드 받는다.

http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:hyb3.5:hrte:egovinterfaceapi



2. 다운로드 받은 eGovComModule소스를 압축을 푼후

     1) EGovComModule.xcodeproj를 끌어다 놓는다.

     2) libEGovComModule.a는 삭제한다.

  결과적으로 다음 그림과 같이 구성 한다.



3. 전자정부에서 제공한 eGovComModule이 컴파일되어 타켓에 포함될수 있도록 다음을 추가한다.

    1) 맨위의 프로젝트명을 클릭한다.

        General 탭 > Linked Framewroks and Libraries를 선택후

        [+]를 눌러 eGovComModule을 등록한다.



    2)  목록에서 eGovComModule를 선택하여 등록한다.



4. EGovComModule.xcodeproj > EGovComModule.m파일을 찾아서 수정한다.


    //TODO 설정값들 체크할 !!!!

    NSString *Encodingurl = [m_url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSURL *_url = [NSURL URLWithString:Encodingurl];

    __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:_url];

[ASIFormDataRequest setDefaultCache:[ASIDownloadCache sharedCache]];

[request addRequestHeader:@"User-Agent" value:@"eGovFrame"];

    [request addRequestHeader:@"Content-Type" value:@"text/xml;charset=utf-8;"];

[request setShouldStreamPostDataFromDisk:YES];

[request setValidatesSecureCertificate:NO];

[request setTimeOutSeconds:m_timeOutSeconds];


[request setValidatesSecureCertificate:NO];

다음을 추가하면 tomcat으로 만들 SSL URL이 Private인증서라서 오류가 나는문제를 해결핤수 있다.


* 다음처럼 서버와 SSL 통신하여 결과가 아주 잘 나옵니다. ^^