Einschränkungen für Zertifikatserweiterungen beim Proxying von HTTPs mit nginx

Einschränkungen für Zertifikatserweiterungen beim Proxying von HTTPs mit nginx

Ich verwende nginx als Reverse-Proxy, um HTTPS für eine Anwendung zu handhaben, die HTTP spricht. Das funktioniert bisher gut, aber jetzt muss ich in der Lage sein, einzuschränken, welche Art von Zertifikaten ich vom Upstream-Server akzeptiere. Zusätzlich zu den üblichen Überprüfungen muss ich auch in der Lage sein, jedes Zertifikat mit Namensbeschränkungen oder mit Richtlinienzuordnung abzulehnen, sowie das Zertifikat abzulehnen, wenn bestimmte Erweiterungen als kritisch markiert sind.

In OpenSSL könnte dies meiner Meinung nach mit dem verify_callbackvon erreicht werdenSSL_CTX_einstellen_verifizierenindem Sie die x509-Erweiterungen abrufen und prüfen, was vorhanden/kritisch ist.

Ist es möglich, zu:

a) Setzen Sie diese Art von Einschränkungen für Zertifikatserweiterungen in der nginx-Konfiguration? Es scheint, als ob diengx_http_ssl_moduleverfügt über eine ssl_conf_commandDirektive, mit der einige Konfigurationsoptionen an OpenSSL übergeben werden, aber ich bin nicht sicher, ob dies für Reverse-Proxys relevant ist oder ob es zu „benutzerdefinierten“ Zertifikatsvalidierungen führt.

oder

b) Ein benutzerdefiniertes Modul schreiben, das zusätzliche Überprüfungen des vom Upstream empfangenen Zertifikats durchführen und die Verbindung unterbrechen kann, wenn diese fehlschlagen? Ich bin nicht so vertraut damit, wie Module funktionieren, daher wäre ich für jeden Rat dankbar, wenn dies eine mögliche Lösung ist.

oder

c) Ändern Sie die OpenSSL-Konfigurationsdateien, um dies zu erreichen? Vielleicht ist es möglich, diese Einschränkungen auf OpenSSL-Ebene festzulegen und überhaupt keine Änderungen in Nginx vorzunehmen.

Der relevante Teil meiner Konfigurationsdatei sieht folgendermaßen aus:

http {

  keepalive_timeout  65;
  access_log  nginx_access.log;

  server {

    listen 12312;

    location / {
      ...
      proxy_pass https://<ip_address_of_upstream_server>;
      proxy_redirect https://<<ip_address_of_upstream_server>> http://localhost:12312;
      proxy_ssl_certificate certs/client-cert.pem;
      proxy_ssl_certificate_key certs/client-key.pem;
      proxy_ssl_trusted_certificate  certs/root.pem;
      proxy_ssl_verify on;
      ...
    }
  }
}

Danke!

verwandte Informationen