최근에 일부 테스트환경(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(https://tools.ietf.org/html/rfc3546)에 관련 있으니 확인해보시고, 보안적인 문제는 워낙 여러곳에서 다루고 있으니 생략하겠습니다.
(절대 귀찮아서 그런거임)

https://media.giphy.com/media/ZXKZWB13D6gFO/giphy.gif

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

Burp는 아예 메뉴로 빼주셨습니다.
User options => SSL => Disable Java SNI

User options > SSL > Disable Java SNI extension

댓글 2개: