투케이2K

481. (kotlin/코틀린) [유틸 파일] webviewCertificateCheckValidity : 웹뷰 브라우저 인증서 유효성 체크 본문

Kotlin

481. (kotlin/코틀린) [유틸 파일] webviewCertificateCheckValidity : 웹뷰 브라우저 인증서 유효성 체크

투케이2K 2024. 4. 22. 20:04

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

        // -----------------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : webviewCertificateCheckValidity : [웹뷰 브라우저 인증서 유효성 체크] : main_webview.getCertificate
        // -----------------------------------------------------------------------------------------
        @RequiresApi(Build.VERSION_CODES.Q)
        fun webviewCertificateCheckValidity(mContext: Context, webView: WebView?): Boolean {

            /**
             * // -----------------------------------------
             * [webviewCertificateCheckValidity 메소드 설명]
             * // -----------------------------------------
             * 1. 웹뷰 브라우저 인증서 유효성 체크
             * // -----------------------------------------
             * 2. 호출 방식 :
             *
             * if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
             *      C_WebviewCommonFunc.webviewCertificateCheckValidity(A_Webview@this, main_webview)
             * }
             * // -----------------------------------------
             * 3. 리턴 데이터 :
             *
             * 웹뷰 로드 브라우저 인증서가 유효한 경우 true , 아니면 false
             * // -----------------------------------------
             */


            // [변수 선언 실시]
            var returnData = false
            var M_LOG = ""
            var url = ""


            // [로직 처리 실시]
            try {

                // [널 체크 수행 실시]
                if (webView != null) {

                    url = webView.url.toString()

                    if (C_Util.stringNotNull(url) === false) { // [널 인 경우]
                        url = webView.originalUrl.toString()
                    }

                    if (C_Util.stringNotNull(url) === true) { // [URL 널 검증] >> [널이 아닌 경우]

                        // [https 로 시작하는지 확인]
                        if (url.startsWith("https") == true) {

                            // [SslCertificate 획득]
                            val sslCertificate = webView.certificate

                            // [X509Certificate 인증서]
                            val x509Certificate = sslCertificate!!.x509Certificate

                            // [유효성 검증]
                            try {
                                x509Certificate!!.checkValidity(Date()) // TODO 현재시간과 유효기간의 비교

                                // [플래그값 변경]
                                returnData = true
                                M_LOG = "[Success] :: 인증서 유효성 검증 확인"
                            } catch (cee: CertificateExpiredException) { // TODO 유효기간이 지난 경우 에러메시지
                                cee.printStackTrace()
                                M_LOG = "[CertificateNotYetValidException] :: 유효기간 이미 지났습니다."
                            } catch (cnyve: CertificateNotYetValidException) { // TODO 유효기간이 아직 시작되지 않은 경우 에러메시지
                                cnyve.printStackTrace()
                                M_LOG = "[CertificateNotYetValidException] :: 유효기간이 아직 시작되지 않았습니다."
                            }

                        } else {
                            M_LOG = "[ERROR] :: url startWith https"
                        }

                    } else {
                        M_LOG = "[ERROR] :: url is null"
                    }

                } else {
                    M_LOG = "[ERROR] :: webView is null"
                }

            } catch (e: Exception) {
                M_LOG = "[EXCEPTION] :: " + e.message.toString()
                S_Log._printStackTrace_(mContext, S_FinalMsg.LOG_BUG_STATE, null, e)
            }


            // [로그 출력 실시]
            //*
            // ===============================================================
            S_Log._F_(mContext!!, "웹뷰 브라우저 인증서 유효성 체크", arrayOf(
                "URL :: $url",
                "M_LOG :: $M_LOG",
                "RETURN :: $returnData"
            ))
            // ===============================================================
            // */


            // [리턴 변수 반환]
            return returnData
        }

 

반응형
Comments