Good to Know Database

CentOS 5: Fetchmail-SSL-Zertifikate erneuern


Im Tutorial CentOS 5: Fetchmail mit SSL absichern habe ich beschrieben, wie Sie die Verbindung zwischen dem Fetchmail-Daemon und den Mailservern von Web.de, GMX.net und GoogleMail.com mit SSL absichern können. Da die Zertifikate auf den Mailservern nur begrenzt gültig sind, werden diese von den Betreibern regelmäßig ausgetauscht. Das bedeutet, dass der Fetchmail-Daemon keine E-Mails vom betroffenen Mailserver abholen kann, solange er nicht das neue Server-Zertifikat und den dazu passenden Fingerprint kennt.

Wenn Sie in der entsprechenden Logdatei des Fetchmail-Daemons die folgenden Meldungen vorfinden, wurde sehr wahrscheinlich das Server-Zertifikat ausgetauscht.

[root@centos5 ~]# tail -f /var/log/maillog
[...]
Apr 22 14:02:13 centos5 fetchmail[4399]: pop.gmx.net-Fingerabdrücke stimmen nicht überein!
Apr 22 14:02:13 centos5 fetchmail[4399]: SSL-Verbindung fehlgeschlagen.
[...]

Das Server-Zertifikat und den Fingerprint können Sie mit den gleichen Befehlen wie im Tutorial CentOS 5: Fetchmail mit SSL absichern beschrieben aktualisieren. Zur Erleichterung dieser Arbeit habe ich das folgende Shell Skript geschrieben, welches alle Änderungen automatisch vornimmt.

###########################################################################
##                                                                       ##
##                     Fetchmaild SSL Update Script                      ##
##                                                                       ##
## Creation:    24.04.2010                                               ##
## Last Update: 22.02.2014                                               ##
##                                                                       ##
## Copyright (c) 2010-2014 by Georg Kainzbauer <http://www.gtkdb.de>     ##
##                                                                       ##
## This program is free software; you can redistribute it and/or modify  ##
## it under the terms of the GNU General Public License as published by  ##
## the Free Software Foundation; either version 2 of the License, or     ##
## (at your option) any later version.                                   ##
##                                                                       ##
###########################################################################
#!/bin/bash

# Directory with the mail server certificates
CERTSDIR=/etc/ssl/fetchmaild

# Path of fetchmailrc
FETCHMAILRC=/etc/fetchmailrc

# Lock file
LOCKFILE=/var/tmp/fetchmaild_ssl_update.lock

###################################################################
# NORMALLY THERE IS NO NEED TO CHANGE ANYTHING BELOW THIS COMMENT #
###################################################################

function log()
{
  echo `date +%d.%m.%Y%t%H:%M:%S` "    LOG:" $1
}

function error()
{
  echo `date +%d.%m.%Y%t%H:%M:%S` "    ERROR:" $1
}

# Check if POP3/IMAP server address was specified
if [ -z $1 ] ; then
  error "Please specify POP3/IMAP server."
  exit 1
else
  SERVER=$1
fi

# Check if POP3/IMAP port was specified
if [ -z $2 ] ; then
  error "Please specify POP3/IMAP port."
  exit 1
else
  SERVERPORT=$2
fi

# Check if local certificate exists
if [ ! -f ${CERTSDIR}/${SERVER}.pem ] ; then
  error "No local certificate for ${SERVER} found."
  exit 1
fi

if [ -f ${LOCKFILE} ] ; then
  kill -0 $(cat ${LOCKFILE}) >/dev/null 2>&1
  if [ $? -eq 0 ] ; then
    error "Previous process still running."
    exit 1
  else
    log "Deprecated lock file found. Remove lock file."
    rm -f ${LOCKFILE}
  fi
fi

echo $$ >${LOCKFILE}

# Generate fingerprint of local old certificate
OLDFINGERPRINT=$(openssl x509 -in ${CERTSDIR}/${SERVER}.pem -fingerprint -noout -md5 | cut -d= -f2)

# Download current certificate
echo "quit" | openssl s_client -connect ${SERVER}:${SERVERPORT} -showcerts 2>/dev/null | sed -ne '/BEGIN/,/END/p' > ${CERTSDIR}/${SERVER}.pem

# Generate fingerprint of local new certificate
NEWFINGERPRINT=$(openssl x509 -in ${CERTSDIR}/${SERVER}.pem -fingerprint -noout -md5 | cut -d= -f2)

# Print old and new fingerprint
log "Old fingerprint: ${OLDFINGERPRINT}"
log "New fingerprint: ${NEWFINGERPRINT}"

# Update fingerprint in fetchmailrc
sed -i "s/${OLDFINGERPRINT}/${NEWFINGERPRINT}/g" ${FETCHMAILRC}

rm -f ${LOCKFILE}

exit 0

Bevor Sie das Skript ausführen, sollten Sie den Fetchmail-Daemon beenden.

[root@centos5 ~]# service fetchmaild stop

Übergeben Sie dem Skript beim Aufruf die Adresse des Mailservers (hier pop.gmx.net) und die Portnummer (hier 995 für POP3s).

[root@centos5 ~]# ./fetchmaild_ssl_update.sh pop.gmx.net 995

Nachdem das Server-Zertifikat und der Fingerprint aktualisiert wurde, können Sie den Fetchmail-Daemon wieder starten.

[root@centos5 ~]# service fetchmaild start

Indem Sie die Logdatei überprüfen, können Sie feststellen, ob das Problem nach der Aktualisierung des Server-Zertifikats und des Fingerprints behoben ist.

[root@centos5 ~]# tail -f /var/log/maillog

Weiterführende Tutorials

CentOS 5: Benachrichtigung wenn Fetchmail-Fingerabdrücke nicht stimmen


Dieser Eintrag wurde am 25.04.2010 erstellt und zuletzt am 24.01.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_33_947.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer