Skip to main content

2 posts tagged with "문제"

View All Tags

· 4 min read

아래와 같은 단순한 구조를 가진 service에서 android app (Phonegap)이 AJAX로 API server와 SSL 통신을 하고 있다. SSL 설정은 reverse proxy 역할을 하는 NginX에 되어 있는 상태였는데 개발단계에서는 나타나지 않았던 문제가 app publish 이후에 발생해서 현상과 해결책을 정리해본다.

android_ssl

 

1. 현상

App에서 API call을 했는데도 오류나 정상 응답이 떨어지지 않는다. API server 쪽에서 로그를 확인해보니 호출된 기록이 없다. 전혀 호출되지 않는다고 판단할 수 있었다. 혹시나 싶어서 NginX의 로그도 확인해봤는데 access 자체를 하지 않는 것으로 보였다. (호출 후 access log, error log 모두 기록되는게 없음)

두번째 이상한 현상은 android app의 manifest에서 debuggable 설정에 따라 API 호출이 되거나 되지 않는다는 사실이었다. debuggable이 true (debug mode)인 경우에는 API 호출에 문제가 없었는데 publish를 위해 packaging 하려고 debuggable을 false로 바꾸면 호출이 불가능했다.

 

2. 조사

Stackoverflow에서 힌트를 찾았는데 자문자답한 사용자의 얘기로는 android app의 debug mode에서는 인증서 확인을 하지 않는데 그렇지 않은 경우 SSL 인증서를 엄격하게 검사한다고 한다. (http://stackoverflow.com/questions/14363994/android-debuggable-false-causing-jquery-ajax-post-to-fail-in-cordova-phonegap-ec) 그래서 링크된 ssl checker로 API service되는 url (NginX가 처음 받는 url)을 검사해봤더니 다른건 문제가 없었는데 인증서 체인이 제대로 되어있지 않았다. Root CA 인증서가 없다는 내용의 메세지와 함께.

 

3. 해결

Startssl에서 인증서를 발급받아 사용하고 있었는데 생각해보니 도메인에 대한 인증서와 그에 맞는 private key는 발급받았는데 startssl(CA)에 대한 인증서는 없었다. Startssl에서 안내하는대로 ca.pem, sub.class1.server.ca.pem을 추가로(내가 사용하는게 startssl의 class1 certificate) 받아서 기존의 인증서를 합쳐 인증서 체인을 만들고 NginX에 설정했다. (https://www.startssl.com/?app=42)

설정 이후에 다시 SSL 검사를 해보니 아래처럼 문제있던 부분이 정상. Android app도 수정없이 제대로 호출되는 걸 확인했다.

ssl_check

 

 

4. 결론

나의 경우엔 CA의 인증서 하나를 누락한 경우지만 개발할 때 self sign된 인증서를 사용하는 경우도 있는데 이 경우에도 publish 할 때에는 반드시 교체해야 한다. 이 부분은 사실 개발할 때 문제가 없었기 때문에 간과하고 넘어가기 쉬운 부분인데 publish 이전에 packaging 해서 한 번 확인은 해봐야 할 것 같다. 아니면 Android developer site에서 발견한 StrictMode class를 이용하는 것도 방법이 될 수 있을 것 같다. (http://developer.android.com/reference/android/os/StrictMode.html)

· 3 min read

어느 날 내가 계획하던 한가지가 틀어졌다. 연달아 또 다른 무언가가 엉켰다. 일상적인, 어찌보면 당연한 현상이지만 내 성격은 이런 몇가지 일들로 자극을 받기 시작하며 곧 모든게 복잡해지곤 한다. 이런 상황이 만들어지면 쉬고 싶다. 집으로 돌아오며 생각을 했다. 머리가 아파 핸드폰을 만지작댔고 결국은 오래도록 짬짬이 하던 게임을 시작했다. 디펜스 게임. 어떤 stage를 끝내지 못해 몇 번이고 시도했었다. 무기도 바꿔보고 위차도 바꿨으며 전략도 수정했다. 그래도 이길 수가 없었다. 그렇게 또 시도해보려고 실행했던 게임을 보면서 그리고 나를 보면서, 오늘을 돌이켰다. 우습게도 작은 게임, 그것도 자주 하지 않던, 게임을 하면서 정확히는 쉽지 않은 그 것을 지나가기 위해 신경쓰는 나를 보면서 많은 생각을 했다. 내가 마주치는 문제들도 게임 속 깨지지 않는 stage와 비슷하다. 게임에서는 전략도 바꿔가면서 천천히 지속적으로 시도했다. 매번 실패했지만 빠르게 실패하고 얻는게 있었다. 내가 마주한 문제들도 마찬가지가 아닐까? 어렵다. 그리고 힘들다. 하지만 지속적으로 방법과 전략을 바꿔가며 시도하면 성과가 있지 않을까? 인생은 게임이라고 하지만 진짜 게임처럼 저장이 된다던가 원하는대로 그만둘 수 있는 것은 아니다. 하지만 즐기자. 그리고 계속 도전하자. 접근 방법을 바꿔가면서 말이다.