Google Mail POP3 SSL con Fetchmail

  • GeoTrust Root Certificate
    GeoTrust Root Certificate
  • Impostazioni GMail Account
    Impostazioni GMail Account

Nel corso di quest’articolo vedremo come sia possibile in maniera semplice e veloce riuscire a compiere il download delle email da un account GMail. Il client di posta che utilizzeremo per il download delle nostre email sarà Fetchmail (BerliOS, 2010).

Il servizio di posta elettronica di Google offre diversi modi di accesso alla propria casella, oltre alla consueta Web Mail. Il servizio GMail, ha ben cinque altri metodi di accesso:

  • POP3 (Internet Engineering Task Force - IETF, 1996)
  • IMAP4 (Internet Engineering Task Force - IETF, 2003)
  • Notifier (Google, 2010)
  • Google Apps Sync for Microsoft Outlook® (Google, 2010)

Il metodo di accesso preso in considerazione per lo scopo di quest’articolo è il primo, frutteremo quindi il protocollo POP3. GMail supporta unicamente una connessione protetta SSL (Wikipedia, 2010).

Requisiti

  • Sistema Operativo della famiglia Unix/Linux/BSD
  • Il proprio account GMail deve essere configurato per consentire l’accesso alla casella attraverso il protocollo POP3. E’ possibile verificare le impostazioni del POP3 attraverso il panello: Impostazioni -> Inoltro e POP/IMAP (vedi Figure 1).
  • OpenSSL Toolkit (OpenSSL Project, 1998)
  • Fetchmail con il supporto SSL. Per essere sicuri del supporto SSL da parte di fetchmail è possibile eseguire il comando illustrato al Listing 1.
Impostazioni GMail Account

Figure 1 Impostazioni protocollo POP3 per l’account GMail

$ ldd /usr/bin/fetchmail
linux-gate.so.1 =>  (0x00202000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x00ded000)
libkrb4.so.2 => /usr/lib/libkrb4.so.2 (0x00b99000)
libdes425.so.3 => /usr/lib/libdes425.so.3 (0x00bb8000)
libssl.so.6 => /lib/libssl.so.6 (0x00714000)

libcrypto.so.6 => /lib/libcrypto.so.6 (0x0028c000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00698000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00c02000)
/lib/ld-linux.so.2 (0x00a33000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00c1c000)
… 

$ otool -L /usr/bin/fetchmail
/usr/bin/fetchmail:
/usr/lib/libresolv.9.dylib (current version 38.0.0)
/System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
/usr/lib/libssl.0.9.8.dylib (current version 0.9.8)

/usr/lib/libcrypto.0.9.8.dylib (current version 0.9.8)
/usr/lib/libSystem.B.dylib (current version 125.0.0

Listing 1 Verifica del supporto SSL di fetchmail

Nel listing precedente ho evidenziato gli item che dovreste vedere qualora il supporto SSL per fetchmail sia disponibile. Per la stesura dell’articolo ho utilizzato il mio fidato Mac Book Pro, ecco il motivo per cui compare anche il comando otool, l’equivalente del comando ldd di Unix/Linux.

Recupero dei certificati

Il prossimo passo richiede il recupero dei certificati utilizzati da GMail, per questo compito utilizzeremo OpenSSL Toolkit. Generalmente i sistemi Unix dedicano una determina locazione del file system come repository dei certificati, solitamente /usr/share/ssl/certs/.

Per lo scopo dell’articolo ho deciso d’usare come repository dei certificati la directory certs collocata all’interno della propria home directory, quindi: ~/.certs.

Provando a eseguire una connessione a GMail prima del recupero dei certificati, si otterrà un errore di verifica del certificato (vedi Listing 2). Nel listato è evidenziato l’errore sul lookup del certificato, oltre ad essere evidenziata la cosiddetta Certificate chain, in altre parole, la catena di certificazione.

Sempre utilizzando OpenSSL, procediamo con il recupero dei certificati SSL in formato PEM (Privacy Enhanced Mail Certificate) (Wikipedia, 2010). I certificati da recuperare sono quelli che fanno parte della Certificate chain. Il primo della lista è il certificato della Root Certificate Authority (Wikipedia, 2009).

  • /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
  • /C=US/O=Google Inc/CN=Google Internet Authority
  • /C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
$ openssl s_client -connect pop.gmail.com:995 

depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
verify error:num=20:unable to get local issuer certificate

verify return:0
---
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
i:/C=US/O=Google Inc/CN=Google Internet Authority
1 s:/C=US/O=Google Inc/CN=Google Internet Authority
i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority

---

Listing 2 Connessione a GMail via POP3 utilizzando OpenSSL

Procedendo con ordine, iniziamo con il download del Root Certificate direttamente dal sito di GeoTrust collocandolo in ~/.certs/. Ricordo che il formato del certificato è PEM (Base-64 encoded DER X.509).

$ curl -o ~/.certs/Equifax_Secure_Certificate_Authority.pem http://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.cer

Listing 3 Download di Equifax Secure Certificate Authority via curl.

Dopo aver ottenuto il certificato potremmo toglierci lo sfizio d’effettuare delle verifiche e accertare che le informazioni estratte siano conformi con quanto dichiarato sul sito di GeoTrust (http://www.geotrust.com/resources/root-certificates/).

Per l’operazione di verifica sul certificato è sempre possibile utilizzare i comandi OpenSSL (vedi Listing 4 e Figure 2).

$ openssl x509 -in .certs/Equifax_Secure_Certificate_Authority.pem -fingerprint -subject -issuer -serial -hash –noout 

SHA1Fingerprint=D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A
subject= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
issuer= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
serial=35DEF4CF
594f1775

Listing 4 Verifica di alcune informazioni sul Root Certificate Authority.

GeoTrust Root Certificate

Figure 2 GeoTrust Root Certificates Page.

A questo punto non resta che ottenere i rimanenti due certificati (sempre in formato PEM), entrambi di proprietà di Google. Procediamo con il salvataggio dei certificati in ~/.certs, sempre utilizzando i comandi OpenSSL con l’aiuto di sed.

$ echo |
openssl s_client -connect pop.gmail.com:995 -showcerts 2>&1 |
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

Listing 5 Comando per il retrieve dei certificati Google.

I certificati (visibili nel Listing 6) sono stati estratti secondo l’ordine dettato dalla Certificate chain:

  • /C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
  • /C=US/O=Google Inc/CN=Google Internet Authority

Salviamo i due certificati in ~/.certs/ chiamandoli rispettivamente:

  • pop.gmail.com.pem
  • GoogleInternetAuthority.pem

Ricordo che i certificati devono essere salvati comprendendo le intestazioni d’inizio e fine certificato.

Adesso che abbiamo tutti i certificati memorizzati nella directory ~/.certs, abbiamo solo bisogno di un “rimaneggiamento” in modo che OpenSSL e fetchmail siano in grado di leggerli e utilizzarli.

-----BEGIN CERTIFICATE----- 

MIIDWjCCAsOgAwIBAgIKFNMahgADAAASkDANBgkqhkiG9w0BAQUFADBGMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu
dGVybmV0IEF1dGhvcml0eTAeFw0xMDA0MjIyMDExMjNaFw0xMTA0MjIyMDIxMjNa
MGcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1N
b3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRYwFAYDVQQDEw1wb3Au
Z21haWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC701lFBdiiC0BB
JEo2U1wmmS6Gv+qr4bjG6xeCSgb0UGI2vN1ifYyrf/wj1jBLupou+Ds+s0zLzE5Y
vsADQvu+pkDXoOcnK2YxiOiuZaGOSRKC2b0rbg4oYyS1TogEBcX+KpUxWQNpccW6
FPzpSVtmiG4azMUIR0mM2HERnwke/wIDAQABo4IBLDCCASgwHQYDVR0OBBYEFJr4/CBophXvQNM/AFWw8zu5EXKiMB8GA1UdIwQYMBaAFL/AMOv1QxE+Z7qekfv8atrj
axIkMFsGA1UdHwRUMFIwUKBOoEyGSmh0dHA6Ly93d3cuZ3N0YXRpYy5jb20vR29v
Z2xlSW50ZXJuZXRBdXRob3JpdHkvR29vZ2xlSW50ZXJuZXRBdXRob3JpdHkuY3Js
MGYGCCsGAQUFBwEBBFowWDBWBggrBgEFBQcwAoZKaHR0cDovL3d3dy5nc3RhdGlj
LmNvbS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhv
cml0eS5jcnQwIQYJKwYBBAGCNxQCBBQeEgBXAGUAYgBTAGUAcgB2AGUAcjANBgkq
hkiG9w0BAQUFAAOBgQDETrSXXdPv8yvPZ5cR8yupyXlHzUvA5rNVFzOmBE/QCrNx
wLHDMP36+axPMWp+uraNfsc798zHES0GDgz+P97KItu8T75ysvjUUpWKeeuHcYHh
QSGi5iYB7XxEB9oCnSC9tpq8el2/mWFvVJSO69bO+zDOqgFPJ/GZYIxWgglMqA==
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

MIICsDCCAhmgAwIBAgIDC2dxMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDkwNjA4MjA0MzI3WhcNMTMwNjA3MTk0MzI3
WjBGMQswCQYDVQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZ
R29vZ2xlIEludGVybmV0IEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
gYkCgYEAye23pIucV+eEPkB9hPSP0XFjU5nneXQUr0SZMyCSjXvlKAy6rWxJfoNf
NFlOCnowzdDXxFdF7dWq1nMmzq0yE7jXDx07393cCDaob1FEm8rWIFJztyaHNWrb
qeXUWaUr/GcZOfqTGBhs3t0lig4zFEfC7wFQeeT9adGnwKziV28CAwEAAaOBozCB
oDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFL/AMOv1QxE+Z7qekfv8atrjaxIk
MB8GA1UdIwQYMBaAFEjmaPkr0rKV10fYIyAQTzOYkJ/UMBIGA1UdEwEB/wQIMAYB
Af8CAQAwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v
Y3Jscy9zZWN1cmVjYS5jcmwwDQYJKoZIhvcNAQEFBQADgYEAuIojxkiWsRF8YHde
BZqrocb6ghwYB8TrgbCoZutJqOkM0ymt9e8kTP3kS8p/XmOrmSfLnzYhLLkQYGfN
0rTw8Ktx5YtaiScRhKqOv5nwnQkhClIZmloJ0pC3+gz4fniisIWvXEyZ2VxVKfml
UUIuOss4jHg7y/j7lYe8vJD5UDI=

-----END CERTIFICATE-----

Listing 6 Certificati ottenuti dal comando precedente.

$ c_rehash ~/.certs/Doing /Users/amusarra/.certs/ 

Equifax_Secure_Certificate_Authority.pem => 594f1775.0
GoogleInternetAuthority.pem => d9b7a851.0
pop.gmail.com.pem => 34ceaf75.0

Listing 7 Rehash dei certificati.

Test dei certificati

Prima di procedere con la configurazione di fetchmail, dobbiamo verificare che la connessione SSL verso GMail funzioni correttamente con i certificati a nostra disposizione. Sempre con OpenSSL facciamo una connessione verso il server pop.gmail.com utilizzando la porta TCP 995.

$ openssl s_client -connect pop.gmail.com:995 -CApath ~/.certs/ 

depth=2 /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
verify return:1
depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
verify return:1
depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
verify return:1

SSL-Session:
Protocol  : TLSv1
Cipher    : RC4-MD5
Session-ID: 660484ECDF89B1312C001861E83A4ABDF0F9559BA5EEABC334F74F6EC7E6EDF6
Start Time: 1292108636
Timeout   : 300 (sec)
Verify return code: 0 (ok)

---

+OK Gpop ready for requests from 217.201.92.244 rd13pf5325370bkb.24

Listing 8 Connessione al server POP3 di GMail.

Per ragioni di spazio ho omesso dal Listing 8 parecchi dati di output, la cosa importante da notare è il verify return code uguale a zero, possiamo quindi affermare che il test ha avuto esito positivo.

Configurazione di Fetchmail

Abbiamo bisogno di configurare il file ~/.fetchmailrc in modo da controllare automaticamente ogni 5 minuti se abbiamo posta, e se sì per scaricarla. Per la configurazione di fetchmail ho intenzione di usare il nome utente amusarra (locale sul mio sistema Mac OS X) e l'indirizzo GMail antonio.musarra@gmail.com.

# set username
set postmaster "amusarra"# set polling time (5 minutes)
set daemon 600 

poll pop.gmail.com with proto POP3 user 'antonio.musarra@gmail.com' there with password 'secret' is amusarra here options ssl sslcertck sslcertpath /Users/amusarra/.certs/

Listing 9 File di configurazione Fetchmail ~/.fetchmailrc

Ora possiamo fare una prova in modo verboso per vedere se tutto funziona per come ci aspettiamo. Le mail saranno scaricate nella propria casella di posta di sistema, la locazione della casella dipende dalla configurazione del vostro sistema (nel mio caso in /var/mail/amusarra).

$ fetchmail -d0 -vk pop.gmail.com 

fetchmail: 6.3.11 querying pop.gmail.com (protocol POP3) at Sun, 12 Dec 2010 00:30:53 +0100 (CET): poll started
Trying to connect to 74.125.43.109/995...connected.
fetchmail: Issuer Organization: Google Inc
fetchmail: Issuer CommonName: Google Internet Authority
fetchmail: Server CommonName: pop.gmail.com
fetchmail: pop.gmail.com key fingerprint: 6B:C4:63:05:87:1E:72:88:ED:81:C5:A2:51:6B:B7:B6

fetchmail: POP3< +OK Gpop ready for requests from 217.201.92.244 x19pf5342523bkc.15
fetchmail: POP3> CAPA
fetchmail: POP3< +OK Capability list follows
fetchmail: POP3< USER
fetchmail: POP3> USER antonio.musarra@gmail.com
fetchmail: POP3< +OK send PASS
fetchmail: POP3> PASS *
fetchmail: POP3< +OK Welcome.
fetchmail: POP3> STAT
fetchmail: POP3< +OK 0 0
fetchmail: No mail for antonio.musarra@gmail.com at pop.gmail.com
fetchmail: POP3> QUIT
fetchmail: POP3< +OK Farewell.
fetchmail: 6.3.11 querying pop.gmail.com (protocol POP3) at Sun, 12 Dec 2010 00:30:58 +0100 (CET): poll completed
fetchmail: normal termination, status 0

Listing 10 Output del comando fetchmail.

L’output del comando fetchmail dimostra la corretta configurazione di fetchmail, in particolare ho evidenziato la Certificate chain. Per questione di completezza, nel prossimo listing è mostrato un esempio di download e lettura di una mail dalla mia casella di posta.

$ fetchmail -d0 -vk pop.gmail.com 

fetchmail: POP3< .1 message for antonio.musarra@gmail.com at pop.gmail.com (22731 octets).
fetchmail: POP3> LIST 1
fetchmail: POP3< +OK 1 22731
fetchmail: POP3> RETR 1
fetchmail: POP3< +OK message follows
reading message antonio.musarra@gmail.com@gmail-pop.l.google.com:1 of 1 (22731 octets)
Trying to connect to 127.0.0.1/25...connected.
fetchmail: SMTP< 220 amusarra-mobile.local ESMTP Postfix
fetchmail: SMTP> EHLO amusarra-mobile.local
fetchmail: SMTP< 250-amusarra-mobile.local
fetchmail: SMTP> MAIL FROM:<prvs=954dcdfd4=Antonio.Musarra@altran.it> SIZE=22731
fetchmail: SMTP< 250 2.1.0 Ok
fetchmail: SMTP> RCPT TO:<amusarra@localhost>
fetchmail: SMTP< 250 2.1.5 Ok
fetchmail: SMTP> DATA
fetchmail: SMTP< 354 End data with <CR><LF>.<CR><LF>
fetchmail: SMTP>. (EOM)
fetchmail: SMTP< 250 2.0.0 Ok: queued as 886B86E1017
fetchmail: POP3> QUIT
fetchmail: POP3< +OK Farewell.
fetchmail: SMTP> QUIT
fetchmail: SMTP< 221 2.0.0 Bye
fetchmail: 6.3.11 querying pop.gmail.com (protocol POP3) at Sun, 12 Dec 2010 00:45:22 +0100 (CET): poll completed
fetchmail: normal termination, status 0

$ mail

Mail version 8.1 6/6/93.  Type ? for help.
"/var/mail/amusarra": 1 message 1 new
>N  1 antonio.musarra@altr  Sun Dec 12 00:45 377/23230 "Test"
Message 1:
From prvs=954dcdfd4=Antonio.Musarra@altran.it  Sun Dec 12 00:45:21 2010
X-Original-To: amusarra@localhost
Delivered-To: amusarra@localhost.local
Delivered-To: antonio.musarra@gmail.com
From: Antonio Musarra <antonio.musarra@altran.it>
Content-Type: multipart/alternative; boundary=Apple Mail-11-271232042
Subject: Test
Date: Sun, 12 Dec 2010 00:44:04 +0100
To: Antonio Musarra <antonio.musarra@gmail.com>
Mime-Version: 1.0 (Apple Message framework v1082)
X-Mailer: Apple Mail (2.1082)
X-OriginalArrivalTime: 11 Dec 2010 23:44:15.0549 (UTC) FILETIME=[5201F6D0:01CB998D]

Listing 11 Download e lettura di una mail.

Works Cited

Wikipedia. (2010, December 2010). X.509. (Wikipedia, Produttore) Tratto da X.509: http://en.wikipedia.org/wiki/X.509

Wikipedia. (2009, October 8). Certificate Authority. (Wikipedia, Produttore) Tratto da Certificate Authority: http://en.wikipedia.org/wiki/Certificate_Authority

Wikipedia. (2010, December 6). Transport Layer Security. (Wikipedia, Produttore) Tratto da Transport Layer Security: http://en.wikipedia.org/wiki/Transport_Layer_Security

BerliOS. (2010, Oct 16). Fetchmail. (M. Andree, Produttore, & BerliOS) Tratto da Fetchmail: http://fetchmail.berlios.de/

Google. (2010). Che Cos'è Google Apps Sync ? (Google, Produttore, & Google) Tratto da Google: http://mail.google.com/support/bin/answer.py?hl=it&answer=153866

Google. (2010). Informazioni su GMail Notifier. (Google, Produttore, & Google) Tratto da http://mail.google.com/support/bin/answer.py?hl=it&answer=9429

Internet Engineering Task Force - IETF. (1996, May). RFC 1939 Post Office Protocol - Version 3. (J. Myers, C. Mellon, & M. Rose, Produttori) Tratto da IETF Tools: http://tools.ietf.org/html/rfc1939

Internet Engineering Task Force - IETF. (2003, March). RFC 3501 Internet Message Access Protocol - Version 4rev1. (M. Crispin, Produttore) Tratto da IETF Tools: http://tools.ietf.org/html/rfc3501

OpenSSL Project. (1998, December 23). OpenSSL Cryptography and SSL/TLS Toolkit. (M. J. Cox, R. S. Engelschall, S. Henson, B. Laurie, Produttori, & OpenSSL) Tratto da OpenSSL Cryptography and SSL/TLS Toolkit: http://www.openssl.org

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

You may also like...