안드로이드 https 에서 개인 인증서 추가하기
여기서 핵심은 실제로 추가하는 것이 아니라, keystore 를 직접 만들어서 이 keystore 에 인증서를 담고, https 통신을 하는 것이다.pc에서 인증서 추가시
기본적으로 우리가 local pc 에 인증서를 추가한다면, 여기에 나온 것처럼 runtime 에서 사용하는 cert 에 추가하면 된다. 이것은 우리가 마음대로 접근할 수 있어서 그냥 넣을 수 있다.그런데 android 는 이부분이 기본적으로 막혀있다. 우리는 dalvik runtime 을 마구 건들 수 없다. 적어도 rooting 을 하지 않는다면 말이다. 물론 이 부분이 Android version 4.0 이후 달라졌다.
app 에서 개인이 만든 인증서 사용시
그리고 또 하나, 우리가 만약 application 을 만들어서 배포하는데, 공인된 인증서가 아닌 다른 녀석을 쓴다면 문제가 된다. 이녀석을 인증하기 위해서 runtime 에서 사용하는 cert 를 확인할 텐데, 이녀석을 우리가 수정할 수가 없다.그래서 이것을 중간에서 다른 녀석이 해주는 것이다. 그것이 아래 링크에서 하는 이야기이다.
- Security with HTTPS and SSL > Unknown certificate authority | http://developer.android.com/
- HTTPS with Client Certificates on Android - Chariot Solutions
1 번째 방법에서는 DER format 으로 된 certificate 을 불러오고, 이 녀석을 keystore 에 넣는 과정을 거친다.
2번째 글에서는 다양한 방법을 보여주는데, 1번째와 같은 방법도 소개한다. 그런데 여기서 사용하는 소스를 볼 수 있어서 훨씬 이해하고, 사용하기 좋은 듯 하다.
See Also
위 링크에선 각 저장포맷에 대한 정보를 얻을 수 있다. PEM -> PKCS#12 로 변환 하는 법도 알려준다. 기본적으로 안드로이드는 java key store .jks를 사용한다. (KeyStore | Android Developers)
pem -> pkcs#12
# openssl pkcs12 -export -in dummy-cert.pem -inkey dummy-key.pem -out dummy-certkey.p12 Enter Export Password: Verifying - Enter Export Password:
pem -> der
# openssl rsa -inform PEM -outform DER -in dummy-key.pem -out dummy-key.der
# openssl x509 -inform PEM -outform DER -in dummy-cert.pem -out dummy-cert.der
Reference
- src/com/android/volley/toolbox/HurlStack.java
- Security with HTTPS and SSL > Unknown certificate authority
- HTTPS with Client Certificates on Android - Chariot Solutions
댓글 없음:
댓글 쓰기