在我的应用程序中,我必须连接到不同的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的第一个实例开始使用来自的验证程序第二个实例。似乎验证者是某种全球性的。
有可能以某种方式为每个不同的HttpClient实例使用不同的验证器吗?