代码之家  ›  专栏  ›  技术社区  ›  Abhishek kumar

Android截击:javax.net.ssl.SSLHandshakeException:(API URL从http更改为https)

  •  1
  • Abhishek kumar  · 技术社区  · 7 年前

    当我使用( 以前是 http ,现在 https协议 ) “。” https://ims.domain_name.com/api/ “。每次我遇到以下异常:

    javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
    

    当我使用下面的代码时,它工作正常,但一旦我更新了我的应用程序 谷歌游戏商店 我的应用程序被play store拒绝,原因是:

    你好,谷歌游戏开发者,

    我们拒绝了包名为com.domainname.ims的appname,因为 违反我们的恶意行为或用户数据策略如果你 已提交更新,你的应用的上一个版本仍然是 可在Google Play上使用。

    此应用程序使用包含安全漏洞的软件 用户或允许在没有适当的 披露。

    下面是问题列表和相应的APK版本 在您最近的提交中检测到请将你的应用程序升级为 尽快并增加升级后的APK的版本号。

    代码如下:

    /**
     * Enables https connections
     */
    @SuppressLint("TrulyRandom")
    public static void handleSSLHandshake() {
        try {
            TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
    
                @Override
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
    
                @Override
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            }};
    
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String arg0, SSLSession arg1) {
                    return true;
                }
            });
        } catch (Exception ignored) {
        }
    }
    

    然后,我在网上进行了深入的搜索,我知道我需要把我的 .crt 我的应用程序中的文件,即公钥。但我没有找到合适的解决办法。

    现在我有了 SSL密钥 我的服务器,即, .阴极射线管 文件。

    0 回复  |  直到 7 年前