相关疑难解决方法(0)

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

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

例如:如果用户键入了https://www.google.com,那么我需要以编程方式获取证书信息.

编辑:

最后,我从服务器获得了证书信息.

现在,我的问题是:

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 …
Run Code Online (Sandbox Code Playgroud)

android x509certificate

16
推荐指数
1
解决办法
2674
查看次数

Android java.security.cert.CertPathValidatorException:未找到证书路径的信任锚

Android应用程序有三个主机进行身份验证和授权.最终主机是REST API.第一次使用Oauth身份验证和授权过程,它没有问题.

但是,如果用户在登录后杀死应用程序并访问REST API提供的服务,然后再次打开应用程序,则会出现此问题.在这种情况下,身份验证和授权过程不会发生,只有REST API.它导致java.security.cert.CertPathValidatorException 但它在第一次使用时工作(登录然后使用应用程序).

有人可以解释这个异常背后的情况,并且该应用程序有什么问题.如果根据此SO答案忽略认证例外,则此方法有效.

SSLSocketFactory sslSocketFactory = null;

        try {
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(
                    TrustManagerFactory.getDefaultAlgorithm());
            // Initialise the TMF as you normally would, for example:
            try {
                tmf.init((KeyStore)null);
            } catch(KeyStoreException e) {
                e.printStackTrace();
            }
            TrustManager[] trustManagers = tmf.getTrustManagers();

            final X509TrustManager origTrustmanager = (X509TrustManager)trustManagers[0];

            // Create a trust manager that does not validate certificate chains
            TrustManager[] wrappedTrustManagers = new TrustManager[]{
                    new X509TrustManager() {
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return origTrustmanager.getAcceptedIssuers(); …
Run Code Online (Sandbox Code Playgroud)

java security ssl android okhttp3

11
推荐指数
1
解决办法
5万
查看次数

如何在Java6中禁用约束检查(Netscape证书类型)?

我正在尝试使用内置类com.sun.net.httpserver.HttpsServer在Java(6)中构建自定义HTTPS服务器.它工作正常,直到我需要客户端身份验证 此时,它在服务器上的SSL调试中失败并出现以下异常.

sun.security.validator.ValidatorException:Netscape证书类型不允许用于SSL客户端

我使用的是内部CA颁发的证书,用于我们内部的所有应用程序.我查看了证书详细信息,发现该类型是"SSL Server"(详情请参阅下文).由于我们的政策是对所有内部应用程序使用"SSL服务器"类型,因此很难更改证书.由于我想为客户端使用服务器证书,我不认为这是一个安全问题.

我正在寻找的方法是在Java中禁用此约束检查.有谁遇到过这个并解决了这个问题?任何帮助都非常感谢.

最诚挚的问候,阿伦

Owner: CN=myapp, OU=mygroup, O=mycompany

Issuer: O=MYCA

Serial number: 4cc8c1da

Valid from: Mon Jan 10 13:46:34 EST 2011 until: Thu Jan 10 14:16:34 EST 2013

Certificate fingerprints:
         MD5:  8C:84:7F:7A:40:23:F1:B5:81:CD:F9:0C:27:16:69:5E
         SHA1: 9B:39:0B:2F:61:83:52:93:D5:58:E5:43:13:7A:8F:E1:FD:AC:98:A4
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

[1]: ObjectId: 2.5.29.16 Criticality=false
PrivateKeyUsage: [
From: Mon Jan 10 13:46:34 EST 2011, To: Wed Jul 11 21:16:34 EDT 2012]

[2]: ObjectId: 2.5.29.15 Criticality=false
KeyUsage [
  DigitalSignature
  Key_Encipherment
]

[3]: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier …
Run Code Online (Sandbox Code Playgroud)

java ssl certificate jsse x509

5
推荐指数
1
解决办法
5071
查看次数

覆盖Android中的SSL Trust Manager

我试图覆盖Android中的信任管理器。我想让基础信任管理器检查证书,但是我需要确定证书是否过期。如果证书已过期,我需要忽略它并接受证书。如果取出电池,某些移动设备会将日期重置为旧日期,从而导致证书看起来好像过期了。即使发生这种情况,我的应用也必须继续保持运行状态。

我遇到的问题是,此行代码引发NullPointerException:

origTrustmanager.checkServerTrusted(certs, authType);
Run Code Online (Sandbox Code Playgroud)

根据文档,checkServerTrusted绝不应抛出NullPointerExeption。certs有两个项目。authType设置为“ RSA”。如果我没有实现自定义的信任管理器,则会抛出一个异常,该异常清楚地表明证书已过期,因此我知道底层的信任管理器正在执行其工作。即使我将设备上的日期和时间设置在证书的有效期内,上面的checkServerTrusted行也会生成异常。为什么?显然我做错了。这是我的自定义信任管理器的代码以及如何访问Url:

class SSLTrustManager
{
  private X509TrustManager origTrustmanager;

  public SSLTrustManager()
  {
    try
    {
      TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
      tmf.init((KeyStore) null);
      TrustManager[] trustManagers = tmf.getTrustManagers();
      this.origTrustmanager = (X509TrustManager) trustManagers[0];
    }
    catch (Exception ex)
    {
    }
  }

  public javax.net.ssl.SSLSocketFactory GetSocketFactory()
  {
    try
    {
      TrustManager[] wrappedTrustManagers = new TrustManager[] {
          new X509TrustManager()
          {
            public java.security.cert.X509Certificate[] getAcceptedIssuers()
            {
              return origTrustmanager.getAcceptedIssuers();
            }

            public void checkClientTrusted(X509Certificate[] certs, String authType)
            {
              try
              {
                origTrustmanager.checkClientTrusted(certs, authType);
              }
              catch (CertificateException e)
              {
              }
            }

            public void …
Run Code Online (Sandbox Code Playgroud)

ssl android

5
推荐指数
1
解决办法
2万
查看次数

无法从Android链中获取根CA证书

我想做的事情很简单 - 我想在从 iOS 和 Android 应用程序连接到服务器时获得完整的证书链。

在 iOS 中,我正在使用NSURLSession和覆盖URLSession:didReceiveChallenge:方法,在该方法中我能够获取证书链,在这种情况下,它看起来像预期的那样:

[leaf certificate] - [intermediate certificate] - [root certificate]

迷人的。

现在我正在尝试在 Android 设备上使用HttpsURLConnection. 连接到服务器后,我正在使用方法获取证书链(或者至少我希望这是它的getServerCertificates()方法)。这将返回我的Certificate[]对象,我在其中获得了如下所示的链:

[leaf certificate] - [intermediate certificate]

因此,Android 设备上没有根证书。

您知道如何从Android中的链中获取根证书吗?

先感谢您。

ssl android ssl-certificate x509certificate ios

3
推荐指数
1
解决办法
2212
查看次数