Manticore Posté(e) 25 avril 2011 Share Posté(e) 25 avril 2011 Bonjour, je suis actuellement en train de dévelloper une petite application qui a besoin de se connecter en ssl, ceci avec une authentification forte (client + serveur). J'utilise pour cela un certificat chainé. Malheusement mon keymanager n'envoie que le premier certificat, ce qui fait que mon serveur n'arrive pas à reconnaitre la CA. Est-il possible de spécifier l'envoie de toute la chaine de certificat et non plus seulement le premier ? Merci de votre aide voici le code que j'utilise // Connexion HTTPS public void setHTTPS() throws IOException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException{ URL myurl = new URL(URL); String trustStorePassword = PASSTRUSTSTORE; String keyStorePassword = PASSKEYSTORE; // Création du TrustManagers et du KeyManager TrustManager[] trustManagers = createTrustManagers(trustStorePassword); KeyManager[] keyManagers = createKeyManagers(keyStorePassword); // Création du contest SSL (authentification bidirectionnelle et protocole utilise) SSLContext sslContext=SSLContext.getInstance("TLS"); sslContext.init(keyManagers,trustManagers,null); SSLSocketFactory socketFactory = sslContext.getSocketFactory(); String[][] data = new String[12][2]; String encodedData = null; Mesure newMes = (Mesure) mesList.getLast(); ... //Chargement de la page HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory); con.setRequestProperty("Content-Length", "" + encodedData.length()); con.setRequestProperty("Content-Type", "Application/x-www-form-urlencoded"); con.setRequestMethod("POST"); con.setDoOutput(true); OutputStream os = con.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); osw.write(encodedData); osw.flush(); // envoie osw.close(); // Fermeture } // Creation du TrustManager pour l'authentification du serveur private TrustManager[] createTrustManagers(String trustStorePassword) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException { // Creation du KeyStore en specifiant l extension du certificat accepte KeyStore trustStore = KeyStore.getInstance("BKS"); // Creation d un Inputstream pour recupere le ficher Truststore (ressource) InputStream inputstream = this.getResources().openRawResource(R.raw.mytruststore); // Initialise le Keystore avec le certificat de confiance et son mot de passe trustStore.load(inputstream, trustStorePassword.toCharArray()); //Création du TrustManagerFactory et chargement du certificat dans celui ci TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trustStore); return trustManagerFactory.getTrustManagers(); } private KeyManager[] createKeyManagers(String keyStorePassword) throws CertificateException, IOException, KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException { // Creation du KeyStore en specifiant l extension du certificat accepte KeyStore keyStore = KeyStore.getInstance("BKS"); // Creation d un Inputstream pour recupere le ficher Truststore (ressource) InputStream inputstream = this.getResources().openRawResource(R.raw.mykeystore); // Initialise le Keystore avec le certificat de confiance et son mot de passe keyStore.load(inputstream, keyStorePassword.toCharArray()); //create keymanager factory and load the keystore object in it KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keyStore, keyStorePassword.toCharArray()); KeyManager[] keyManager = keyManagerFactory.getKeyManagers(); return keyManager; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
Manticore Posté(e) 27 avril 2011 Auteur Share Posté(e) 27 avril 2011 Personne n'utilise d'authentification client ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Roberto125 Posté(e) 4 mai 2011 Share Posté(e) 4 mai 2011 Bonsoir Manticore, pouvez-vous décrire un peu plus votre besoin ? S'agit-il d'un site pour un besoin interne ou pour un site orienté à l'extérieur (exemple: site d'e-commerce) ? Quelle application dévellopez-vous donc ? Le certificat que vous utilisez, de quelle Autorité de Certification est-il ? VeriSign GlobalSign Thawte GeoTrust RapidSSL Networking4all ? En attente de vous lire, http://www.networking4all.com/fr/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.