Hi there,

I'm cross-posting from StackOverflow (http://stackoverflow.com/
questions/3507536/sslexception-when-server-cert-uses-san-subject-
alternative-name) to see if there's anyone here who might be able to
help.

I'm trying to establish a https connection using the classes in
org.apache.http.*.  As part of my setup, I'm using the
BrowserCompatHostnameVerifier() class which states:

The hostname must match either the first CN, or any of the subject-
alts. A wildcard can occur in the CN, and in any of the subject-alts.

When I hit a server who's hostname doesn't match that which is
specified in the CN but does match one of the entries in the subject-
alts, I get the following exception:

    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)


Here's the relevant code block that's causing this error:

    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);
    }


Compare this behavior and that when you replace the url with "https://
www.google.com".  I can work around this by creating my own
X509HostnameVerifier, but I want to know if this is a valid bug in
BrowserCompatHostnameVerifier or if I'm doing something wrong.


Anyone else having similar issues?

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to