ZAP Java 버전 바꿔치기(Change Java version for fixed ssl error on ZAP)

ZAP HUD 테스트한다고 alpha 버전 올렸었는데, macOS 에선 인앱 브라우저로 특정 사이트 접근 시 SSL 관련 에러가 발생해서 삽질했던거 정리해둡니다. Linux는 별 문제 없던 걸로 보아.. macOS와 연관된 문제인가보네요.

SSLHandshakeException: Received fatal alert: handshake_failure 에러 발생

보통 구글링 해보면 아래 링크 글 확인해서 대응하라고 하는데, ZAP 쪽 설정 + JCE 관련 내용입니다.

뭔가 저의 문제가 Java 문제인 것 같았고 JCE 추가로도 해결되지 않아 좀 의아했습니다.

그러던 중 원래 쓰던 ZAP은 잘 됬던걸로 생각이 나서 자바 버전 체크를 좀 해봤습니다. (ZAP은 자체적으로 Java 바이너리를 내장하고 있습니다)

release
Found Java version 1.8.0_152
Available memory: 16384 MB
Setting jvm heap size: -Xmx4096m
0 [main] INFO org.zaproxy.zap.Gui

alpha
Found Java version 1.8.0_111
Available memory: 16384 MB
Setting jvm heap size: -Xmx4096m
0 [main] INFO org.zaproxy.zap.Gui

하위 버전의 미묘한 차이가 있었지만, 분명 이 차이가 문제의 부분이라 생각하고 자바를 release 쪽(1.8.0.152)로 바꿔치기 했습니다.

zap은 zap.sh => zap.jar 파일 순서로 호출되며 zap.sh에 Java 관련 Path, Binary 설정등이 존재합니다. 열어서 Path 부분이랑 최종 실행되는 Java를 바꿔줍니다.

zap.sh

# Java path 위치 바꿔줌
if [ "$OS" = "Darwin" ]; then
  if [ -e "/Applications/OWASP ZAP.app/Contents/PlugIns/jre1.8.0_152.jre/Contents/Home/bin/java" ]; then
    pushd "/Applications/OWASP ZAP.app/Contents/PlugIns/jre1.8.0_152.jre/Contents/Home/bin" > /dev/null
    echo 'hawul'
    JAVA_PATH="/Applications/OWASP ZAP.app/Contents/PlugIns/jre1.8.0_152/Contents/Home/bin/java"
    PATH="$JAVA_PATH:$PATH"
    popd > /dev/null
  fi
fi

# Java binary 직접 지정 (java1.8.0_111 => java1.8.0_152)
if [ "$OS" = "Darwin" ]; then
  exec "/Applications/OWASP ZAP.app/Contents/PlugIns/jre1.8.0_152.jre/Contents/Home/bin/java" ${JMEM} ${JAVAGC} -Xdock:icon="../Resources/ZAP.icns" -jar "${BASEDIR}/zap-D-2018-    12-17.jar" "${ARGS[@]}"
else
  exec "/Applications/OWASP ZAP.app/Contents/PlugIns/jre1.8.0_152.jre/Contents/Home/bin/java" ${JMEM} ${JAVAGC} ${JAVADEBUG} -jar "${BASEDIR}/zap-D-2018-12-17.jar" "${ARGS[@]}"
fi

이후 실행해보면 에러없이 사이트가 잘 로드됩니다.

./zap.sh