728x90
반응형

 

WebView를 구현할 때 onReceivedSslError 오류를 무시하거나 구현하지 않고 PlayConsole에 출시를 하면 아래와 같이 업데이트 거부가 됩니다.

 

Play Console에 표시된 기한이 지난 후에도 보안 취약점이 수정되지 않은 앱은 모두 삭제가 되니 필수로 체크를 해야합니다.

 

 

PlayConsole에 들어가보면 아래와같이 경고 문구가 보여집니다.

 

 

 

관리자 이메일로 들어갔을때 정확한 오류문구와 해결을 위한 link가 있기 때문에 어렵지 않게 처리할 수 있습니다.

https://support.google.com/faqs/answer/7071387?hl=ko

 

앱의 WebView SSL 오류 핸들러 알림 해결 방법 - Google 고객센터

도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요

support.google.com

 

 

 

 

WebChromeClient 를 설정하는 곳에서 onReceivedSslError 메서드를 override합니다.

 

인증서가 요구사항을 충족할 때 proceed()를 호출하고 그렇지 않으면 cancel()을 호출하는 코드를 작성하면 됩니다.

override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
    val builder: AlertDialog.Builder = AlertDialog.Builder(context)
    builder.setMessage("이 사이트의 보안 인증서는 신뢰하는 보안 인증서가 아닙니다. 계속하시겠습니까?")
    builder.setPositiveButton("계속하기", object: DialogInterface.OnClickListener {
        override fun onClick(p0: DialogInterface?, p1: Int) {
            handler!!.proceed()
        }
    })
    builder.setNegativeButton("취소", object: DialogInterface.OnClickListener {
        override fun onClick(p0: DialogInterface?, p1: Int) {
            handler!!.cancel()
        }
    })
    val dialog: AlertDialog = builder.create()
    dialog.show()
}

 

 

 

 

lambda 식으로 처리한다면 더 짧게 구현할 수 있습니다.

override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
    val builder: AlertDialog.Builder = AlertDialog.Builder(context)
    builder.setMessage("이 사이트의 보안 인증서는 신뢰하는 보안 인증서가 아닙니다. 계속하시겠습니까?")
    builder.setPositiveButton("계속하기") { _, _ -> handler!!.proceed() }
    builder.setNegativeButton("취소") { _, _ -> handler!!.cancel() }
    val dialog: AlertDialog = builder.create()
    dialog.show()
}

 

 

 

 

WebView SSL을 사용하는 모든 앱에 영향을 주는것이 아니지만 보안 정책을 준수하도록 권장하고 있습니다.

 

취약점이 발생이 되면 개발자 배포 계약을 위반하는 제품으로 간주될 수 있다고 하니 주의해야겠습니다.

 

728x90
반응형

+ Recent posts