최근에 일부 테스트환경(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
아니면… 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