XMPP istemcisi olarak davranan küçük bir program yapıyorum ve Smack kitaplığını kullanıyorum. Şimdi, bağlandığım sunucu SSL gerektiriyor (Pidgin'de "Zorla eski (port 5223) SSL") kontrol etmem gerekiyor. Smack'in bu sunucuya bağlanmasında sorun yaşıyorum. Mümkün mü?Smack XMPP kütüphanesi kullanılarak SSL bağlantısı nasıl oluşturulur?
cevap
Bu konuya bir bakın.
http://www.igniterealtime.org/community/thread/37678
Esasen, kodunuza Bu iki satırı eklemeniz gerekir:
connConfig.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
connConfig.setSocketFactory(new DummySSLSocketFactory());
connConfig sizin ConnectionConfiguration nesnedir nerede. Spark kaynak kod deposundan DummySSLSocketFactory'yi edinin. Tek yaptığı neredeyse tüm sertifikaları kabul ediyor. Bu benim için çalışıyor gibi görünüyordu. İyi şanslar!
Evet, başarmak oldukça kolay. ConnectionConfiguration sınıfına ve özellikle bir ConnectionConfiguration.SecurityMode enum parametresini kabul eden setSecurityMode yöntemine bakın. Bunu "gerekli" kuvvetlere ayarlayarak TLS'yi kullan. Javadoc gelen
:Securirty TLS ile şifreleme bağlamak için gereklidir. sunucusu TLS sunmuyorsa veya TLS negotiaton başarısız olursa, sunucuya bağlantısı başarısız olur.
aşağıdaki bunu başarabilirsiniz:
şu adımları izleyin bir anahtar deposundaki sertifikayı depolamak için anahtar deposu
CA Sertifikası saklanması.
Adım 1: Bouncycastle JAR dosyasını karşıdan yükleyin. Buradan indirilebilir: anahtar deposunu Doğrulama: aşağıdaki komutu kullanın deposundaki sertifikayı
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>"
Adım 3 saklamak için: Bouncy Castle JAVA
Adım 2 Bültenleri dosya
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>"
Bu, bize anahtar deposunda bulunan sertifikayı listeleyecektir.
Kodumuzda kullanabileceğimiz bir anahtar depomuz var. Bu anahtar deposunu oluşturduktan sonra anahtar deposunu
kullanma
, uygulamanın ham klasörüne kaydedin. Sertifikayı openfire sunucusuyla el sıkışması için aşağıdaki kodu kullanın.
XMPP kullanarak açık ateşle bağlantı oluşturmak için, yapılandırmayı almanız gerekebilir. Aynı için aşağıdaki yöntemi kullanın:
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; }
Hepsi bitti .. !! Sadece bağlanın .. Şimdi bağlantınız güvenceye alındı. Bir kök CA tarafından imzalanmıştır süresi dolmuş veya olmasa bile
Tüm
, smackssl.blogspot.in'Bağlam 've' R' sınıfları nelerdir? –
@Alastair 'Bağlamı' 'this' kullanılarak geçirebileceğiniz uygulama veya sınıf düzeyi bağlamıdır. Ve 'R', sabit dizinimde ham dizinde saklanan anahtar depoları aldığım bir sınıftır, bu kaynağı da istediğiniz gibi başka yollarla iletebilirsiniz. – Iqbal
Belirli bir çerçevede çalışıyormuşsunuz gibi görünüyor. Android? Ben değilim, bu yüzden biraz kafamı karıştırdı. Ama ben anladım. Yine de teşekkürler. –
- 1. Android Studio'da Smack 4.1 ile XMPP Bağlantısı
- 2. XMPP (smack)
- 3. node.js kullanılarak openshift uygulamasında mongodb bağlantısı nasıl oluşturulur
- 4. XMPP "stream: error (conflict)" ile giriş yapma (a) Smack
- 5. Yeni kullanıcı oluştururken Smack XMPP hatası: yasak - auth
- 6. Meteor SSL bağlantısı
- 7. XMPP SSL El sıkışma başarısız oldu
- 8. Smack istemcisi Android ile Ejabberd bağlantısı nasıl yapılır?
- 9. Kereviz işçileri arasında paylaşılan XMPP bağlantısı
- 10. Zend-Framework ile MySQL SSL bağlantısı
- 11. Coğrafi Konum SSL bağlantısı olmadan
- 12. Bir etkinlikten diğerine aynı xmpp bağlantısı nasıl alınır?
- 13. Smack ve Openfire'da Giriş Yapamazsınız
- 14. node-jdbc kullanılarak nasıl oluşturulur?
- 15. XMPP ve Android
- 16. PHPExcel kütüphanesi kullanılarak excelden nasıl tarih alınacağı
- 17. Armv7 mimarisinde mcrypt kütüphanesi nasıl oluşturulur?
- 18. Mysql Workbench bağlantısı ssl etkin değil
- 19. SSL bağlantısı neden karışık içerik hatası alıyor?
- 20. Python 2.7.10 üzerindeki SSL kütüphanesi, PROTOCOL_TLSv1_2 içermiyor ve SSL kütüphanesi hesaplarının hatalarını
- 21. Openfire, Smack login()
- 22. javax.net.ssl.SSLException: Tanınmayan SSL iletisi, düz metin bağlantısı?
- 23. PhoneGap için javascript kodu için XMPP sunucu bağlantısı
- 24. Chrome senkronizasyon XMPP sunucularında nasıl kimlik doğrulama yapılır?
- 25. smack RosterListener Android içinde çalışmıyor
- 26. Mosby kütüphanesi nasıl oluşturulur ve kullanılır?
- 27. Görüntü olarak bir bağlantı bağlantısı nasıl oluşturulur?
- 28. AsyncTask sınıfı kullanarak Http Bağlantısı nasıl oluşturulur?
- 29. SSL ile bir TCP İstemci Bağlantısı Oluşturma
- 30. Java, veritabanı bağlantısı için SSL kullan
Bu DummySSLSocketFactory herhangi sertifika geçmiş verir benim blog aynı izleyin Bu yüzden, CA Sertifikasını almayı ve bunu KeyStore'da saklamayı ve uygulamayı ekleyerek ve kullanarak kullanmayı öneririm. Daha fazla bilgi için lütfen cevaba bakın. – Iqbal