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를 지원하지 않는 것인지, 그렇다면 자바 버전을 올려야하는 궁금합니다.
답변 부탁드립니다.
SSL 을 사용함에 있어서...cipher와 관련이 있습니다.
여러종류의 암호화 중에 세션키 암호화는 SSL Nego 과정에서 정해지게 되는데 ..
이때 JAVA 에서 DH(Diffie-Hellman) 알고리즘의 Cipher를 사용하게 될 경우,
768 bit로 사용되어지며, 이는 현재는 안전하지 않을 수 있는 key로 인식되어지고 있습니다.
JAVA 1.6 버전대에는 1024 bit의 암호를 지원하지 않아 JAVA 1.7 버전 이상으로 버전업을 하니
해결이 되었습니다.