투케이2K

774. (Android/Java) [유틸 파일] getWebviewCertificatePublicKey : 웹뷰 브라우저 인증서 공개키 확인 본문

Android

774. (Android/Java) [유틸 파일] getWebviewCertificatePublicKey : 웹뷰 브라우저 인증서 공개키 확인

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

[개발 환경 설정]

개발 툴 : AndroidStudio

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : getWebviewCertificatePublicKey : [웹뷰 브라우저 인증서 공개키 확인] : getPublicKey
    // -----------------------------------------------------------------------------------------
    @RequiresApi(Build.VERSION_CODES.Q)
    public static String getWebviewCertificatePublicKey(Context mContext, WebView webView) {

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


        // [변수 선언 실시]
        String returnData = "";
        String M_LOG = "";
        String url = "";


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

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

                url = String.valueOf(webView.getUrl());

                if (C_Util.stringNotNull(url) == false){ // [널 인 경우]
                    url = String.valueOf(webView.getOriginalUrl());
                }

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

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

                        // [SslCertificate 획득]
                        SslCertificate sslCertificate = webView.getCertificate();

                        // [X509Certificate 인증서]
                        X509Certificate x509Certificate = sslCertificate.getX509Certificate();

                        // [인증서 공개 키 추출 실시]
                        PublicKey publicKey = (PublicKey) x509Certificate.getPublicKey();

                        if (publicKey != null){

                            // [base64 format]
                            returnData = Base64.encodeToString(publicKey.getEncoded(), Base64.DEFAULT);
                            returnData = returnData.replaceAll(" ", "");
                            returnData = returnData.replaceAll("(\r\n|\r|\n|\n\r)", "");
                            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 (Exception e) {
            M_LOG = "[EXCEPTION] :: " + String.valueOf(e.getMessage());

            S_Log._printStackTrace_(mContext, S_FinalMsg.LOG_BUG_STATE, null, e);
        }


        // [로그 출력 실시]
        //*
        // ===============================================================
        S_Log._F_(mContext, "웹뷰 브라우저 인증서 공개키 값 확인", new String[]{
                "URL :: " + String.valueOf(url),
                "M_LOG :: " + String.valueOf(M_LOG),
                "RETURN :: " + String.valueOf(returnData)
        });
        // ===============================================================
        // */


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

[결과 출력]

 

W///===========//: ================================================
I/: [LOG :: CLASS PLACE :: com.example.javaproject.C_WebviewCommonFunc.getWebviewCertificatePublicKey(C_WebviewCommonFunc.java:721)]
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