Autore Topic: No Peer Certificate Error  (Letto 2247 volte)

Offline gio88

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
No Peer Certificate Error
« il: 29 Marzo 2012, 17:46:18 CEST »
0
Ciao a tutti,
sto cercando di effettuare un https post su un sito ma non riesco perche mi da come errore "No peer certificate".
Qualcuno saprebbe aiutarmi???? :)

Offline leencoo

  • Nuovo arrivato
  • *
  • Post: 16
  • Înjunghia dvs. zâmbet demonice pentru creierul me
  • Respect: 0
    • Google+
    • leencoo
    • Mostra profilo
  • Dispositivo Android:
    Eee Pad Transformer Prime TF201
  • Sistema operativo:
    Ubuntu 11.04, Windows 7
Re:No Peer Certificate Error
« Risposta #1 il: 29 Marzo 2012, 20:04:45 CEST »
0
dacci qualche informazione in più ... cosi' magari capiamo il problema.. e manda il log cat... intanto dai un'occhiata qui http://www.virtualzone.de/2011-02-27/how-to-use-apache-httpclient-with-httpsssl-on-android/

facci sapere cosa fai 8-)
+----------------------------------------------------------+
| GnuPG/PGP Key-Id: 0x131E883F                      |
| ()  ascii ribbon campaign - against html e-mail |
| /\  against proprietary attachments                 |

Offline gio88

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
Re:No Peer Certificate Error
« Risposta #2 il: 30 Marzo 2012, 09:42:34 CEST »
0
questo è il codice che uso per la connessione al server e per le richieste post
Codice (Java): [Seleziona]
     String url = "https://.....";
                        String content = "user=.....&pass=......";

                        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());

                        InputStream instream = v.getContext().getAssets().open("keystore.bks");  // qui prendi il file da assets
                        trustStore.load(instream, "password".toCharArray());
                        instream.close();
                                       
                        SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
                        HostnameVerifier hostnameVerifier = SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;

                        socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
                        Scheme sch = new Scheme("https", socketFactory, 443);
                        client.getConnectionManager().getSchemeRegistry().register(sch);
                                       
                        HttpPost httpPost = new HttpPost(url);

                        httpPost.setEntity(new StringEntity(content,HTTP.UTF_8));
                        HttpResponse httpResponse = client.execute(httpPost);

                        StatusLine statusLine  = httpResponse.getStatusLine();
                        if (statusLine.getStatusCode() == HttpStatus.SC_OK) {


                                HttpEntity httpEntity = httpResponse.getEntity();

                                String xmlResponse = EntityUtils.toString(httpEntity,"UTF-8");

                                httpEntity.consumeContent();

                                response.setText(xmlResponse);
                        }
« Ultima modifica: 30 Marzo 2012, 09:44:15 CEST da gio88 »

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
Re:No Peer Certificate Error
« Risposta #3 il: 06 Maggio 2012, 15:55:31 CEST »
0
Credo di sapere il perché dell'errore quando ti connetti all'host usi un determinato url con un determinato dominio se quel dominio non compare nel campo CN del certificato la connessione non va a buon fine nonostante il certificato sia corretto questo perché molto spesso nei certificati ci sono dei nomi alternativi (DNS) per cui il certificato è valido ma se l'url che usi contiene un dominio che compare come DNS (nome alternativo) e non come CN allora non ci si riesce a connettere.

Utilizza questi socket:

Codice (Java): [Seleziona]
package com.juliasoft.libretto.connection;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.conn.ssl.SSLSocketFactory;

public class MySSLSocketFactory extends SSLSocketFactory {
       
        SSLContext sslContext = SSLContext.getInstance("TLS");

        public MySSLSocketFactory(KeyStore truststore)
                        throws NoSuchAlgorithmException, KeyManagementException,
                        KeyStoreException, UnrecoverableKeyException {
                super(truststore);

                TrustManager tm = new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(X509Certificate[] chain,
                                        String authType) throws CertificateException {
                        }

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

                        @Override
                        public X509Certificate[] getAcceptedIssuers() {
                                return null;
                        }
                };

                sslContext.init(null, new TrustManager[] { tm }, null);
        }

        @Override
        public Socket createSocket(Socket socket, String host, int port,
                        boolean autoClose) throws IOException, UnknownHostException {
                return sslContext.getSocketFactory().createSocket(socket, host, port,
                                autoClose);
        }

        @Override
        public Socket createSocket() throws IOException {
                return sslContext.getSocketFactory().createSocket();
        }
}