首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自签名证书将J2ME应用程序连接到https

使用自签名证书将J2ME应用程序连接到https
EN

Stack Overflow用户
提问于 2015-07-09 13:16:45
回答 1查看 572关注 0票数 2

我知道以前有人问过这个问题。但我真的不知道该怎么做。

我在tomcat服务器上创建了一个j2me应用程序和一个webservice,它在HTTP上工作得很好,Now我需要连接到HTTPS/TLS。

为了做到这一点,我遵循了以下步骤:

  1. 使用KeyTool,我在服务器端生成一个.keystore文件。
  2. 我在tomcat (在web浏览器中)中正确地运行HTTPS。
  3. 我把.keystore导入到我的WTK密钥商店。使用Mekeytool。

当我试图连接到我的https://server-ip/webservice时,使用以下代码片段:

代码语言:javascript
复制
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);
    }
}

抛出此异常:

代码语言:javascript
复制
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)

请帮帮忙。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-07-25 07:49:33

通过搜索超过15天,这个异常问题通过为tomcat和JDK安装一个旧版本来解决。

这可能发生在区分处理HTTPS/SSL连接的WTK和tomcat/JDK版本时。

  1. for tomcat 1.5
  2. for java version JKD 1.5_0_u7

我希望这会对其他人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31318651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档