Search code examples
java-mehttpconnectionmidp-2.0

javax.microedition.pki Certificate Failed Verification


I'm trying to read in a JSON reply from the Google Sheets API in a Java ME MIDP application. I've tried the following with other addresses and it receives their content fine but the actual API I want to use is Sheets and it always returns an "Certificate Failed Verification" exception.

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();

Connector.open() implicitly returns a HttpsConnection if the URL starts with Https so it should still work.

An example of a HTTPS request

https://jsonplaceholder.typicode.com/posts/1

Which won't work but the above also allows for HTTP connections

http://jsonplaceholder.typicode.com/posts/1

Which will work.

Google Sheets however requires HTTPS and thus is not obtainable via the above code. How can I make a GET request over HTTPS to the sheets API? Thank you.


Solution

  • From what I've gathered it seems that when connecting over HTTPS the phone uses an older version of SSL or TLS which has since been deprecated causing some API's to not respond.

    I found that if you make an API request over HTTPs with the Opera Mini web browser it works. Giving you the desired response but on closer inspection it seems Opera gets the response for you and gives it back via a different URL. In attempt to furnish these older devices that cannot use a newer version of SSL/TLS to make the secure connection themselves.