Я пытаюсь установить соединение https с помощью классов в org.apache.http. *. В качестве части моей настройки я использую класс BrowserCompatHostnameVerifier (), который гласит:
Имя хоста должно совпадать либо с первым CN, либо с любым из альтернативных объектов. Подстановочный знак может встречаться в CN и в любом из альтернативных объектов.
Когда я попадаю на сервер, имя хоста которого не совпадает с указанным в CN, но совпадает с одной из записей в субъектах, я получаю следующее исключение:
javax.net.ssl.SSLException: hostname in certificate didn't match: <mtvniph1-f.akamaihd.net> != <a248.e.akamai.net>
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:222)
at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:151)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:132)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:321)
Вот соответствующий блок кода, который вызывает эту ошибку:
DefaultHttpClient seed = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory ssf = SSLSocketFactory.getSocketFactory();
// XXX: This verifier isn't working with Subject Alternative Names
ssf.setHostnameVerifier(new BrowserCompatHostnameVerifier());
registry.register(new Scheme("https", ssf, 443));
SingleClientConnManager mgr = new SingleClientConnManager(seed.getParams(), registry);
DefaultHttpClient http = new DefaultHttpClient(mgr, seed.getParams());
// Config point, change to your preference
String url = "https://mtvniph1-f.akamaihd.net/e3_ubisoft_prod0.m3u8";
HttpGet method = new HttpGet(url);
HttpResponse response = null;
try
{
response = http.execute(method);
}
catch (Exception e)
{
Log.e(TAG, "Request failed", e);
}
Сравните это поведение и то, что при замене URL-адреса на "https://www.google.com". я могу обойти это, создав собственный X509HostnameVerifier, но я хочу знать, является ли это допустимой ошибкой в BrowserCompatHostnameVerifier или я делать что-то не так.
У кого-нибудь еще есть подобные проблемы?