I currently have a SSL Secure server setup on a linux box with php scripts.
I currently have an android application whereby a login page will establish a secure connection to my server and authenticate the user by crossing referencing the details within a database using the php scripts. If the details are correct it will return a specific value to my app.
When assigning the URL object to "https://mydomain/myscript" the value returned is "null", however when I assign the URL object to "http://mydomain/myscript" the correct value is returned and authentication within the app can begin.
I have -
- Checked my library imports and i'm using "javax.net.ssl.HttpsURLConnection"
- Checked my secure link "https://mydomain/myscript" is accessible to the open world
- SSL certificate is installed correctly and applied across the board within the apache server
Here is my Android code:
protected String doInBackground(String... params) {
    String login_url = "https://xxx.xxxxx.com/json/json_login.php";
    String method = params[0];
    if(method.equals("login")){
        String database_name = params[1];
        String password_user = params[2];
        try {
            URL url = new URL(login_url);
            HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();
            httpsURLConnection.setRequestMethod("POST");
            httpsURLConnection.setDoOutput(true);
            httpsURLConnection.setDoInput(true);
            OutputStream outputStream = httpsURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
            String data = URLEncoder.encode("database_name","UTF-8")+"="+URLEncoder.encode(database_name,"UTF-8")+"&"+
                    URLEncoder.encode("password_user","UTF-8")+"="+URLEncoder.encode(password_user,"UTF-8");
            bufferedWriter.write(data);
            bufferedWriter.flush();
            bufferedWriter.close();
            outputStream.close();
            InputStream inputStream = httpsURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
            response = "";
            String line = "";
            while((line = bufferedReader.readLine())!=null){
                response += line;
            }
            bufferedReader.close();
            inputStream.close();
            httpsURLConnection.disconnect();
            return response;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}
@Override
    protected void onPostExecute(String result) {
        if(result.equals("Login Failed")){
            Toast.makeText(ctx, "Database password incorrect", Toast.LENGTH_SHORT).show();
        }else{
            //Create shared preferences module called "database" and write result to shared preferences variable "database_name"
            SharedPreferences preferences = ctx.getSharedPreferences("database", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString("database_name", result);
            editor.apply();
            Intent intent = new Intent(ctx, MainActivity.class);
            ctx.startActivity(intent);
            ((Activity)ctx).finish();
}
Here is my PHP code:
<?php
require "../init_accounts.php";
$database_name = $_POST["database_name"];
$password_user = $_POST["password_user"];
$sql_query = "SELECT database_name FROM xxx_Table WHERE database_name LIKE '$database_name' and password_user LIKE '$password_user';";
$result = mysqli_query($con,$sql_query);
if (mysqli_num_rows($result)>0)
{
    $row = mysqli_fetch_assoc($result);
    $database_name = $row["database_name"];
    echo "$database_name";
}
else
{
    echo "Login Failed" . mysqli_error($con);
}
?>
Here is the debug results when using HTTPS URL (incorrect return value):
Here is the debug results when using HTTP URL (correct return value):
If anyone can shed some light / point me in the correct direction that would be great! Thanks in advance
UPDATE 19/07/2017:
This is now fixed, I used Trusting all certificates using HttpClient over HTTPS to help resolve issue!


