투케이2K

482. (kotlin/코틀린) [유틸 파일] getWebviewCertificatePublicKey : 웹뷰 브라우저 인증서 공개키 확인 본문

Kotlin

482. (kotlin/코틀린) [유틸 파일] getWebviewCertificatePublicKey : 웹뷰 브라우저 인증서 공개키 확인

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

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 
        // -----------------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : getWebviewCertificatePublicKey : [웹뷰 브라우저 인증서 공개키 확인] : getPublicKey
        // -----------------------------------------------------------------------------------------
        @RequiresApi(Build.VERSION_CODES.Q)
        fun getWebviewCertificatePublicKey(mContext: Context, webView: WebView?): String {
            /**
             * // -----------------------------------------
             * [getWebviewCertificatePublicKey 메소드 설명]
             * // -----------------------------------------
             * 1. 웹뷰 브라우저 인증서 공개키 확인
             * // -----------------------------------------
             * 2. 호출 방식 :
             *
             * if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
             *      C_WebviewCommonFunc.getWebviewCertificatePublicKey(A_Webview@this, main_webview)
             * }
             * // -----------------------------------------
             * 3. 리턴 데이터 :
             *
             * 웹뷰 로드 브라우저 인증서 공개 키 값
             * // -----------------------------------------
             */


            // [변수 선언 실시]
            var returnData = ""
            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

                            // [인증서 공개 키 추출 실시]
                            val publicKey = x509Certificate!!.publicKey as PublicKey
                            if (publicKey != null) {

                                // [base64 format]
                                returnData = Base64.encodeToString(publicKey.encoded, Base64.DEFAULT)
                                returnData = returnData.replace(" ".toRegex(), "")
                                returnData = returnData.replace("(\r\n|\r|\n|\n\r)".toRegex(), "")
                                M_LOG = "[Success] :: get webview public key"

                            } else {
                                M_LOG = "[ERROR] :: webview public key is null"
                            }
                        } 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
        }
 

[결과 출력]

 

W///===========//: ================================================
I/: [LOG :: CLASS PLACE :: com.example.kotlinproject.C_WebviewCommonFunc.getWebviewCertificatePublicKey]
I/: ----------------------------------------------------
I/: [LOG :: NOW TIME :: 2024-04-22 10:32:01 월요일]
I/: ----------------------------------------------------
I/: [LOG :: DESCRIPTION :: 웹뷰 브라우저 인증서 공개키 값 확인]
I/: ----------------------------------------------------
I/: [LOG :: URL :: https://m.naver.com/]
I/: ----------------------------------------------------
I/: [LOG :: M_LOG :: [Success] :: get webview public key]
I/: ----------------------------------------------------
I/: [LOG :: RETURN :: MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEG2Vd6fpVzuj06rFFj588gyXs+PiEevcJq9x0NDnlPyUCpgVSGj2P8k5HjCIKp7Pgva+XG90zoykY+vlGJoohSg==]
W///===========//: ================================================

 

반응형
Comments