以编程方式将服务器证书信息添加到Trust Manager Android

Manohar perepa

我是这个概念SSL新手X509Certificate我需要的是,有没有办法从给定的证书中获取证书信息Url

例如:如果用户输入了https://www.google.com,则我需要以编程方式输入该证书的信息。

编辑:

最后,我从Server获得了证书信息

现在,我的问题是:

1.如何检查证书是否受信任?

2.如何将证书添加到信任管理器?

3.即使是不受信任的证书,如果用户想继续使用它,那么我需要将证书添加到信任管理器。我怎样才能做到这一点?

4.是不是为了检查证书是否受信任,我们真的需要另一个证书进行比较吗?

我对这些很新 X.509 Certificate.

任何帮助将不胜感激。

编辑:

这就是我尝试过的。但是,他们都不在帮助我。我需要获取证书是否受信任。

X509TrustManager trustManager = new X509TrustManager() {
                @Override
                public void checkClientTrusted(X509Certificate[] chain,
                        String authType) throws CertificateException {
                    for (TrustManager tm : managers) {
                        if (tm instanceof X509TrustManager) {
                            ((X509TrustManager) tm).checkClientTrusted(
                                    chain, authType);
                        }
                    }
                }

                @Override
                public void checkServerTrusted(X509Certificate[] chain,
                        String authType) {

                    for (X509Certificate cert : chain) {

                        final String mCertificatinoType = cert.getType();
                        Date afterDate = cert.getNotAfter();
                        Date beforeDate = cert.getNotBefore();
                        Date currentDate = new Date();

                        try {
                            cert.checkValidity(new Date());
                        } catch (CertificateExpiredException e) {
                            LoginActivity.isExpired = true;
                            e.printStackTrace();
                        } catch (CertificateNotYetValidException e) {
                            LoginActivity.isInValid = true;
                            e.printStackTrace();
                        }

                        try {
                            cert.verify(trustedRoot.getPublicKey());
                        } catch (InvalidKeyException e) {
                            e.printStackTrace();
                        } catch (CertificateException e) {
                            e.printStackTrace();
                        } catch (NoSuchAlgorithmException e) {
                            e.printStackTrace();
                        } catch (NoSuchProviderException e) {
                            e.printStackTrace();
                        } catch (SignatureException e) {
                            e.printStackTrace();
                        }

                        try {
                            if (cert.getIssuerX500Principal().equals(
                                    trustedRoot.getIssuerX500Principal())) {

                            }
                            cert.verify(trustedHost.getPublicKey());
                        } catch (InvalidKeyException e) {
                            e.printStackTrace();
                        } catch (CertificateException e) {
                            e.printStackTrace();
                        } catch (NoSuchAlgorithmException e) {
                            e.printStackTrace();
                        } catch (NoSuchProviderException e) {
                            e.printStackTrace();
                        } catch (SignatureException e) {
                            e.printStackTrace();
                        }

                        if (afterDate.compareTo(currentDate)
                                * currentDate.compareTo(beforeDate) > 0) {
                        } else {

                        }

                        if (cert.getIssuerX500Principal().equals(
                                trustedRoot.getIssuerX500Principal())) {
                            return;
                        }
                    }

                    // for (X509Certificate cert : chain) {
                    // URL url;
                    // String host = "";
                    // if (baseHostString.equalsIgnoreCase("")) {
                    // final Settings settings = mApplication
                    // .getSettings();
                    // try {
                    // url = new URL(
                    // settings.serverAddress.toString());
                    // host = url.getAuthority();
                    // } catch (MalformedURLException e) {
                    // e.printStackTrace();
                    // }
                    // } else {
                    //
                    // }
                    //
                    // String dn = cert.getSubjectDN().getName();
                    // String CN = getValByAttributeTypeFromIssuerDN(dn,
                    // "CN=");
                    // if (CN.equalsIgnoreCase(host)) {
                    // if (cert.getIssuerX500Principal().equals(
                    // trustedRoot.getIssuerX500Principal())) {
                    // return;
                    // } else {
                    // }
                    // } else {
                    // }
                    // }
                    for (TrustManager tm : managers) {
                        if (tm instanceof X509TrustManager) {
                            try {
                                ((X509TrustManager) tm).checkServerTrusted(
                                        chain, authType);
                            } catch (CertificateException e) {
                                e.printStackTrace();
                            }
                        }
                    }

                }

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    ArrayList<X509Certificate> issuers = new ArrayList<>();
                    for (TrustManager tm : managers) {
                        if (tm instanceof X509TrustManager) {
                            issuers.addAll(Arrays
                                    .asList(((X509TrustManager) tm)
                                            .getAcceptedIssuers()));
                        }
                    }
                    return issuers.toArray(new X509Certificate[issuers
                            .size()]);
                }

            };
Manohar perepa

终于破解了!

                X509TrustManager trustManager = new X509TrustManager() {
                @Override
                public void checkClientTrusted(X509Certificate[] chain,
                        String authType) throws CertificateException {
                    for (TrustManager tm : managers) {
                        if (tm instanceof X509TrustManager) {
                            ((X509TrustManager) tm).checkClientTrusted(
                                    chain, authType);
                        }
                    }
                }

                @Override
                public void checkServerTrusted(
                        final X509Certificate[] chain, String authType) {

                    for (X509Certificate cert : chain) {

                        final String mCertificatinoType = cert.getType();
                        Date afterDate = cert.getNotAfter();
                        Date beforeDate = cert.getNotBefore();
                        Date currentDate = new Date();

                        try {
                            cert.checkValidity(new Date());
                        } catch (CertificateExpiredException e) {
                            isExpired = true;
                            e.printStackTrace();
                        } catch (CertificateNotYetValidException e) {
                            isInValid = true;
                            e.printStackTrace();
                        }

                        if (afterDate.compareTo(currentDate)
                                * currentDate.compareTo(beforeDate) > 0) {
                            isExpired = false;
                        } else {
                            isExpired = true;
                        }

                        String dn = cert.getSubjectDN().getName();
                        String CN = getValByAttributeTypeFromIssuerDN(dn,
                                "CN=");

                        String host = "";
                        if (TextUtils.isEmpty(query)) {
                            if (baseHostString.equalsIgnoreCase("")) {
                                final Settings settings = mApplication
                                        .getSettings();
                                try {
                                    URL url = new URL(
                                            settings.serverAddress
                                                    .toString());
                                    host = url.getAuthority();
                                    if (host.contains(String.valueOf(url
                                            .getPort()))) {
                                        String toBeReplaced = ":"
                                                + url.getPort();
                                        host = host.replace(toBeReplaced,
                                                "");
                                    }
                                } catch (MalformedURLException e) {
                                    e.printStackTrace();
                                }
                            } else {
                                try {
                                    URL url = new URL(baseHostString);
                                    host = url.getAuthority();
                                    if (host.contains(String.valueOf(url
                                            .getPort()))) {
                                        String toBeReplaced = ":"
                                                + url.getPort();
                                        host = host.replace(toBeReplaced,
                                                "");
                                    }
                                } catch (MalformedURLException e) {
                                    e.printStackTrace();
                                }
                            }
                        } else {
                            try {
                                URL url = new URL(query);
                                host = url.getAuthority();
                                if (host.contains(String.valueOf(url
                                        .getPort()))) {
                                    String toBeReplaced = ":"
                                            + url.getPort();
                                    host = host.replace(toBeReplaced, "");
                                }
                            } catch (MalformedURLException e) {
                                e.printStackTrace();
                            }
                        }

                        if (CN.equalsIgnoreCase(host)) {
                            isHostMisMatch = false;
                        } else {
                            isHostMisMatch = true;
                        }

                        for (TrustManager tm : managers) {
                            if (tm instanceof X509TrustManager) {
                                try {
                                    ((X509TrustManager) tm)
                                            .checkServerTrusted(chain,
                                                    authType);
                                } catch (CertificateException e) {
                                    if (e.getMessage() != null
                                            && e.getMessage()
                                                    .contains(
                                                            "Trust anchor for certification path not found.")) {
                                        isNotTrusted = true;
                                        mApplication
                                                .setCurrentCertificate(chain);
                                    }
                                    e.printStackTrace();
                                }
                            }
                        }

                        if (cert.getIssuerX500Principal().equals(
                                trustedRoot.getIssuerX500Principal())) {
                            return;
                        }
                    }

                }

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    ArrayList<X509Certificate> issuers = new ArrayList<>();
                    for (TrustManager tm : managers) {
                        if (tm instanceof X509TrustManager) {
                            issuers.addAll(Arrays
                                    .asList(((X509TrustManager) tm)
                                            .getAcceptedIssuers()));
                        }
                    }
                    return issuers.toArray(new X509Certificate[issuers
                            .size()]);
                }

            };

谢谢大家。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Android中以编程方式将动画效果添加到(以编程方式添加)popupWindow

来自分类Dev

以编程方式将垂直和水平滚动添加到Android中的LinearLayout

来自分类Dev

以编程方式将视图添加到RelativeLayout android

来自分类Dev

在android中将HttpParams添加到HttpClient返回服务器错误(400)

来自分类Dev

Android SDK Manager未更新

来自分类Dev

4.4.4 not in Android SDK manager

来自分类Dev

Android以编程方式将布局视图添加到另一个布局

来自分类Dev

Android:以编程方式将半径添加到imageButton

来自分类Dev

在Android上使用Alarm Manager启动服务吗?

来自分类Dev

以编程方式从Url Android获取证书信息

来自分类Dev

以编程方式将transitionName添加到工具栏标题(Android)

来自分类Dev

如何在Android的RecyclerView中添加LinearLayout Manager和GridLayout Manager

来自分类Dev

将新端点添加到Android Studio中的现有App Engine后端服务器

来自分类Dev

Android SDK Manager下载器无法恢复支持吗?

来自分类Dev

Android SDK Manager权限被拒绝

来自分类Dev

SDK Manager Android Studio 3.5.3

来自分类Dev

WiX Toolset将ODBC-32 Manager快捷方式添加到Startmenu中

来自分类Dev

Android SDK Manager错误

来自分类Dev

以编程方式将垂直和水平滚动添加到Android中的LinearLayout

来自分类Dev

Android以编程方式将布局视图添加到另一个布局

来自分类Dev

Eclipse:如何在Android SDK Manager中将Google Play服务添加到Extras?

来自分类Dev

Android Alarm Manager:未调用OnRecive和PendingIntent服务

来自分类Dev

Android:以编程方式将半径添加到imageButton

来自分类Dev

在Android上使用Alarm Manager启动服务吗?

来自分类Dev

将服务器逻辑添加到GAE Android后端

来自分类Dev

以编程方式将规则添加到布局中已存在的视图-Android

来自分类Dev

如何以编程方式从Android通过mainActivity将项目添加到arrayList中的stringArray

来自分类Dev

Android Alarm Manager服务不起作用

来自分类Dev

Android Alarm Manager重复

Related 相关文章

  1. 1

    在Android中以编程方式将动画效果添加到(以编程方式添加)popupWindow

  2. 2

    以编程方式将垂直和水平滚动添加到Android中的LinearLayout

  3. 3

    以编程方式将视图添加到RelativeLayout android

  4. 4

    在android中将HttpParams添加到HttpClient返回服务器错误(400)

  5. 5

    Android SDK Manager未更新

  6. 6

    4.4.4 not in Android SDK manager

  7. 7

    Android以编程方式将布局视图添加到另一个布局

  8. 8

    Android:以编程方式将半径添加到imageButton

  9. 9

    在Android上使用Alarm Manager启动服务吗?

  10. 10

    以编程方式从Url Android获取证书信息

  11. 11

    以编程方式将transitionName添加到工具栏标题(Android)

  12. 12

    如何在Android的RecyclerView中添加LinearLayout Manager和GridLayout Manager

  13. 13

    将新端点添加到Android Studio中的现有App Engine后端服务器

  14. 14

    Android SDK Manager下载器无法恢复支持吗?

  15. 15

    Android SDK Manager权限被拒绝

  16. 16

    SDK Manager Android Studio 3.5.3

  17. 17

    WiX Toolset将ODBC-32 Manager快捷方式添加到Startmenu中

  18. 18

    Android SDK Manager错误

  19. 19

    以编程方式将垂直和水平滚动添加到Android中的LinearLayout

  20. 20

    Android以编程方式将布局视图添加到另一个布局

  21. 21

    Eclipse:如何在Android SDK Manager中将Google Play服务添加到Extras?

  22. 22

    Android Alarm Manager:未调用OnRecive和PendingIntent服务

  23. 23

    Android:以编程方式将半径添加到imageButton

  24. 24

    在Android上使用Alarm Manager启动服务吗?

  25. 25

    将服务器逻辑添加到GAE Android后端

  26. 26

    以编程方式将规则添加到布局中已存在的视图-Android

  27. 27

    如何以编程方式从Android通过mainActivity将项目添加到arrayList中的stringArray

  28. 28

    Android Alarm Manager服务不起作用

  29. 29

    Android Alarm Manager重复

热门标签

归档