Java ME - Obsługa TLS w SMTP

0

Witam,
pracuję nad stworzeniem klienta poczty elektronicznej na telefony komórkowe w Java ME. Wspomnę dodatkowo, że nie używam żadnych dodatkowych bibliotek tylko z klasy SecureConnection.

Jeżeli chodzi o wysyłanie maili na pocztę m.in. o2 (z wykorzystaniem SSL) to ta opcja już działa, ale z pocztą gmail tak łatwo już nie jest. Mianowicie nie wiem jak obsłużyć połączenie z wykorzystaniem szyfrowania TLS, bo takowe jest wymagane do komunikacji z SMTP (a dokładnie z ESMTP). Moje połączenie z serwerem wygląda następująco:
SecureConnection sc =(SecureConnection)Connector.open("ssl://smtp.gmail.com:465",Connector.READ_WRITE, true);

 
Po wykonaniu powyższego kodu dostaję komunikat IOException. Nie wiem w czym dokładnie tkwi problem. Może w przypadku TLS trzeba inaczej ustanowić połączenie z serwerem ? A co z certyfikatem? Trzeba ten certyfikat pobrać z serwera gmail? Trzeba mieć jakiś certyfikat na telefonie (w tym przypadku na emulatorze)? Jak by co udało mi się uzyskać informację na temat wersji certyfikatu na serwerze gmail jest to TLS_RSA_WITH_RC4_128_MD5;

W tym momencie najważniejsza dla mnie jest odpowiedź jak obsłużyć TLS w J2ME oraz co z tym certyfikatem.
Jeżeli jest ktoś w stanie mi pomóc lub podpowiedzieć co robię źle lub co zrobić żeby to zadziałało to byłbym wdzięczny. 
Trochę tu namieszałem ale mam nadzieje że zrozumiecie:)
Pozdrawiam
0
mi14chal napisał(a)

Poczytaj: http://developers.sun.com/mobility/midp/articles/security2/

Dzięki za odpowiedź.
Czytałem to już kilkakrotnie, próbowałem coś z tego skleić, ale bez efektu:/
Jakieś inne propozycje?

0

Pokaż co konkretnie robiłeś i co konkretnie nie działało.

0
mi14chal napisał(a)

Pokaż co konkretnie robiłeś i co konkretnie nie działało.

		      try {
		    	  SecureConnection sc = (SecureConnection)Connector.open("ssl://poczta.o2.pl:587");    
		    	  SecurityInfo info = sc.getSecurityInfo();
                          System.out.println("Suite " + info.getCipherSuite() + "\nCertificate: " + info.getServerCertificate() + "\nProtocol " + info.getProtocolName());
		    	         sc.setSocketOption(SocketConnection.LINGER, 5);

		    	         is = sc.openInputStream();
		    	         os = sc.openOutputStream();
		    	         
		    	         os.write(("EHLO "+from+ "\r\n").getBytes());
		    	         os.write(("AUTH LOGIN"+ "\r\n").getBytes());
                                 //tutaj są pozostałe komendy
StringBuffer sb = new StringBuffer();
		    	         int c = 0;
		    	         while (((c = is.read()) != -1) ) {
		    	            sb.append((char) c);
		    	         }
		    	         System.out.println("SMTP server response - " + sb.toString());      

		    	      } catch(IOException e) {
		    	    	     e.printStackTrace();
		    	      } finally {
		    	         try {
		    	            if(is != null) {
		    	               is.close();
		    	            }
		    	            if(os != null) {
		    	               os.close();
		    	            }
		    	            if(sc != null) {
		    	               sc.close();
		    	            }
		    	         } catch(IOException e) {
		    	            e.printStackTrace();
		    	         }
		    	      }

Nie mogę wrzucić całego kodu. Okazało się że poprzednio jak używałem poczty o2 to podawałem nr portu smtp 465 bez szyfrowanie ssl i działało. Ten podany wyżej 587 jest z szyfrowaniem ssl i teraz nie działa. Pojawia się taki błądjava.io.IOException: Bad record type (50) or version (50.48)
at com.sun.midp.ssl.Record.rdRec(+284)
at com.sun.midp.ssl.Record.rdRec(+5)
at com.sun.midp.ssl.Handshake.getNextMsg(+17)
at com.sun.midp.ssl.Handshake.rcvSrvrHello(+5)
at com.sun.midp.ssl.Handshake.doHandShake(+29)
at com.sun.midp.ssl.SSLStreamConnection.<init>(+173)
at com.sun.midp.ssl.SSLStreamConnection.<init>(+12)
at com.sun.midp.io.j2me.ssl.Protocol.openPrim(+249)
at javax.microedition.io.Connector.openPrim(+299)
at javax.microedition.io.Connector.open(+15)
at javax.microedition.io.Connector.open(+6)
at javax.microedition.io.Connector.open(+5)
at EmailClient.run(+6)

 
W miejscu <code><SecureConnection sc = (SecureConnection)Connector.open("ssl://poczta.o2.pl:587"); /code>
Najwyraźniej chodzi o ten certyfikat którego nie mam w emulatorze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1