javax.microedition.pki 证书验证失败
Posted
技术标签:
【中文标题】javax.microedition.pki 证书验证失败【英文标题】:javax.microedition.pki Certificate Failed Verification 【发布时间】:2017-08-20 17:20:57 【问题描述】:我正在尝试在 Java ME MIDP 应用程序中读取来自 Google Sheets API 的 JSON 回复。我用其他地址尝试了以下操作,它可以很好地接收它们的内容,但我要使用的实际 API 是 Sheets,它总是返回“证书验证失败”异常。
HttpConnection c = null;
InputStream is = null;
StringBuffer str = new StringBuffer();
try
c = (HttpsConnection)Connector.open(urlstring);
c.setRequestMethod(HttpConnection.GET);
c.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
c.setRequestProperty("User-Agent","Profile/MIDP-2.1 Configuration/CLDC-1.1");
is = c.openInputStream();
int len = (int)c.getLength();
int ch;
while ( (ch = is.read() ) != -1)
str.append((char)ch);
catch( Exception e ) alert( ""+e );
return str.toString();
如果 URL 以 Https 开头,Connector.open() 会隐式返回一个 HttpsConnection,因此它应该仍然有效。
HTTPS 请求示例
https://jsonplaceholder.typicode.com/posts/1
这不起作用,但上面也允许 HTTP 连接
http://jsonplaceholder.typicode.com/posts/1
哪个会起作用。
但是,Google 表格需要 HTTPS,因此无法通过上述代码获取。如何通过 HTTPS 向工作表 API 发出 GET 请求?谢谢。
【问题讨论】:
在 Sun Java Wireless Toolkit for CLDC 中,您可以设置权限 MIDlet 权限。我已经为 javax.microedition.io.Connector.https 设置了权限,但它仍然没有返回任何响应。 【参考方案1】:在为我们的一款游戏实施在线高分系统时,我遇到了类似的问题。它可以在某些手机上获得高分,但在其他手机上不起作用。说明:
有些手机有自己的内置“MIME 类型检查器”。当您拨打(HttpConnection)Connector.open(urlstring)
时,电话会收到text/html
的回复。当它收到application/json
(或其他)响应时,手机会给出自己的“未找到”错误。
不确定您的问题是否相关,但值得一试吗?看看是否可以在HttpConnection
的请求头中添加mime-type“application/json”。
【讨论】:
这样就可以生成异常了。javax.microedition.pki certificate failed verification
我在网上看过这个,但找不到太多关于它的信息。这是索尼爱立信的手机。由于Communication failure. Secure connection failed
,我无法使用默认浏览器浏览https,但我可以使用我安装的Java应用程序Opera Mini。我将尝试查看 Opera 中的 .java 文件,看看它如何处理 https
实际上,我似乎可以使用默认浏览器通过 HTTPS 访问一些网站。问我是否要继续。但只有一些。
可以证实怀疑。索尼爱立信是什么型号的?大多数 Sony Ericsson 型号应该不会给您带来任何麻烦,但也有一些型号不是他们自己制造的,例如 F305,如果访问返回不同 mime 类型内容的网站,它可能会出现这种情况。尝试在您的请求标头中添加 mime-type application/json; charset=UTF-8
。
我已经用新代码更新了帖子,但它仍然抛出证书失败验证异常。这是W995。您的 jar 是否使用证书签名?
不,我没有在我的罐子上签名。这不是必需的。它所做的只是跳过弹出消息。如果您坚持签署您的 jar,请记住您需要从受信任的提供者处获取证书,例如解冻(很贵)。创建自己的行不通。【参考方案2】:
从我收集到的信息看来,当通过 HTTPS 连接时,手机使用的是旧版本的 SSL 或 TLS,该版本已被弃用,导致某些 API 无法响应。
我发现,如果您使用 Opera Mini 网络浏览器通过 HTTPs 发出 API 请求,它就可以工作。为您提供所需的响应,但仔细检查后,似乎 Opera 会为您获取响应并通过不同的 URL 将其返回。试图为这些无法使用新版本 SSL/TLS 的旧设备提供自己的安全连接。
【讨论】:
以上是关于javax.microedition.pki 证书验证失败的主要内容,如果未能解决你的问题,请参考以下文章