안드로이드 6.0 마시멜로우 SSL 소켓 통신 오류

1,803 views
Skip to first unread message

alchemist

unread,
Oct 19, 2015, 4:07:23 AM10/19/15
to Korea Spring User Group Q&A
안녕하세요. 스프링하고는 조금 상관없지만 도움이 필요합니다.
아시는 분 있으시면은 답변 부탁드립니다.

SSL Socket 통신이 안드로이드 6.0 이전에는 잘되었는데, 6.0 이후에는 서버와 통신에서 
handshake 에러가 납니다. 

안드로이드 6.0으로 올라가면서 openssl 라이브러리가 삭제 되고, boring SSL로 대처가 되었습니다.
이 부분에서 문제가 되는 것 같은데,

에러 로그는

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xdaa0a040: Failure in SSL library, usually a protocol error

10-16 14:32:27.390: W/System.err(31635): error:100c1069:SSL routines:ssl3_get_server_key_exchange:BAD_DH_P_LENGTH (external/boringssl/src/ssl/s3_clnt.c:1193 0xe7379547:0x00000000)

10-16 14:32:27.390: W/System.err(31635):    at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)

10-16 14:32:27.391: W/System.err(31635):    at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:324)


내용은 

해당 현상은 어플 서버와 SSL handshake fail 에 의해 발생한 내용입니다.

error cause BAD_DH_P_LENGTH M OS부터 SSL DH P key length에 대해 보안이 강화되어 1024 bits(128 bytes) 이상이 되야 합니다.

하지만 자체 테스트 패킷 로그 확인 결과 어플 서버에서 내려오는 DH P 96 bytes 입니다.


현재 Socket 서버는 자바 1.6.3 버전을 쓰고 있습니다. 

앱쪽의 문제가 아니라면, 서버쪽의 SSL Socket 라이브러리가 1024를 지원하지 않는 것인지, 그렇다면 자바 버전을 올려야하는 궁금합니다.


답변 부탁드립니다.

alchemist

unread,
Oct 20, 2015, 1:01:47 AM10/20/15
to Korea Spring User Group Q&A
자체 해결을 해서 답글을 남깁니다. 혹시 다른 분들 참고 바래요.

SSL 을 사용함에 있어서...cipher와 관련이 있습니다.

여러종류의 암호화 중에 세션키 암호화는 SSL Nego 과정에서 정해지게 되는데 ..

이때 JAVA 에서 DH(Diffie-Hellman) 알고리즘의 Cipher를 사용하게 될 경우,

768 bit로 사용되어지며, 이는 현재는 안전하지 않을 수 있는 key로 인식되어지고 있습니다.

JAVA 1.6 버전대에는 1024 bit의 암호를 지원하지 않아 JAVA 1.7 버전 이상으로 버전업을 하니

해결이 되었습니다.



2015년 10월 19일 월요일 오후 5시 7분 23초 UTC+9, alchemist 님의 말:
Reply all
Reply to author
Forward
0 new messages