ZAP과 BurpSuite에서의 "handshake alert: unrecognized_name" 에러 해결하기

최근에 일부 테스트환경(hosts 추가한거라 인증서문제가…)에서 이런 에러를 만났습니다.

handshake alert: unrecognized_name javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name’

ZAP , Burp 모두 Java Application 이고 동일한 문제가 발생했었는데, 어떤 내용이고 어떻게 해결됬는지 공유드립니닷.

SNI Extension? #

우선 SNI에 대해 알고 시작해야합니다. 간략히 설명드리면 name base의 virtual hosting을 안전하게 쓰기 위한 TLS의 확장 프로토콜? 정도로 이를 이용하면 인증정보를 여러 도메인에 공유해서 사용할 수 있습니다.

<virtualhost *:443>
  ServerName example.com
  SSLEnable SNI
  SSLServerCert default
  SSLSNIMap a.example.com sni1-rsa
  SSLSNIMap a.example.com sni1-ecc
  SSLSNIMap b.example.com sni2
</virtualhost>

관련 내용은 RFC3546에 관련 있으니 확인해보시고, 보안적인 문제는 워낙 여러곳에서 다루고 있으니 생략하겠습니다.

Solution #

unrecognized_name 에러가 SNI 설정으로 일어나는 에러인데, SNI Extension 해제로 해결 가능합니다. 저 환경이 불편할 수 있는데 테스트 이후에 다시 원복하시는게 좋을 것 같습니다

ZAP #

Options => JVM 에서 아래 구문 추가로 해결할 수 있습니다.

-Djsse.enableSNIExtension=false

Options > JVM > Add JVM Options (Djsse.enableSNIExtension=false)

아니면… run script에 직접 넣어줘도 됩니다.

zap.sh

exec java ${JMEM} ${JAVAGC} -Xdock:icon="../Resources/ZAP.icns" -Djsse.enableSNIExtension=false -jar "${BASEDIR}/zap-2.7.0.jar" "${ARGS[@]}"

보통은 설정에서 제어해주는게 편할겁니다. 다만 설정에서 잘못된 값이 들어가고 ZAP 실행 시 바로 죽어버릴 수 있는데 이때는 command line에서 zap 실행 후 옵션에서 다시 설정해주시면 됩니다. (Options > JVM이 환경 변수로 전달되서 들어가던가…했을거에요)

Burp suite #

User options => SSL => Disable Java SNI

User options > SSL > Disable Java SNI extension