以编程方式将服务器证书信息添加到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

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

来自分类Dev

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

来自分类Dev

Android Alarm Manager服务不起作用

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

4.4.4 not in Android SDK manager

来自分类Dev

Android SDK Manager错误

来自分类Dev

Android Alarm Manager重复

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Android SDK Manager未更新

来自分类Dev

Android SDK Manager权限被拒绝

来自分类Dev

SDK Manager Android Studio 3.5.3

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

    Android Alarm Manager服务不起作用

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

    4.4.4 not in Android SDK manager

  11. 11

    Android SDK Manager错误

  12. 12

    Android Alarm Manager重复

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

    Android SDK Manager未更新

  27. 27

    Android SDK Manager权限被拒绝

  28. 28

    SDK Manager Android Studio 3.5.3

  29. 29

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

热门标签

归档