Je construis un petit programme qui agit comme un client XMPP et j'utilise la bibliothèque Smack. Maintenant, le serveur auquel je me connecte nécessite SSL (dans Pidgin, je dois cocher "Forcer l'ancien (port 5223) SSL"). J'ai du mal à obtenir que Smack se connecte à ce serveur. C'est possible?Comment créer une connexion SSL à l'aide de la bibliothèque Smack XMPP?
Répondre
Jetez un coup d'œil à ce sujet.
http://www.igniterealtime.org/community/thread/37678
Essentiellement, vous devez ajouter ces deux lignes à votre code:
connConfig.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
connConfig.setSocketFactory(new DummySSLSocketFactory());
où connConfig est votre objet ConnectionConfiguration. Obtenez le DummySSLSocketFactory à partir du référentiel de code source Spark. Tout ce qu'il fait est d'accepter pratiquement n'importe quel certificat. Cela a semblé fonctionner pour moi. Bonne chance!
Oui, il est assez facile à réaliser. Jetez un coup d'œil à la classe ConnectionConfiguration, et en particulier à la méthode setSecurityMode qui accepte une énumération ConnectionConfiguration.SecurityMode en tant que paramètre. Régler ceci sur "required" oblige Smack à utiliser TLS.
du Javadoc:
Securirty via le cryptage TLS est nécessaire pour se connecter. Si le serveur n'offre pas TLS ou si la négociation TLS échoue, la connexion au serveur échouera.
Vous pouvez y parvenir par ce qui suit:
Stockage du certificat CA dans Keystore
Pour stocker le certificat dans un keystore procédez comme suit.
Étape 1: Téléchargez le fichier JAR de Bouncycastle. Il peut être téléchargé à partir du ici: Bouncy Castle JAVA presse
Étape 2: Utilisez la commande suivante pour stocker le certificat keystore
keytool -importcert -v -trustcacerts -file "<certificate_file_with_path>" -alias "<some_name_for_certificate>" -keystore "<file_name_for_the_output_keystore>" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "<bouncy_castle_jar_file_with_path>" -storetype BKS -storepass "<password_for_the_keystore>"
Étape 3: Vérifier le keystore fichier
keytool -importcert -v -list -keystore "<file_name_for_the_keystore_with_path>" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "<bouncy_castle_jar_file_with_path>" -storetype BKS -storepass "<password_for_the_keystore>"
Ceci doit nous lister le certificat inclus dans le fichier de clés.
Nous avons un keystore que nous pouvons utiliser dans notre code.
Utilisation du keystore
Après avoir généré ce fichier de clés, enregistrez-le dans le dossier brut de votre application. Utilisez le code ci-dessous pour obtenir la négociation avec le serveur openfire.
Pour créer une connexion avec openfire en utilisant XMPP, vous devrez peut-être obtenir la configuration. Pour la même, utilisez la méthode ci-dessous:
public ConnectionConfiguration getConfigForXMPPCon(Context context) { ConnectionConfiguration config = new ConnectionConfiguration(URLConstants.XMPP_HOST, URLConstants.XMPP_PORT); config.setSASLAuthenticationEnabled(false); config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled); config.setCompressionEnabled(false); SSLContext sslContext = null; try { sslContext = createSSLContext(context); } catch (KeyStoreException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (CertificateException e) { e.printStackTrace(); } config.setCustomSSLContext(sslContext); config.setSocketFactory(sslContext.getSocketFactory()); return config; } private SSLContext createSSLContext(Context context) throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException, IOException, CertificateException { KeyStore trustStore; InputStream in = null; trustStore = KeyStore.getInstance("BKS"); if (StringConstants.DEV_SERVER_IP.equals(URLConstants.XMPP_HOST) || StringConstants.TEST_SERVER_IP.equals(URLConstants.XMPP_HOST)) in = context.getResources().openRawResource(R.raw.ssl_keystore_dev_test); else if(StringConstants.STAGE_SERVER_IP.equals(URLConstants.XMPP_HOST) || StringConstants.STAGE2_SERVER_IP.equals(URLConstants.XMPP_HOST)) in = context.getResources().openRawResource(R.raw.ssl_keystore_stage); else if(StringConstants.PROD_SERVER_IP.equals(URLConstants.XMPP_HOST) || StringConstants.PROD1_SERVER_IP.equals(URLConstants.XMPP_HOST)) in = context.getResources().openRawResource(R.raw.ssl_keystore_prod); trustStore.load(in, "<keystore_password>".toCharArray()); TrustManagerFactory trustManagerFactory = TrustManagerFactory .getInstance(KeyManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trustStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom()); return sslContext; }
Tout fait .. !! Connectez-vous simplement. Votre connexion est maintenant sécurisée.
Tous suivent la même chose dans mon blog à smackssl.blogspot.in
Quelles sont les classes 'Context' et' R'? –
@Alastair 'Context' est le contexte de l'application ou de la classe, que vous pouvez passer en utilisant' this'. Et 'R' est une classe à partir de laquelle je reçois les magasins de clés stockés dans mon disque dur dans le répertoire brut, vous pouvez passer directement cette ressource à l'intérieur par tout autre moyen que vous le souhaitez aussi. – Iqbal
On dirait que vous travaillez dans un cadre spécifique. Android? Je ne le suis pas, alors ça m'a un peu dérouté. Mais je l'ai compris. Merci quand même. –
- 1. Comment créer une connexion SSL en PHP avec SO_KEEPALIVE?
- 2. XMPP et Android
- 3. Envoyer un message xmpp à l'aide d'une bibliothèque python
- 4. openfire smack lib
- 5. Windows Mobile Sockets SSL Bibliothèque de communication
- 6. structure de données laide à la recherche java
- 7. Bibliothèque ssl manquante lors de la connexion à POP3 sur SSL à partir d'un ActiveX développé dans Delphi-7 avec le client indy 9?
- 8. Comment rediriger vers (ou appliquer) une connexion SSL?
- 9. Comment créer une bibliothèque statique pour iPhone?
- 10. Puis-je créer une connexion à une base de données dans un projet de bibliothèque de classes?
- 11. Connexion de phpMyAdmin à un serveur MySQL via SSL
- 12. Déterminer la connexion SSL derrière un équilibreur de charge
- 13. Informations de connexion sécurisées sans SSL
- 14. Création d'une connexion client TCP avec SSL
- 15. Erreur de domaine SSL dans la connexion IPhone- https
- 16. Quelle est la meilleure architecture pour passer à XMPP?
- 17. Comment configurer un certificat de test pour une connexion SSL dans .NET?
- 18. Existe-t-il une bibliothèque/un module python pour créer une connexion multi ssh?
- 19. Python2.6 xmpp Erreur Jabber
- 20. Bonne bibliothèque SMTP + SSL/TLS pour C?
- 21. Comment créer un certificat pour le développement local avec SSL?
- 22. Une simple bibliothèque cliente Python IRC prenant en charge SSL?
- 23. Gestion des connexions SSL et non SSL lors de l'héritage de httplib.HTTP (s) Connexion
- 24. Socket SSL dans Windows. Bibliothèque? Synchrone/asynchrone? Threads?
- 25. Comment configurer une source de données ColdFusion MySQL via SSL?
- 26. La connexion Delphi 6 et Indy SSL ne fonctionne pas
- 27. Comment programmer la dernière heure de connexion à une machine?
- 28. Gestion des connexions à un serveur XMPP via des servlets
- 29. Comment configurer CMake pour créer une bibliothèque pour l'iPhone
- 30. openfire smack envoi paquet 404 erreur signifie?
Ce DummySSLSocketFactory permet à tout passé du certificat, même si elle est arrivé à expiration ou non roussis par une autorité de certification racine Je suggère donc l'approche d'obtenir le certificat CA et de le stocker dans KeyStore et de l'ajouter dans l'application et d'utiliser la même chose. S'il vous plaît se référer la réponse par moi pour plus de détails. – Iqbal