Menu Close

Fortinet – LetsEncrypt-Zertifikat erneuert sich nicht

In meinem vorherigen Artikel habe ich die Thematik der Schwellwerte für Monitoring-Sensoren sowie das manuelle Erneuern der Zertifikate über LetsEncrypt für FortiGate-Firewalls ausführlich behandelt. Heute beabsichtige ich, einen konkreten Fall zu diskutieren, in dem es dem Kunden nicht möglich war, seine Zertifikate zu erneuern. Der Kunde nutzt diese Zertifikate bereits seit geraumer Zeit, und in den vorangegangenen Intervallen verlief die Erneuerung reibungslos.

Zunächst unterziehen wir die letzten Ereignisse im Zusammenhang mit dem betroffenen Zertifikat einer sorgfältigen Prüfung, um mögliche weiterführende Hinweise zu identifizieren.

diagnose sys acme status-full <Certificate’s CN domain>

In diesem Kontext fällt auf, dass seit der Ausstellung beziehungsweise dem letzten Erneuerungsvorgang keine relevanten Ereignisse aufgezeichnet wurden. Ebenfalls interessant ist, dass der Error-Counter den Wert 0 aufweist. Die Ausgabe wurde selbstverständlich aus Gründen der Vertraulichkeit durch die Anpassung von Geräte- und Kundennamen modifiziert.

FGT # diagnose sys acme status-full fgt.customer.com
{
  "name": "fgt.customer.com",
  "finished": true,
  "notified": false,
  "last-run": "Tue, 24 Oct 2023 11:07:21 GMT",
  "valid-from": "Tue, 24 Oct 2023 10:07:29 GMT",
  "errors": 0,
  "last": {
    "status": 0,
    "detail": "The certificate for the managed domain has been renewed successfully and can be used (valid since Tue, 24 Oct 2023 10:07:29 GMT). A graceful server restart now is recommended.",
    "valid-from": "Tue, 24 Oct 2023 10:07:29 GMT"
  },
  "log": {
    "entries": [
      {
        "when": "Tue, 24 Oct 2023 11:07:31 GMT",
        "type": "message-renewed"
      },
      {
        "when": "Tue, 24 Oct 2023 11:07:31 GMT",
        "type": "finished"
      },

Im folgenden Schritt überprüfen wir, ob eine erfolgreiche PING-Kommunikation mit den für das Erneuerungsvorhaben zuständigen LetsEncrypt-Servern möglich ist. Ebenfalls prüfen wir die korrekte Funktionalität der Namensauflösung auf der Firewall, die für diesen Zweck erforderlich ist.

execute ping acme-v02.api.letsencrypt.org
PING 172.65.32.248 (172.65.32.248): 56 data bytes
64 bytes from 172.65.32.248: icmp_seq=0 ttl=255 time=22.3 ms
64 bytes from 172.65.32.248: icmp_seq=1 ttl=255 time=22.2 ms
64 bytes from 172.65.32.248: icmp_seq=2 ttl=255 time=22.2 ms
64 bytes from 172.65.32.248: icmp_seq=3 ttl=255 time=22.2 ms
64 bytes from 172.65.32.248: icmp_seq=4 ttl=255 time=22.2 ms
--- 172.65.32.248 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 22.2/22.2/22.3 ms

Sowohl die Namensauflösung als auch die Erreichbarkeit sind gewährleistet. Daher führen wir eine erneute Überprüfung des Status des ACME-Clients durch und stellen bei genauer Inspektion fest, dass überhaupt kein Interface definiert ist.

FGT # get system acme status
Listening on interfaces:        None
ACME certificates registered:   1
ACME challenge type:            http-01

Wir gleichen dies erneut mit der Konfiguration ab, und die Überprüfung bestätigt die fehlerhafte Konfiguration.

FGT # config system acme
FGT (acme) # show
config system acme
    config accounts
        edit "ACME-.letsencrypt.org-0000"
            set status "valid"
            set ca_url "https://acme-v02.api.letsencrypt.org/directory"
            set email "mail@customer.com"
        next
    end
end

Auch hier erkennen wir, dass kein Interface konfiguriert ist, über das der ACME-Client die Zertifikatsvalidierung durchführen soll. Zur Fehlerbehebung setzen wir daher das entsprechende Interface im ACME-Client.

FGT # config system acme
FGT (acme) # set interface wan
FGT (acme) # end

Nachdem wir das Renewal manuell initiiert haben, überprüfen wir den Status des Zertifikats erneut mithilfe des Diagnose-Befehls. Der folgende Auszug veranschaulicht den vollständigen und korrekten Zertifizierungsdialog.

FGT # diagnose sys acme status-full fgt.customer.com
{
  "name": "fgt.customer.com",
  "finished": true,
  "notified": false,
  "next-run": "Wed, 27 Dec 2023 08:54:24 GMT",
  "last-run": "Tue, 26 Dec 2023 09:54:20 GMT",
  "valid-from": "Wed, 27 Dec 2023 08:54:24 GMT",
  "errors": 0,
  "last": {
    "status": 0,
    "detail": "The certificate for the managed domain has been renewed successfully and can be used from Wed, 27 Dec 2023 08:54:24 GMT on.",
    "valid-from": "Wed, 27 Dec 2023 08:54:24 GMT"
  },
  "log": {
    "entries": [
      {
        "when": "Tue, 26 Dec 2023 09:54:26 GMT",
        "type": "finished"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:26 GMT",
        "type": "progress",
        "detail": "The certificate for the managed domain has been renewed successfully and can be used from Wed, 27 Dec 2023 08:54:24 GMT on."
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:25 GMT",
        "type": "progress",
        "detail": "Retrieving certificate chain for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:25 GMT",
        "type": "progress",
        "detail": "Waiting for finalized order to become valid"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:24 GMT",
        "type": "progress",
        "detail": "Submitting CSR to CA for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:24 GMT",
        "type": "progress",
        "detail": "Creating CSR for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:24 GMT",
        "type": "progress",
        "detail": "Finalizing order for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:23 GMT",
        "type": "progress",
        "detail": "Waiting for order to become ready"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:23 GMT",
        "type": "progress",
        "detail": "Monitoring challenge status for fgt.customer.com: domain authorization for fgt.customer.com is valid"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:23 GMT",
        "type": "progress",
        "detail": "Monitoring challenge status for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:22 GMT",
        "type": "progress",
        "detail": "Starting challenges for domains"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:22 GMT",
        "type": "progress",
        "detail": "Loaded order from staging"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:21 GMT",
        "type": "progress",
        "detail": "Selecting account to use for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:21 GMT",
        "type": "progress",
        "detail": "Driving ACME protocol for renewal of fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:20 GMT",
        "type": "progress",
        "detail": "Contacting ACME server for fgt.customer.com at https://acme-v02.api.letsencrypt.org/directory"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:20 GMT",
        "type": "progress",
        "detail": "Assessing current status"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:20 GMT",
        "type": "progress",
        "detail": "Checking staging area"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:20 GMT",
        "type": "progress",
        "detail": "Monitoring challenge status for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:20 GMT",
        "type": "starting"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:19 GMT",
        "type": "progress",
        "detail": "Monitoring challenge status for fgt.customer.com: domain authorization for fgt.customer.com is valid"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:19 GMT",
        "type": "progress",
        "detail": "Monitoring challenge status for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:18 GMT",
        "type": "progress",
        "detail": "Setting up challenge 'http-01' for domain fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:18 GMT",
        "type": "progress",
        "detail": "Starting challenges for domains"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:17 GMT",
        "type": "progress",
        "detail": "Creating new order"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:16 GMT",
        "type": "progress",
        "detail": "Selecting account to use for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:16 GMT",
        "type": "progress",
        "detail": "Driving ACME protocol for renewal of fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:16 GMT",
        "type": "progress",
        "detail": "Resetting staging for fgt.customer.com"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:15 GMT",
        "type": "progress",
        "detail": "Contacting ACME server for fgt.customer.com at https://acme-v02.api.letsencrypt.org/directory"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:15 GMT",
        "type": "progress",
        "detail": "Assessing current status"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:15 GMT",
        "type": "progress",
        "detail": "Resetting staging area"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:15 GMT",
        "type": "progress",
        "detail": "Checking staging area"
      },
      {
        "when": "Tue, 26 Dec 2023 09:54:15 GMT",
        "type": "starting"
      }
    ]
  }
}

Das Zertifikat ist somit erfolgreich neu verifiziert und ausgestellt worden. Es ist jedoch zu beachten, dass das Startdatum des neuen Zertifikats nicht sofort wirksam wird, sondern erst im Rahmen des nächsten Durchlaufs des ACME-Clients übernommen wird. Die relevanten Termine sind im Header des Auszugs angegeben.

  • last-run: Tue, 26 Dec 2023 09:54:20 GMT
  • next-run: Wed, 27 Dec 2023 08:54:24 GMT
  • valid-from: Wed, 27 Dec 2023 08:54:24 GMT

Daher überprüfen wir am 27. Dezember 2023 den Status des Zertifikats auf der FortiGate. Durch das Aufrufen der durch dieses Zertifikat geschützten Inhalte bestätigen wir, dass nun das korrekte Zertifikat verwendet wird. Es ist jedoch zu beachten, dass die Zeitzone GMT verwendet wird.

Weitere Ursachen

Während meiner Recherche und Analyse identifizierte ich die folgenden Fehlerquellen als häufige Ursachen:

  1. Falsche Konfiguration des ACME-Clients oder fehlende Definition von Interfaces.
    • Überprüfen Sie die Einstellungen des ACME-Clients und stellen Sie sicher, dass die relevanten Interfaces ordnungsgemäß konfiguriert sind.
  2. Fehlende oder nicht funktionierende DNS-Server.
    • Prüfen Sie, ob DNS-Server der FortiGate korrekt konfiguriert sind und Namensauflösung möglich ist.
  3. Probleme mit der Certificate Authority (CA) von LetsEncrypt und der Vertrauensstellung der FortiGate.
    • Stellen Sie sicher, dass die FortiGate das CA-Zertifikat von LetsEncrypt korrekt vertraut.
  4. Explizite Verbote durch Local-In-Policy für Verbindungen zu Port 80/443.
    • Überprüfen Sie die Local-In-Policy, um sicherzustellen, dass keine Einschränkungen für die Kommunikation zu Port 80/443 bestehen.
  5. Konflikte mit anderen Diensten auf Port 443, wie SSL-VPN, Virtual Server oder Virtual IP.
    • Stellen Sie sicher, dass keine Konflikte mit anderen Diensten auf demselben Port bestehen.
  6. Vorhandensein von Proxy- und Firewall-Diensten vor der FortiGate mit restriktiven Regelwerken.
    • Überprüfen Sie die Konfiguration von Proxy- und Firewall-Diensten vor der FortiGate auf mögliche Restriktionen in deren Regelwerken.
  7. Firmware-Bugs, insbesondere in Version 7.2.3 mit Problemen bei mehreren hinterlegten Interfaces.
    • Überprüfen Sie, ob bekannte Bugs in der Firmware, insbesondere in der Version 7.2.3, vorliegen und ggf. auf eine aktualisierte Firmware-Version upgraden.
  8. Generelle Bugs in der eingesetzten Firmware.
    • Konsultieren Sie die Release Notes der Firmware, um festzustellen, ob bekannte Bugs existieren und prüfen Sie gegebenenfalls auf verfügbare Updates.

Quellen

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .