2016-06-15 13 views
3

アンドロイドのサーバーとクライアントのIO。HTTPSプロトコルとのAndroid接続のSocket.ioクライアントが失敗しましたか?

それはGitHubの上のサンプルからの参照を取った、私はAndroid上でHTTPS接続を実装しようとした

(ただし、それを無効にする場合は正常に動作します)限り、私はHTTP(S)SSLを有効にするとアンドロイドの接続エラーになります

opts = new IO.Options(); 
opts.sslContext = mySSLContext; 
opts.hostnameVerifier = myHostnameVerifier; 
socket = IO.socket("https://mychat.url", opts); 

もこの

SSLContext mySSLContext = SSLContext.getInstance("TLS"); 
mySSLContext.init(null, null, null); 

この

次のように
myHostnameVerifier = new HostnameVerifier() { 
    @Override 
    public boolean verify(String hostname, SSLSession session) { 
     return true; 
    } 
}); 

はまだソケット輸送中にエラーメッセージが表示されました

io.socket.engineio.client.EngineIOException: xhr poll error 

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

何それは、HTTPSプロトコルとの接続ioのソケットを満たすために時間がかかりますか?

+0

私はよく分からないかもしれませんが、マネージャーとしての信頼の問題です。こちらをご覧ください。https://developer.android.com/training/articles/security-ssl.html – Apurva

+0

@Apurvaあなたに感謝します。私はそれを自分で解決します。 。そうです、それはTrustManagerの問題です。 –

答えて

4

@Apurvaのおかげで、私は自分で解決します。

ので、私は、パラメータtrustAllCertsで

mySSLContext.init(null, trustAllCerts, null); 

を追加したのTrustManagerは、SSLContextの

を初期化する必要があるようだが

private final TrustManager[] trustAllCerts= new TrustManager[] { new X509TrustManager() { 
    public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
     return new java.security.cert.X509Certificate[] {}; 
    } 

    public void checkClientTrusted(X509Certificate[] chain, 
            String authType) throws CertificateException { 
    } 

    public void checkServerTrusted(X509Certificate[] chain, 
            String authType) throws CertificateException { 
    } 
} }; 

そして最後に成功し、サーバをチャットに接続を参照してください。

+0

mitm攻撃を有効にしていますが、それはほとんど効果があります:p – Stefan

関連する問題