ews-java-api-2.0 访问SSL异常
测试ews-java-api是否能和exchange服务通信,代码如下:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
// 用户认证信息
ExchangeCredentials credentials = new WebCredentials(address.getUsername(),address.getPassword());
service.setCredentials(credentials);
//该行抛出异常
FindFoldersResults findResults = exchangeService.findFolders(WellKnownFolderName.MsgFolderRoot, new FolderView(Integer.MAX_VALUE)); //
异常信息:microsoft.exchange.webservices.data.core.exception.service.remote.ServiceRequestException: The request failed. The request failed. Certificate for <168.61.10.118> doesn’t match any of the subject alternative names: [mail.htsc.com, autodiscover.htsc.com, mailservice.htsc.com.cn, email.htsc.com]
解决方法如下:
通过修改域名验证器来解决,新建一个类
public class ExchangeServiceWithHostVerify extends ExchangeService {
//不对任何域名做验证
private final static HostnameVerifier hostnameVerifierWithOutVerfy = new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
};
public ExchangeServiceWithHostVerify() {
super();
}
public ExchangeServiceWithHostVerify(ExchangeVersion requestedServerVersion) {
super(requestedServerVersion);
}
@Override
protected Registry<ConnectionSocketFactory> createConnectionSocketFactoryRegistry() {
try {
return RegistryBuilder.<ConnectionSocketFactory>create().register(EWSConstants.HTTP_SCHEME, new PlainConnectionSocketFactory()).register(EWSConstants.HTTPS_SCHEME, EwsSSLProtocolSocketFactory.build(null, hostnameVerifierWithOutVerfy)).build();
} catch (GeneralSecurityException e) {
throw new RuntimeException("Could not initialize ConnectionSocketFactory instances for HttpClientConnectionManager", e);
}
}
}
然后
ExchangeService service = new ExchangeServiceWithHostVerify(ExchangeVersion.Exchange2010);
问题解决,特此记录一下