在我的应用程序中,我必须连接到不同的 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 实例使用不同的验证器吗?