Skip to Main Content

Embedded Technologies

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Connect Midlet to https server with self-signed Certificate

2985420Jul 23 2015 — edited Jul 23 2015

Hello there.

I created a j2me app and a webservice in a tomcat server, it works perfect on HTTP, Now i need to connect to HTTPS/TLS.

To do that i followed this steps:

  1. using Keytool i generate a .keystore file in the server–side.
  2. i run HTTPS correctly in tomcat (in web browser).
  3. i took the .keystore and i import it to my WTK keys stores. by using Mekeytool.

When i try to connect ot my https://server-ip/webservice, using this snippet of code:

public class HttpsMIDlet extends MIDlet implements CommandListener, Runnable {
private Display mDisplay;
private Form mForm;

public void startApp() {
  mDisplay
= Display.getDisplay(this);

  
if (mForm == null) {
  mForm
= new Form("HttpsMIDlet");

  mForm
.addCommand(new Command("Exit", Command.EXIT, 0));
  mForm
.addCommand(new Command("Send", Command.SCREEN, 0));
  mForm
.setCommandListener(this);
  
}

  mDisplay
.setCurrent(mForm);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

public void commandAction(Command c, Displayable s) {
  
if (c.getCommandType() == Command.EXIT)
  notifyDestroyed
();
  
else {
  
Form waitForm = new Form("Connecting...");
  mDisplay
.setCurrent(waitForm);
  
Thread t = new Thread(this);
  t
.start();
  
}
}

public void run() {
  
String url = "https://server-ip/webserive";

  
try {
  
// Query the server and retrieve the response.
  
HttpsConnection hc = (HttpsConnection) Connector.open(url);

  
SecurityInfo si = hc.getSecurityInfo();
  
Certificate c = si.getServerCertificate();
  
String subject = c.getSubject();
  
System.out.println();

  
String s = "Server certificate subject: \n" + subject;
  
Alert a = new Alert("Result", s, null, null);
  a
.setTimeout(Alert.FOREVER);
  mDisplay
.setCurrent(a, mForm);

  hc
.close();
  
} catch (IOException ioe) {
  
Alert a = new Alert("Exception", ioe.toString(), null, null);
  
System.out.println(ioe.toString());
  a
.setTimeout(Alert.FOREVER);
  mDisplay
.setCurrent(a, mForm);
  
}

}

it throws this Exception:

java.io.IOException: Bad record type (21) or version (3.3)
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.https.Protocol.connect(+214)
at com
.sun.midp.io.j2me.http.Protocol.streamConnect(+57)
at com
.sun.midp.io.j2me.http.Protocol.startRequest(+12)
at com
.sun.midp.io.j2me.http.Protocol.sendRequest(+38)
at com
.sun.midp.io.j2me.http.Protocol.sendRequest(+6)
at com
.sun.midp.io.j2me.http.Protocol.openInputStream(+9)

Some help please. thank you.

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 20 2015
Added on Jul 23 2015
1 comment
996 views