0

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

4

0 回答 0