「java.security.cert.CertificateException:サブジェクトの別名がありません」エラーを修正する方法


108

HTTPS経由でWebサービスを使用するJava Webサービスクライアントがあります。

import javax.xml.ws.Service;

@WebServiceClient(name = "ISomeService", targetNamespace = "http://tempuri.org/", wsdlLocation = "...")
public class ISomeService
    extends Service
{

    public ISomeService() {
        super(__getWsdlLocation(), ISOMESERVICE_QNAME);
    }

サービスURL(https://AAA.BBB.CCC.DDD:9443/ISomeService)に接続すると、例外が発生しjava.security.cert.CertificateException: No subject alternative names presentます。

それを修正するために、私は最初に実行openssl s_client -showcerts -connect AAA.BBB.CCC.DDD:9443 > certs.txtし、ファイルに次のコンテンツを取得しましたcerts.txt

CONNECTED(00000003)
---
Certificate chain
 0 s:/CN=someSubdomain.someorganisation.com
   i:/CN=someSubdomain.someorganisation.com
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=someSubdomain.someorganisation.com
issuer=/CN=someSubdomain.someorganisation.com
---
No client certificate CA names sent
---
SSL handshake has read 489 bytes and written 236 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 512 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-MD5            
    Session-ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Session-ID-ctx:                 
    Master-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Key-Arg   : None
    Start Time: 1382521838
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---

私の知る限り、今私はする必要があります

  1. 一部の抽出certs.txtの間-----BEGIN CERTIFICATE-----とを-----END CERTIFICATE-----
  2. 証明書名が次のようになるように変更します AAA.BBB.CCC.DDD
  3. 次に、を使用して結果をインポートしますkeytool -importcert -file fileWithModifiedCertificatefileWithModifiedCertificateは操作1と2の結果です)。

これは正しいです?

もしそうなら、ステップ1の証明書をIPベースのadddress(AAA.BBB.CCC.DDD)でどのように機能させることができますか?

アップデート1( 2013年10 月23日15:37 MSK):同様の質問への回答として、私は以下を読みました。

そのサーバーを制御できない場合は、そのホスト名を使用します(既存の証明書にそのホスト名と一致するCNが少なくともある場合)。

「使用」とはどういう意味ですか?

回答:


152

ここで紹介するアプローチを使用してHTTPSチェックを無効にすることで問題を修正しまし

ISomeServiceクラスに次のコードを挿入します。

static {
    disableSslVerification();
}

private static void disableSslVerification() {
    try
    {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
            public void checkClientTrusted(X509Certificate[] certs, String authType) {
            }
            public void checkServerTrusted(X509Certificate[] certs, String authType) {
            }
        }
        };

        // Install the all-trusting trust manager
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

        // Create all-trusting host name verifier
        HostnameVerifier allHostsValid = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };

        // Install the all-trusting host verifier
        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (KeyManagementException e) {
        e.printStackTrace();
    }
}

私はhttps://AAA.BBB.CCC.DDD:9443/ISomeServiceテスト目的でのみ使用しているので、それは十分に良いソリューションです。


上記のリンクに記載されているアプローチはブロックされているようです(nakov.com/blog/2009/07/16/…)。誰でもリンクを更新できますか?
John

このプロセスを実行して検証を無効にしてみましたが、SSLプロトコルのブラウザー検証(Poodleの脆弱性)でssl_error_no_cypher_overlapが得られました。何か案は?
will824 2015年

こんにちは、org.springframework.web.client.HttpClientErrorException:403 Forbidden

73
HTTPSチェックを無効にすることは「解決策」ではありません。「パッチ」を見つけたと言うべきでしょう。
Jus12

2
これにより、Pre_prodおよびProductionに脆弱性が生じます。1. Windowsホストファイルにホストエントリを作成する2.または、証明書のサブジェクトの別名フィールドにIPまたはFQDN名を追加する
Shankar

34

私は同じ問題を抱えており、このコードで解決しました。このコードは、Webサービスへの最初の呼び出しの前に配置しました。

javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){

    public boolean verify(String hostname,
            javax.net.ssl.SSLSession sslSession) {
        return hostname.equals("localhost");
    }
});

シンプルで問題なく動作します。

これが元のソースです。


3
または、verify()関数の本体全体をに置き換えることもできreturn hostname.equals("localhost");ます。if完全に不必要です。
CVn 2015年

これは、適切な証明書を持たないベンダーのテスト環境でテストするためのシンプルで迅速な修正でした。どうもありがとう!
dacDave 2016年

私のために働いた@ JuanM.Hidalgoは、への呼び出しの直前にコードを配置しましたHttpsURLConnection connection = (HttpsURLConnection) obj.openConnection();。また、これはすべての証明書を無視しますか?私はそのような回避策がセキュリティに対して脆弱であることを見たので。ありがとうございました!
ThunderWiring 2016

この回答でSSL証明書の例外とLDH以外の文字の問題が解決しました。オープンJDKで報告されたバグ、bugs.openjdk.java.net / browse
Akhil S Kamathの

28

これは古い質問ですが、JDK 1.8.0_144からjdk 1.8.0_191に移行するときに同じ問題が発生しました

変更ログにヒントが見つかりました:

変更ログ

次の追加のシステムプロパティを追加しました。これは、この問題を解決するのに役立ちました。

-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true

25

証明書IDの検証は、クライアントの要求に対して実行されます。

クライアントが使用する場合https://xxx.xxx.xxx.xxx/something(場所xxx.xxx.xxx.xxx IPアドレスは)を、証明書のIDはこのIPアドレスに対してチェックされます(理論的には、IP SAN拡張のみを使用)。

証明書にIP SANがなく、DNS SAN(またはDNS SANがない場合は、サブジェクトDNの共通名)がある場合、クライアントに代わりにそのホスト名(またはホスト名)のURLを使用させることで、これを機能させることができます。可能な値が複数ある場合に、証明書が有効であることを示します)。たとえば、証明書にの名前がある場合はwww.example.com、を使用しますhttps://www.example.com/something

もちろん、そのIPアドレスに解決するには、そのホスト名が必要です。

また、DNS SANがある場合、サブジェクトDNのCNは無視されるため、この場合はDNS SANの1つと一致する名前を使用してください。


1
経由でサービスにアクセスできませんhttp://www.example.com/someservice。それはIPベースのアドレス(と仕事への証明書のために正しいですhttps://AAA.BBB.CCC.DDD:9443/ISomeService)、私はすべての設定する必要がCNにフィールドをAAA.BBB.CCC.DDD(置き換えるsomeSubdomain.someorganisation.comことにより、AAA.BBB.CCC.DDD上記のファイル内)で処理し、得られた証明書ファイルをインポートしますか?
Mentiflectax 2013年

サーバーを制御できない場合は、CNまたは証明書について何もできません。
Bruno

テスト目的でIPアドレスにアクセスするには、一時的に/etc/hostsファイルまたは同等のものを変更できます
tyoc213

1
私のコードでは、リクエストをパブリックIPに送信していましたが、証明書のCNはホスト名でした。そのため、私のコードでは、IPをホスト名に置き換え、このホスト名をIPに関連付けるように/ etc / hostsを構成しました。解決しました!
Leopold Gault 2016年

15

証明書をインポートするには:

  1. サーバーから証明書を抽出します。たとえば、openssl s_client -showcerts -connect AAA.BBB.CCC.DDD:9443 > certs.txtこれはPEM形式で証明書を抽出します。
  2. これはkeytoolが期待するものなので、証明書をDER形式に変換します。 openssl x509 -in certs.txt -out certs.der -outform DER
  3. 次に、この証明書をシステムのデフォルトの「cacert」ファイルにインポートします。Javaインストールのシステムデフォルトの「cacerts」ファイルを見つけます。見てみましょうデフォルトのJavaのインストールのcacertsファイルの場所を取得するためにどのように?
  4. そのcacertsファイルにsudo keytool -importcert -file certs.der -keystore <path-to-cacerts>証明書をインポートします。デフォルトのcacertsパスワードは「changeit」です。

証明書がFQDNに対して発行され、JavaコードでIPアドレスを使用して接続しようとしている場合、これはおそらく証明書自体をいじるのではなく、コードで修正する必要があります。FQDNで接続するようにコードを変更します。FQDNが開発マシンで解決できない場合は、それをホストファイルに追加するか、このFQDNを解決できるDNSサーバーでマシンを構成します。


「FQDNが開発マシンで解決できない場合は、それを単にhostsファイルに追加してください」–役立ちました。どうもありがとう!
Woland 2017年

私は同じことをしましたが、それでも問題は解決しません。このアプローチを使用して他にできることはありますか?
pkgajulapalli

9

他の回答がここで示唆するようにコードを変更したり、SSLを無効にするのではなく、サブジェクトの代替名を証明書に追加することにより、この問題を正しい方法で修正しました。例外が「件名の代替名がない」とはっきりと表示されている場合は、正しい方法で追加する必要があります

ステップバイステップで理解するためにこのリンクを見てください。

上記のエラーは、JKSファイルに、アプリケーションにアクセスしようとしている必要なドメインがないことを意味します。複数のドメインを追加するには、Open SSLとキーツールを使用する必要があります

  1. openssl.cnfを現在のディレクトリにコピーします
  2. echo '[ subject_alt_name ]' >> openssl.cnf
  3. echo 'subjectAltName = DNS:example.mydomain1.com, DNS:example.mydomain2.com, DNS:example.mydomain3.com, DNS: localhost'>> openssl.cnf
  4. openssl req -x509 -nodes -newkey rsa:2048 -config openssl.cnf -extensions subject_alt_name -keyout private.key -out self-signed.pem -subj '/C=gb/ST=edinburgh/L=edinburgh/O=mygroup/OU=servicing/CN=www.example.com/emailAddress=postmaster@example.com' -days 365
  5. 公開鍵(.pem)ファイルをPKS12形式にエクスポートします。これはパスワードを要求します

    openssl pkcs12 -export -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in
    self-signed.pem -inkey private.key -name myalias -out keystore.p12
  6. 自己署名PEM(キーストア)からa.JKSを作成する

    keytool -importkeystore -destkeystore keystore.jks -deststoretype PKCS12 -srcstoretype PKCS12 -srckeystore keystore.p12
  7. 上記のキーストアまたはJKSファイルから証明書を生成します

    keytool -export -keystore keystore.jks -alias myalias -file selfsigned.crt
  8. 上記の証明書は自己署名されており、CAによって検証されないため、トラストストアに追加する必要があります(Windowsの場合、JDKがインストールされている場所を確認するには、MACの以下の場所にあるCacertsファイルを確認してください)。

    sudo keytool -importcert -file selfsigned.crt -alias myalias -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts

元の回答はこちらのリンクに投稿されています


4

すべてのssl Verificaticationを無効にしたくない場合があるので、これを使用してhostName検証を無効にすることができます。

HttpsURLConnection.setDefaultHostnameVerifier(
    SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

[編集]

conapart3 SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIERで言及されているように、現在は非推奨となっているため、今後のバージョンで削除される可能性があるため、将来的には独自のロールバックを強制される可能性があります。ただし、すべての検証がオフになっているソリューションは回避するつもりです。


2
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIERは非推奨になりました。
conapart3

3

このエラーの発生に関する私の問題は、「qatest / webService」だけでなく、完全なURL「qatest.ourCompany.com/webService」を使用することで解決しました。理由は、セキュリティ証明書にワイルドカード(「* .ourCompany.com」)が含まれていたためです。完全な住所を入力すると、例外はなくなりました。お役に立てれば。


2

https://stackoverflow.com/a/53491151/1909708ですでに回答しています

これは失敗します。これは、証明書の共通名(CNcertificate内Subject)も代替名(証明書内)もSubject Alternative Nameターゲットホスト名またはIPアドレスと一致しないためです。

たとえば、JVMからWW.XX.YY.ZZ、DNS名(https://stackoverflow.com)ではなくIPアドレス()に接続しようとすると、Javaトラストストアに保存されている証明書がcacerts一般名(またはstackexchange.comや* .stackoverflow.comなどの証明書の代替名)を使用して、ターゲットアドレスと一致させます。

確認してください:https : //docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#HostnameVerifier

    HttpsURLConnection urlConnection = (HttpsURLConnection) new URL("https://WW.XX.YY.ZZ/api/verify").openConnection();
    urlConnection.setSSLSocketFactory(socketFactory());
    urlConnection.setDoOutput(true);
    urlConnection.setRequestMethod("GET");
    urlConnection.setUseCaches(false);
    urlConnection.setHostnameVerifier(new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession sslSession) {
            return true;
        }
    });
    urlConnection.getOutputStream();

上記では、HostnameVerifier常に返される実装オブジェクトを渡しましたtrue

new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession sslSession) {
            return true;
        }
    }

1

春のブーツの場合RestTemplate

  • org.apache.httpcomponents.httpcore依存関係を追加する
  • NoopHostnameVerifierSSLファクトリーに使用:

    SSLContext sslContext = new SSLContextBuilder()
            .loadTrustMaterial(new URL("file:pathToServerKeyStore"), storePassword)
    //        .loadKeyMaterial(new URL("file:pathToClientKeyStore"), storePassword, storePassword)
            .build();
    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
    CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(client);
    RestTemplate restTemplate = new RestTemplate(factory);

0

同じエラーメッセージが表示された後、私はこの質問に行きました。ただし、私の場合、同じサーバーに向けられた2つの異なるサブドメイン(http://example1.xxx.com/someservicehttp://example2.yyy.com/someservice)のURL がありました。このサーバーには、*。xxx.comドメインのワイルドカード証明書が1つしかありませんでした。2番目のドメインを介してサービスを使用すると、見つかった証明書(* .xxx.com)が要求されたドメイン(* .yyy.com)と一致せず、エラーが発生します。

この場合、SSLセキュリティを低下させてこのようなエラーメッセージを修正しようとするのではなく、サーバーとサーバー上の証明書を確認する必要があります。


0
public class RESTfulClientSSL {

    static TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            // TODO Auto-generated method stub
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            // TODO Auto-generated method stub
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            // TODO Auto-generated method stub
            return null;
        }
    }};

    public class NullHostNameVerifier implements HostnameVerifier {
        /*
         * (non-Javadoc)
         *
         * @see javax.net.ssl.HostnameVerifier#verify(java.lang.String,
         * javax.net.ssl.SSLSession)
         */
        @Override
        public boolean verify(String arg0, SSLSession arg1) {
            // TODO Auto-generated method stub
            return true;
        }
    }

    public static void main(String[] args) {

        HttpURLConnection connection = null;
        try {

            HttpsURLConnection.setDefaultHostnameVerifier(new RESTfulwalkthroughCer().new NullHostNameVerifier());
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());


            String uriString = "https://172.20.20.12:9443/rest/hr/exposed/service";
            URL url = new URL(uriString);
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            //connection.setRequestMethod("POST");

            BASE64Encoder encoder = new BASE64Encoder();
            String username = "admin";
            String password = "admin";
            String encodedCredential = encoder.encode((username + ":" + password).getBytes());
            connection.setRequestProperty("Authorization", "Basic " + encodedCredential);

            connection.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                StringBuffer stringBuffer = new StringBuffer();
                String line = "";
                while ((line = reader.readLine()) != null) {
                    stringBuffer.append(line);
                }
                String content = stringBuffer.toString();
                System.out.println(content);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
        }
    }
}

1
コードに説明文を追加してください。stackoverflow.com/help/how-to-answerを
jasie

1
これはセキュリティ上の欠陥です。これは、最初に証明書の検証を無効にする方法です。このソリューションをコピーして貼り付けると、ソフトウェアにセキュリティバグが発生します。
Marek Puchalski、

0

Springbootで双方向SSLを使用していました。私はすべて正しい設定サービスのtomcatサーバーとサービスの呼び出し元のRestTemplateを作成しました。「java.security.cert.CertificateException:サブジェクトの別名がありません」というエラーが発生しました

解決策を実行した後、JVMはこの証明書を必要とします。そうでないと、ハンドシェイクエラーが発生します。

次に、これをJVMに追加する方法について説明します。

jre / lib / security / cacertsファイルに移動します。サーバー証明書ファイルをjvmのこのcacertsファイルに追加する必要があります。

Windowsのコマンドラインからサーバー証明書をcacertsファイルに追加するコマンド。

C:\ Program Files \ Java \ jdk1.8.0_191 \ jre \ lib \ security> keytool -import -noprompt -trustcacerts -alias sslserver -file E:\ spring_cloud_sachin \ ssl_keys \ sslserver.cer -keystore cacerts -storepass changeit

サーバー証明書がインストールされているかどうかを確認します。

C:\ Program Files \ Java \ jdk1.8.0_191 \ jre \ lib \ security> keytool -list -keystore cacerts

インストールされている証明書のリストを見ることができます:

詳細:https : //sachin4java.blogspot.com/2019/08/javasecuritycertcertificateexception-no.html


0

証明書のCNに対応するIPを含むホストエントリを追加します。

CN = someSubdomain.someorganisation.com

次に、URLにアクセスしようとしているCN名でIPを更新します。

それは私のために働いた。


0

このコードはチャームのように機能し、残りのコードにはrestTempleオブジェクトを使用します。

  RestTemplate restTemplate = new RestTemplate();   
  TrustStrategy acceptingTrustStrategy = new TrustStrategy() {
            @Override
            public boolean isTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) {
                return true;
            }

        };

        SSLContext sslContext = null;
        try {
            sslContext = org.apache.http.ssl.SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy)
                    .build();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }
        SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
        CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build();
        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
        requestFactory.setHttpClient(httpClient);

        restTemplate.setRequestFactory(requestFactory);
}

0

CNとサブジェクトの別名(SAN)の両方を含む証明書がある場合、CNのコンテンツに基づいて要求を行うと、その特定のコンテンツもSANの下に存在する必要があります。そうでない場合、問題のエラーで失敗します。

私の場合、CNには何かがあり、SANには別のものがありました。SANのURLを使用する必要がありましたが、問題なく動作しました。


-3

C:\ Windows \ System32 \ drivers \ etcのフォルダーにあるhostsファイルにIPアドレスを追加します。また、IPおよびIPアドレスのドメイン名を追加します。例:aaa.bbb.ccc.ddd abc@def.com


-5

私は次の方法で問題を解決しました。

1.クラスを作成します。クラスにはいくつかの空の実装があります

class MyTrustManager implements X509TrustManager {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    return null;
}

public void checkClientTrusted(X509Certificate[] certs, String authType) {
}

public void checkServerTrusted(X509Certificate[] certs, String authType) {
}

@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate, String paramString)
        throws CertificateException {
    // TODO Auto-generated method stub

}

@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate, String paramString)
        throws CertificateException {
    // TODO Auto-generated method stub

}

2.メソッドの作成

private static void disableSSL() {
    try {
        TrustManager[] trustAllCerts = new TrustManager[] { new MyTrustManager() };

        // Install the all-trusting trust manager
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HostnameVerifier allHostsValid = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };
        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

  1. 例外がスローされる場所でdisableSSL()メソッドを呼び出します。それはうまくいきました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.