This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Extern generiertes SSL Zertifikat automatisiert an die UTM von remote (LAN) verteilen und aktivieren...

Moin,

...da die LetsEncrypt ACMEv2 WildcardCertificate unterstützung durch Sophos ja nun offensichtlich nicht implementiert wurde (und wahrscheinlich auch nicht wird) generieren wir nun LE WildCard Certificates auf einer pfSense mit der wir eines unserer Offices via IPSec an unser Rechenzentrum mit unseren UTMs anbinden...weiter sind auch noch diverse REDs und WiFi APs im spiel...natürlich sind sowohl pfSense als auch UTM HotStandby Cluster...soweit zur ist Situation...

Die LE WildCardCerts müssen nun alle 60/90 Tage aktualisiert werden, pfSense kann das und benutzt es auch gleich selbst...

Weiter habe ich diverse scripte gebaut, die das aktuelle LE WCC an alle möglichen anderen Server (via ssh/scp) im internen Netz verteilen (apaches, tomcats, nginx, etc...)...

Ich habe versucht raus zu finden wie man das Richtung Sophos UTM machen würde, aber anscheinend ist das nur halb so einfach wie ich mir das wünschen würde...Ich kann mir aber auch nur schwerlich vorstellen, das ich der Einzige und Erste bin der sowas tun will...

Hat jemand dieses oder ein ähnlich geartetes Verfahren bereits umgesetzt oder ggf. einfach nur den einen oder anderen klugen tipp dazu...???

Danke und Gruß



This thread was automatically locked due to age.
Parents
  • Hi,

    ich hatte mit Version 9.5 da mal vor einiger Zeit über die REST API versucht das Zertifikat upzudaten.

    Der Bereich den Du verwenden musst verbirgt sich unter CA -> host_key_cert -> {ref} über PATCH kannst Du das Zertifikat austauschen. Den REF für das Zertifkat musst Du Dir halt raussuchen.

    Aber Achtung ich habs geschafft dass ich mir das Zertifkat das für den WEBAdmin verwendet wurde zerschossen habe. Danach konnte ich mich nicht mehr anmelden.

    Einen kleine Schönheitsfehler hatte ganze auch noch, in der Zertifkatsverwaltung von Sophos wurden die Metadaten des Zertifikats nicht aktualisiert. d.h. es wurde immer das alte abgelaufene Zertifkat angezeigt obwohl die Sophos das aktuelle Zertifikat verwendet hat.

    Den Fehler hab ich leider nicht wegbekommen, und nachdem die Sophos mit Version 9.6 die LE Zertifkate unterstützt hat und ich keine Wildcard Zertifikate brauche hab ich das dann auch nicht mehr weiter verfolgt.

    Die komplette Befehlszeile für das Update lautete bei mir:

    curl -i -X PATCH --header "Content-Type: application/json" --header "Accept: application/json" --header "Authorization: Basic token" -d "{\"certificate\":\"%cert%\"}" "https://UTM ip:4444/api/objects/ca/host_key_cert/Zertifikatsref"

    Das Zertifkat muss als Text ohne Zeilenumbrüche formatiert sein. Ich hatte das damals über openssl und vi automatisiert.

    Grüße Thomas

     

     

  • Hab' da noch ne menge mehr machen müssen, aber der hint mit der API und der Stelle war genau die richtige Richtung...

    Metadaten sind ein anderer REST call...muss man auch richtig setzen, dann zeigt die Sophos auch alles richtig an...

    Wenn's ein chained Certificate ist muss noch das verification CA und dessen Meta auch noch via entsprechendem REST Call gesetzt werden...

    Am Einfachsten war für mich...

    1. Einmal ein FullChain Certificate in die Sophos via WebInterface importieren...

    2. Das Certificate und die Metadaten sowie die CA und deren Metadaten via API und curl abgreifen...

    3. Die neuen Daten dann so lange mit openssl und geschicketr Parametrisierung sowie awk / sed / cut / grep / ...solange zurecht kneten bis sie damit übereinstimmen...

    4. Dann die patch API Calls nehmen und die bestehenden Objekte damit überschreiben...

    5. In der Sophos WebInterface Konfiguration das Zertifikat dann überall zuordnen wo's verwendet werden soll...

    Fun Fact / Be Aware...

    * WebServerProtection funktioniert GAR NICHT MEHR wenn ein Zertifikat was irgendwo in der Web Server Protection verwendet wird kaputt ist

    * ...nicht nur bei dem Reverse Proxi der das kaputte verwendet...

    * Dachte das wäre ein guter ort um das Zertifikat gefahrlos bei einem Testeintrag zu testen, dem war nicht so...

    * ...also, aufgepasst...

  • Hi,

    schön Zu hören dass es geklappt hat.
    Welchen Node hast Du denn für Aktualisierung der Metadaten verwendent? Ich hab damals nix gefunden.

    Grüße Thomas

  • Das ist ein Codeschnipsel der die Endpunkte für das Certifikat, die Metadaten und das intermediate CA abfragt...

    Die jeweiligen Referenzen werden hier nicht gesetzt sondern müssen in den entsprechenden Variablen vorher gesetzt sein...

    Metadaten sind, egal für welches der hier verwendeten Objekte, in meta_x509 ...

    ##
    ## Backup at Destination
    ##
    echo "$(date '+%Y%m%d-%H%M%S') INFO Backing up destination..." >> ${THISRUNLOG}
    echo "$(date '+%Y%m%d-%H%M%S') INFO - Destination Backup is not supported..." >> ${THISRUNLOG}
    echo "$(date '+%Y%m%d-%H%M%S') INFO - But this is what I can find there:" >> ${THISRUNLOG}
    #set -x
    echo "$(date '+%Y%m%d-%H%M%S') INFO - ${PROTOCOL}${HOSTNAME}:${PORT}${API}/host_key_cert/${HOSTKEYCERTREF}" >> ${THISRUNLOG}
    curl -iksS -X GET --header 'Accept: application/json' \
                      --header "Authorization: Basic ${APITOKEN}" \
                      "${PROTOCOL}${HOSTNAME}:${PORT}${API}/host_key_cert/${HOSTKEYCERTREF}" 2>&1 >> ${THISRUNLOG}
    if [ ! $? -eq 0 ]; then
      echo "$(date '+%Y%m%d-%H%M%S') PANIC - curl to Remote API of ${HOSTNAME} for ${HOSTKEYCERTREF} Failed" >> ${THISRUNLOG}
    else
      echo "" >> ${THISRUNLOG}
    fi
    #
    echo "$(date '+%Y%m%d-%H%M%S') INFO - ${PROTOCOL}${HOSTNAME}:${PORT}${API}/meta_x509/${METAX509REF}" >> ${THISRUNLOG}
    curl -iksS -X GET --header 'Accept: application/json' \
                      --header "Authorization: Basic ${APITOKEN}" \
                      "${PROTOCOL}${HOSTNAME}:${PORT}${API}/meta_x509/${METAX509REF}" 2>&1 >> ${THISRUNLOG}
    if [ ! $? -eq 0 ]; then
      echo "$(date '+%Y%m%d-%H%M%S') PANIC - curl to Remote API of ${HOSTNAME} for ${METAX509REF} Failed" >> ${THISRUNLOG}
    else
      echo "" >> ${THISRUNLOG}
    fi
    #
    echo "$(date '+%Y%m%d-%H%M%S') INFO - ${PROTOCOL}${HOSTNAME}:${PORT}${API}/verification_ca/${VERIFICATIONCAREF}" >> ${THISRUNLOG}
    curl -iksS -X GET --header 'Accept: application/json' \
                      --header "Authorization: Basic ${APITOKEN}" \
                      "${PROTOCOL}${HOSTNAME}:${PORT}${API}/verification_ca/${VERIFICATIONCAREF}" 2>&1 >> ${THISRUNLOG} 
    if [ ! $? -eq 0 ]; then
      echo "$(date '+%Y%m%d-%H%M%S') PANIC - curl to Remote API of ${HOSTNAME} for ${VERIFICATIONCAREF} Failed" >> ${THISRUNLOG}
    else
      echo "" >> ${THISRUNLOG}
    fi
    #
    echo "$(date '+%Y%m%d-%H%M%S') INFO - ${PROTOCOL}${HOSTNAME}:${PORT}${API}/meta_x509/${VERIFICATIONCAMETAREF}" >> ${THISRUNLOG}
    curl -iksS -X GET --header 'Accept: application/json' \
                      --header "Authorization: Basic ${APITOKEN}" \
                      "${PROTOCOL}${HOSTNAME}:${PORT}${API}/meta_x509/${VERIFICATIONCAMETAREF}" 2>&1 >> ${THISRUNLOG}
    if [ ! $? -eq 0 ]; then
      echo "$(date '+%Y%m%d-%H%M%S') PANIC - curl to Remote API of ${HOSTNAME} for ${VERIFICATIONCAMETAREF} Failed" >> ${THISRUNLOG}
    else
      echo "" >> ${THISRUNLOG}
    fi
    set +x
    echo "$(date '+%Y%m%d-%H%M%S') INFO Done..." >> ${THISRUNLOG}
    
  • Hallo,

    ich muss einmal etwas genauer nachfragen.

    Ich lasse mir auf einem Server Wildcard Zertifikat von LetsEncrypt erstellen und verteile sie von dort aus auf mehrere andere Server innerhalb meines LANs. Nur an der UTM scheitere ich kläglich...

    Ich hab mir mit openssl ein pkcs12 Zertifikat aus den LetsEncrypt Dateien erstellt und auf die UTM geladen. Dabei wurde auch gleich eine CA angelegt. Das habe ich dann an verschiedenen Stellen in der UTM eingebunden. Das hat alles super geklappt, nun möchte ich dieses Zertifikat einfach nur aktualisieren wenn es abläuft.

    Über die API habe ich die REF für das cert ermittelt und über GET die Ausgabe genau angeschaut. Wenn ich jetzt per PATCH den certificate und key Parameter mitgebe, stoppen die WAF und der WebServer augenblicklich.

    certificate wird ermittelt mit:

    openssl pkcs12 -in /etc/letsencrypt/live/*****/certificate.pfx -nodes -passin pass:"*****" | openssl x509 -text | tr -d "\n"

    key wird ermittelt mit:

    cat /etc/letsencrypt/live/*****/privkey.pem | tr -d "\n"

     

    Habe ich hier schon grundlegend einen Gedankenfehler? Ich gebe zu, dass ich mich hier in der UTM auf sehr dünnem Eis bewege.

    Ich würde mich freuen wenn du mir bei der Lösung helfen könntest.

    Viele Grüße

    Christoph

  • Hat sich erledigt, ich hab mir im cURL Aufruf selbst ein Bein gestellt[8-)]

    So klappt es jetzt scheinbar:

    curl -k -i -X PATCH 'utm*****:4444/.../*****' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: *****' \
    --header 'X-Restd-Insert: http.ca_list' \
    --data @- << EOF 
    
    {
            "certificate": "$(openssl pkcs12 -in /*****/certificate.pfx -nodes -passin pass:"*****" | openssl x509 -text | sed -z 's/\n/\\n/g')", 
            "key": "$(cat /*****/privkey.pem | sed -z 's/\n/\\n/g')"
    } 
    EOF

    Grüße Christoph

Reply
  • Hat sich erledigt, ich hab mir im cURL Aufruf selbst ein Bein gestellt[8-)]

    So klappt es jetzt scheinbar:

    curl -k -i -X PATCH 'utm*****:4444/.../*****' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: *****' \
    --header 'X-Restd-Insert: http.ca_list' \
    --data @- << EOF 
    
    {
            "certificate": "$(openssl pkcs12 -in /*****/certificate.pfx -nodes -passin pass:"*****" | openssl x509 -text | sed -z 's/\n/\\n/g')", 
            "key": "$(cat /*****/privkey.pem | sed -z 's/\n/\\n/g')"
    } 
    EOF

    Grüße Christoph

Children
No Data