簡體   English   中英

從Android Lollipop 5.0開始,我無法通過SSL或TLSv1與服務器(X509TrustManager)通信

[英]Since Android Lollipop 5.0 I am not able to communicate to server (X509TrustManager) via SSL or TLSv1

我希望有人可以在這里幫助我。 從Android Lollipop 5.0開始,我無法通過SSL與服務器(X509TrustManager)進行通信。 該應用似乎進入了無限循環,試圖建立握手。 這是我的代碼:

    SSLContext sc;
SSLSocket sslsock;
Socket sock;

// Constructor
RfbProto(String h, int p) throws IOException{
        host = h;
        port = p;

        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){}
                }
        };  

        try {
            sc = SSLContext.getInstance("SSL");  
            sc.init(null, trustAllCerts, new java.security.SecureRandom());  
        } catch (Exception e) { }

        sock = new Socket();
        sock.connect(new InetSocketAddress(host, port), 5000);
        sock.setSoTimeout(10000);

        SSLSocketFactory factory = (SSLSocketFactory)sc.getSocketFactory();
        sslsock = (SSLSocket)factory.createSocket(sock, null, 0, false);

        is = new DataInputStream(new BufferedInputStream(sock.getInputStream(), 16384));
        os = sock.getOutputStream();    

        timing = false;
        timeWaitedIn100us = 5;
        timedKbits = 0;
    }

    public void enableSSL() throws IOException{

        this.sslEnabled = true;

        final SSLSocket fSock = sslsock;
        sslsock.addHandshakeCompletedListener(new HandshakeCompletedListener() {            
            @Override
            public void handshakeCompleted(HandshakeCompletedEvent event) {
                try {
                    Certificate[] peerCertificates = event.getPeerCertificates();
                    if (peerCertificates.length > 0) {
                        serverCertificate = (X509Certificate)peerCertificates[0];
                    }       
                    is = new DataInputStream(new BufferedInputStream(fSock.getInputStream(), 16384));
                    os = fSock.getOutputStream();

                } catch (SSLPeerUnverifiedException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        try {
            fSock.startHandshake();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

查看Android 5.0的更改 ,TLS / SSL默認配置中有一些更改,但是我不確定從哪里開始。 任何幫助,將不勝感激

嘗試強制TLSv1握手。 由於最后一次SSL被認為是易受攻擊的(POODLE),並且在許多服務器中應用程序被禁用(例如,所有付款組織,如Visa / MasterCard)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM