Google Mail POP3 SSL con Fetchmail
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.
$ 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 |
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 |
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 |
Listing 4 Verifica di alcune informazioni sul Root Certificate Authority.
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 -----BEGIN CERTIFICATE----- MIICsDCCAhmgAwIBAgIDC2dxMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT -----END CERTIFICATE----- |
Listing 6 Certificati ottenuti dal comando precedente.
$ c_rehash ~/.certs/Doing /Users/amusarra/.certs/
Equifax_Secure_Certificate_Authority.pem => 594f1775.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 SSL-Session: +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 |
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). Mail version 8.1 6/6/93. Type ? for help. |
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