android.apis.google.com Problema no DNS no EC2

1

Temos um problema muito estranho com o DNS nas instâncias do EC2. Um aplicativo que estamos executando em algumas de nossas instâncias é o serviço baseado em Java que fornece um back-end para um aplicativo Android. Como parte de sua funcionalidade, ele envia notificações por push para telefones por meio de uma API do Google. Para isso, é necessário fazer uma solicitação SSL para android.apis.google.com . Infelizmente, ao executar isso em nossas instâncias do EC2, recebemos um erro de certificado porque o nome do host não corresponde ao nome do certificado:

hostname in certificate didn't match: <android.apis.google.com> != <.gstatic.com> OR <gstatic.com> OR <.gstatic.com>

Rastreamos o problema para uma diferença nos resultados do DNS. Quando consultamos DNS para android.apis.google.com em nosso escritório (onde tudo funciona), recuperamos o seguinte:

android.apis.google.com. 300    IN      CNAME   clients.l.google.com.
clients.l.google.com.   160     IN      A       74.125.226.230
clients.l.google.com.   160     IN      A       74.125.226.231
clients.l.google.com.   160     IN      A       74.125.226.232
clients.l.google.com.   160     IN      A       74.125.226.233
clients.l.google.com.   160     IN      A       74.125.226.238
clients.l.google.com.   160     IN      A       74.125.226.224
clients.l.google.com.   160     IN      A       74.125.226.225
clients.l.google.com.   160     IN      A       74.125.226.226
clients.l.google.com.   160     IN      A       74.125.226.227
clients.l.google.com.   160     IN      A       74.125.226.228
clients.l.google.com.   160     IN      A       74.125.226.229

Quando executamos a mesma consulta em um servidor EC2, recuperamos um conjunto diferente de resultados de DNS:

android.apis.google.com. 300    IN      CNAME   clients.l.google.com.
clients.l.google.com.   300     IN      A       72.14.204.138
clients.l.google.com.   300     IN      A       72.14.204.100
clients.l.google.com.   300     IN      A       72.14.204.101
clients.l.google.com.   300     IN      A       72.14.204.102
clients.l.google.com.   300     IN      A       72.14.204.113

Alguma idéia de por que os resultados do DNS seriam tão dramaticamente diferentes no EC2? E, mais importante, como podemos corrigir isso?

Nós tentamos usar um validador de nome de host personalizado. Segundo nossos desenvolvedores, isso permitiu que a conexão prosseguisse, mas o problema é que ela está conectada ao servidor errado, então a solicitação ainda falha.

    
por organicveggie 15.03.2012 / 16:01

3 respostas

0

Estranho. Tudo começou a funcionar de novo - como mágica.

    
por 03.05.2012 / 20:06
2

O Google tem muitos e muitos IPs e eles veiculam os IPs que estão geograficamente mais próximos de onde eles acham que estão localizados.

Quando eu dig contra o DNS público do Google em 8.8.8.8 , recebo a mesma lista do EC2:

[] csternal@~: dig @8.8.8.8 android.apis.google.com

; <<>> DiG 9.6-ESV-R4-P3 <<>> @8.8.8.8 android.apis.google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38592
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;android.apis.google.com.   IN  A

;; ANSWER SECTION:
android.apis.google.com. 300    IN  CNAME   clients.l.google.com.
clients.l.google.com.   300 IN  A   72.14.204.102
clients.l.google.com.   300 IN  A   72.14.204.113
clients.l.google.com.   300 IN  A   72.14.204.100
clients.l.google.com.   300 IN  A   72.14.204.101
clients.l.google.com.   300 IN  A   72.14.204.138

;; Query time: 83 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Mar 15 11:38:13 2012
;; MSG SIZE  rcvd: 145

O problema que você está encontrando parece ser este: link

The solution most commonly given to resolve the error message you are receiving is to define a custom Hostname validation. The main problem that you are facing is that the domain name returned by Google's Android URL is .google.com. Unfortunately, this causes some issues as the Android SDK is at android.apis.google.com. The JVM will not validate this combination by default (.sdk.google.com would be acceptable).

Here is an example of how you can create your own hostname validator:

URL url = new URL("https://android.apis.google.com/c2dm/send");

HostnameVerifier hVerifier = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession
            session) {
        return true;
    }
};

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setHostnameVerifier(hVerifier);
    
por 15.03.2012 / 16:40
-1

Pode ser um problema proveniente da plataforma de DNS do Amazon EC2 (problema de atualização) ou um problema de resultados de armazenamento em cache proveniente de ambos, o "Virtual plateform" ou a plataforma da Amazon.

    
por 15.03.2012 / 16:31