Gmail pop3 met fetchmail

  fetchmail

k heb meerdere pop3 account en gebruik fetchmail om die mail op te halen en in mijn eigen mail server te brengen. je kan tegenwoordig bij veel mail accounts ook je mail door sturen maar ik vind dit wel een handige methode. alles word van af 1 centraal punt geregeld. Om de mail bij van je gmail account op te halen moet je allereerst pop3 binnen google aanzetten, kijk bij instellingen. Google gebruikt standaard ssl voor pop3.

Zoals het niet moet

Om snel je mail werkend te krijgen kan je eenvoudig ssl aan zetten binnen je .fetchmailrc file

poll pop.gmail.com with proto POP3
       user "{username@gmail.com}", with password "{PASSWORD}", is {localmailbox} here 
  	   options ssl

probleem nu is dat je met het ophalen van je mail een foutmelding krijgt. de mail word overgens wel opgehaald

fetchmail: Server certificate verification error: unable to get local issuer certificate
fetchmail: Server certificate verification error: certificate not trusted
fetchmail: No mail for {username@gmail.com} at pop.gmail.com

Haal het certificaat op

wil je van deze melding af ga je als volgt te werk. in bv je home directory maak je een .cert directory.

$ mkdir ~/.certs 
$ cd ~/.certs

Gmail pop3 over SSL server presenteert een server certificaat bij iedere SSL connectie. je wilt deze controleren op echtheid. het certificaat is signed door certificate authority (CA), Equifax Secure (tegenwoordig GeoTrust) we gaan deze ophalen middels wget. https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.cer

 wget --no-check-certificate -O Equifax.pem \
 https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.cer

als we het certificaat hebben moeten we het alleen nog rehashen zodat fetchmail er mee kan werken, dit doe je met het perl script c_rehash. Dit script word geleverd met de OpenSSL toolkit. wat dit script doet is het creëren van een symbolic link(s) naar de certificaat file (met een “.pem” extensie).

$ cd ~/.certs
$ c_rehash .
Doing .
Equifa.pem => 594f1775.0
$ file 594f1775.0
594f1775.0: symbolic link to `Equifa.pem'

Test het certificaat

Om te controleren of alles goed werkt doe je het volgende. op de plek van de … … en — staat uiteraard veel meer informatie

$ openssl s_client -connect pop.gmail.com:995 -CApath ~/.certs/
... ...
---
+OK Gpop ready for requests from ....

nu heeft fetchmail de mogelijkheid om het certificaat te controleren. wat je nog extra kan doen is het certificaat van google ophalen en hier een fingerprint (md5) van nemen. dit is een extra controle mogelijkheid. houd er wel rekening mee als je de fingerprint opneemt en google krijgt een andere certificaat (oude verloopt) je de fingerprint moet aanpassen in de fetchmail configuratie.

haal het certificaat van gmail op.

edwin@ds9:~/.certs$ openssl s_client -connect pop.gmail.com:995 -showcerts 
CONNECTED(00000003)
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
-----BEGIN CERTIFICATE-----
MIIDWjCCAsOgAwIBAgIKYgy3qQADAAAJ5zANBgkqhkiG9w0BAQUFADBGMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu
dGVybmV0IEF1dGhvcml0eTAeFw0wOTA3MTcxNzE2NTVaFw0xMDA3MTcxNzI2NTVa
MGcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1N
b3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRYwFAYDVQQDEw1wb3Au
Z21haWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTHqjJfnRXdpmZ
4iP/WNCpvzX4N97bEZ3rvS4aDYey/DJetKZqp9DK1Ie4/C5j8M1aakwiTNA/eHS/
wNWVgQx8+HxproYKUeeYj3shYKEkHGfrRYBcyCxc7Gd6NSGaaYru3Z7nJ+STIPUJ
E1N35JAwcjjdITVI2O4LckAL4b7GkwIDAQABo4IBLDCCASgwHQYDVR0OBBYEFIln
0T5I8Mw6cqhtUS4pyMGYRxOTMB8GA1UdIwQYMBaAFL/AMOv1QxE+Z7qekfv8atrj
axIkMFsGA1UdHwRUMFIwUKBOoEyGSmh0dHA6Ly93d3cuZ3N0YXRpYy5jb20vR29v
Z2xlSW50ZXJuZXRBdXRob3JpdHkvR29vZ2xlSW50ZXJuZXRBdXRob3JpdHkuY3Js
MGYGCCsGAQUFBwEBBFowWDBWBggrBgEFBQcwAoZKaHR0cDovL3d3dy5nc3RhdGlj
LmNvbS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhv
cml0eS5jcnQwIQYJKwYBBAGCNxQCBBQeEgBXAGUAYgBTAGUAcgB2AGUAcjANBgkq
hkiG9w0BAQUFAAOBgQCEGIebkDpktdjtzMiTTmEiN7e4vc73hEI4K0jYKyY0Wn5N
dc44AXTfIWOzsikwb886PCUSevGs9rcw2/kaHdPaBSuGrzSCf8ODQqTC3odry3lo
PtZGr6nf/81F5UW71+bE1iWOQlJ5/olWOr2SlqYla1iOmosEctD/GyoFnDh+BA==
-----END CERTIFICATE-----
... ....
---
+OK Gpop ready for requests from 62.194.255.209 10pf6519060eyz.0

er staat meer in de output maar dit is het belangrijkste. kopieer het gedeelt inclusief — BEGIN en — END naar bv gmail.pem en schrijf dit ook in je cert dir. als je dat hebt gedaan kan je de fingerprint van het certificaat opvragen, let op standaard gebeurt dit tegenwoording in SHA1 maar fetchmail gebruikt nog md5

$ cd ~/.certs
$ openssl x509 -noout -in gmail.pem -enddate -fingerprint -md5 -dates
MD5 Fingerprint=92:73:17:4C:34:4B:68:F7:B2:17:71:42:0D:7F:9F:33
notBefore=Jul 17 17:16:55 2009 GMT
notAfter=Jul 17 17:26:55 2010 GMT

de fingerprint gebruik je in de fetchmailrc. als het certificaat verloopt krijg je van google een andere, je moet dan wel de fingerprint aanpassen.

.fetchmailrc

de .fetchmailrc komt er dan als volgt uit te zien.

poll pop.gmail.com with proto POP3
       user "{USERNAME@gmail.com}", with password "{PASSWORD}", is {localmailbox} here 
  	   options ssl sslfingerprint '92:73:17:4C:34:4B:68:F7:B2:17:71:42:0D:7F:9F:33' 
          sslcertck sslcertpath /home/{USER}/.certs

om alles nog 1 keer helemaal te testen. kan je fetchmail in verbose mode draaien. alleen voor de gmail account. fetchmail -d0 -v pop.gmail.com

$ fetchmail -d0 -v pop.gmail.com
fetchmail: 6.3.8 querying pop.gmail.com (protocol POP3) at Thu 08 Oct 2009 09:40:41 PM CEST: poll started
Trying to connect to 74.125.79.111/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: 92:73:17:4C:34:4B:68:F7:B2:17:71:42:0D:7F:9F:33
fetchmail: pop.gmail.com fingerprints match.
fetchmail: POP3< +OK Gpop ready for requests from 62.194.xxx.xxx 24pf6525eyx.27
fetchmail: POP3> CAPA
fetchmail: POP3< +OK Capability list follows
fetchmail: POP3< USER
fetchmail: POP3< RESP-CODES
fetchmail: POP3< EXPIRE 0
fetchmail: POP3< LOGIN-DELAY 300
fetchmail: POP3< X-GOOGLE-VERHOEVEN
fetchmail: POP3< UIDL
fetchmail: POP3< .
fetchmail: POP3> USER {USERNAME}@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 {USERNAME}@gmail.com at pop.gmail.com
fetchmail: POP3> QUIT
fetchmail: POP3< +OK Farewell.
fetchmail: 6.3.8 querying pop.gmail.com (protocol POP3) at Thu 08 Oct 2009 09:40:42 PM CEST: poll completed
fetchmail: normal termination, status 1

alles werkt nu naar behoren, als je fetchmail in deamon mode draait houd dan wel rekening mee dat gmail niet vaker dan 1 in de 5 min gepolled wil worden. fetchmail: POP3< LOGIN-DELAY 300 ik zelf heb hem draaien op 600 sec (10 min).