Несколько верификаторов имени хоста SSL - PullRequest
0 голосов
/ 28 декабря 2011
* В моем приложении

я должен подключаться к разным HTTPS-серверам и иметь разные верификаторы (я проверяю организацию, CN) для каждого сервера.

Мой SSL-верификатор выглядит примерно так:

public class SSLVerifier implements X509HostnameVerifier {

    public SSLVerifier(String pCN, String pO) {
        mCN = pCN;
        mO = pO;
    }

    // here I override various verify() methods and check certificate values
    // agains values I set in constructor
}

У меня есть 2 экземпляра HTTP-клиента в разных частях приложения, и в обеих частях я создаю экземпляр верификатора и присоединяюсь следующим образом:

mHttpClient = new DefaultHttpClient();
final SSLVerifier verifier = new SSLVerifier(SOME_CN, SOME_ORG);
ClientConnectionManagerFactory factory = new ClientConnectionManagerFactory() {
    @Override
    public ClientConnectionManager newInstance(HttpParams pParams, SchemeRegistry pScheme) {
        if (verifier != null) {
            SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
            socketFactory.setHostnameVerifier(verifier);
            pScheme.register(new Scheme("https", socketFactory, 443));
        }
        return new ThreadSafeClientConnManager(pParams, pScheme);
    }
};
mHttpClient.getParams().setParameter(ClientPNames.CONNECTION_MANAGER_FACTORY, factory);

Я называю этот код в 2 местах, и SOME_CN и SOME_ORG имеют разные значения для каждого места.

Я заметил, что после того, как я создал второй экземпляр HttpClient и установил верификатор, который соответствует этому экземпляру, первый экземпляр HttpClient начал использовать верификатор с second экземпляр. Похоже, что верификатор является своего рода глобальным.

Можно ли как-то использовать разные верификаторы для разных экземпляров HttpClient?

...