aceitar certificados SSL autoassinados -> onde definir o padrão do TrustManager

Primeiramente eu tive que admitir que eu sei que aceitar todos os certs pode ser considerado como não ter segurança. Temos Certs "reais", mas apenas em nossos sistemas ativos. Os certificados nos nossos sistemas de teste são auto-assinados. Assim, enquanto estivermos desenvolvendo, precisamos usar servidores de teste, o que me força a desativar os certificados.

Eu vi um monte de toppics aqui no Stackoverflow e em toda a web que estão todos tentando fazer o mesmo: Aceitando Certificados SSL. No entanto, nenhuma dessas respostas parece se aplicar ao meu problema, já que não estou mexendo comHTTPSUrlConnections.

Se eu estou fazendo uma solicitação, o código geralmente se parece com isso (comentado para esclarecimento):

//creates an HTTP-Post with an URL
HttpPost post = createBaseHttpPost();
//loads the request Data inside the httpPost
post.setEntity(getHttpPostEntity());
//appends some Headers like user-agend or Request UUIDs
appendHeaders(post);

HttpClient client = new DefaultHttpClient();
//mResponse is a custom Object which is returned 
//from the custom ResponseHandler(mResponseHandler) 
mResponse = client.execute(post, mResponseHandler);
return mResponse;

Eu li que eu deveria injetar meu próprioTrustManager eX509HostnameVerivier. Eu os criei assim:

private static final TrustManager[] TRUST_ALL_CERTS = new TrustManager[]{
        new X509TrustManager() {

            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[]{};
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType)
                    throws CertificateException {
            }

            public void checkClientTrusted(X509Certificate[] chain, String authType)
                    throws CertificateException {
            }
        }

    };

    private static X509HostnameVerifier ACCEPT_ALL_HOSTNAMES = 
            new X509HostnameVerifier() {

                public void verify(String host, String[] cns, String[] subjectAlts)
                        throws SSLException {
                }

                public void verify(String host, X509Certificate cert) throws SSLException {
                }

                public void verify(String host, SSLSocket ssl) throws IOException {
                }

                public boolean verify(String host, SSLSession session) {
                    return true;
                }
            };

Se eu injetarHostnameVerifier dentro do meu pedido como este (cliente é DefaultHttpClient de cima)

SSLSocketFactory ssl = (SSLSocketFactory)client.getConnectionManager().getSchemeRegistry().getScheme("https").getSocketFactory();
ssl.setHostnameVerifier(ACCEPT_ALL_HOSTNAMES);

a resposta muda de "hostname ** não corresponde" para "Bad request". Eu acho que tenho que configurar o TrustManager, mas não tenho a menor idéia de onde colocá-lo dentro do meu pedido, já que não estou usando o HttpsUrlConnections mencionado em todos os lugares que eu procurei.

questionAnswers(1)

yourAnswerToTheQuestion