* В моем приложении
я должен подключаться к разным 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?