多个SSL主机名验证程序

时间:2011-12-28 11:23:05

标签: java android ssl ssl-certificate apache-httpcomponents

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

0 个答案:

没有答案