private static class DefaultTrustManager implements X509TrustManager
{
// concept from http://hc.apache.org/index.html
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException { // do nothing here }
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException { // do nothing here }
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
Then, initialize the custom trust manager, and allow any SSL connection, regardless of its validity. We are in control of the connection here and so we don’t have anything to hide:
import java.io.*;
import import org.apache.http.*;
import javax.net.ssl.*;
import java.security.cert*;
public void SSLImgPost(String imgurl, String fileloc) throws Exception {
if (fileloc.length() < 1) {
System.out.println("File path not given");
}
TrustManager[] trustAllCerts = new TrustManager[] { new DefaultTrustManager() };
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
Then, tell the SSL socket factory to nuder the SSL certificate hostname verifier :
SSLSocketFactory sf = new SSLSocketFactory( sc, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Scheme sch = new Scheme("https", 443, sf);
httpclient = new DefaultHttpClient(); // httpclient is a static reference
httpclient.getConnectionManager().getSchemeRegistry().register(sch);
Then, follow through with reading in the file and sending it to the server with a POST:
HttpPost httppost = new HttpPost(imgurl);
File file = new File(fileloc);
InputStreamEntity reqEntity = new InputStreamEntity(new FileInputStream(file), -1);
try {
reqEntity.setContentType("binary/octet-stream");
reqEntity.setChunked(true);
httppost.setEntity(reqEntity);
System.out.println("Executing post IMG upload " + httppost.getRequestLine());
HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (resEntity != null) {
System.out.println("Response content length: " + resEntity.getContentLength());
System.out.println("Chunked?: " + resEntity.isChunked());
}
EntityUtils.consume(resEntity);
} finally {
httpclient.getConnectionManager().shutdown();
}
}