안드로이드에서 SSL 통신시 클라이언트 인증서 사용하는법을 찾아서
일주일동안 고생했다.
인터넷에 하두 많은 자료들이 있지만, 내 경우에는 잘 안되더라.
겨우겨우 찾아낸 방법. 휴~ 힘들다.
* 인증서 : comodo 에서 결제해서 받았음.
_wildcard_도메인.pfx 파일을 확장자를 .p12로 바꿔서 안드로이드의 raw 폴더에 넣는다.
이 인증서의 비밀번호 알고 있어야 한다.
* 안드로이드 소스. SSLContext 생성하는 함수
private SSLContext doGetSSLContext()
{
SSLContext sslContext = null;
InputStream caInput = this.context.getResources().openRawResource(R.raw._wildcard_storyand_com);
try
{
// 클라이언트 인증서를 로드한다.
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(caInput, "인증서비밀번호".toCharArray());
// 클라이언트 인증서를 이용해서 KeyManager를 만든다.
String kmfAlgorithm = KeyManagerFactory.getDefaultAlgorithm();
KeyManagerFactory kmf = KeyManagerFactory.getInstance(kmfAlgorithm);
kmf.init(keyStore, null);
// 클라이언트 인증서를 이용해서 TrustManager를 만든다.
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
// TrustManager 와 KeyManager를 이용해서 SSLContext 를 생성한다.
sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
}
catch(Exception exp)
{
lib_common.doLog("*** lib_http... doGetSSLContext..." + exp.toString());
sslContext = null;
}
return sslContext;
}
* 안드로이드 소스. SSLContext 사용하는법
// 서버 연결
URL url = new URL(this.sURL);
HttpURLConnection conn = null;
// http 일대
if(this.sURL.startsWith("http://"))
{
conn = (HttpURLConnection)url.openConnection();
}
// https 일대
if(this.sURL.startsWith("https://"))
{
// SSLContext 생성
SSLContext sslContext = doGetSSLContext();
conn = (HttpsURLConnection)url.openConnection();
((HttpsURLConnection)conn).setSSLSocketFactory(sslContext.getSocketFactory());
}
... 이후는 일반적인 통신 방법과 동일함.
'Android 초보' 카테고리의 다른 글
Barcode 이미지 생성하기 (1) | 2016.08.26 |
---|---|
AndroidStudio1.5.1 transformClassesWithDexForDebug 오류 (0) | 2016.02.12 |
HTTPS with Client Certificates on Android (0) | 2016.01.26 |
LocalBroadcastManager (0) | 2015.12.21 |
안드로이드. 바코드. zxing library (0) | 2015.12.15 |