So verwenden Sie ein Clientzertifikat auf der Einladungsseite

Hallo,

wir haben eine Discourse-Installation, die nur auf Einladung funktioniert. Wenn wir eine Einladung senden, soll der Empfänger die Einladung nur dann annehmen können, wenn ein bestimmtes Client-Zertifikat im Browser vorhanden ist.

Haben Sie einen Hinweis, wie man das umsetzen kann?

Viele Grüße
Harmstra

Für Ihre Nginx-Konfiguration benötigen Sie etwas wie folgt:

ssl_client_certificate /path/to/ca.pem;
ssl_verify_client on;

Soll dies nur für Einladungen gelten, müssen Sie dies in einem location-Block für die Route zur Annahme von Einladungen konfigurieren.

Hallo @michaeld,

Ist es auch möglich, ein Zertifikatsfeld zu verwenden und es als Benutzerfeld in der Benutzerinstanz zu speichern? Wenn wir also beispielsweise das Ablaufdatum speichern möchten, ist das möglich?

Das scheint bizarre kompliziert zu sein. Was ist dein Anwendungsfall?

Ich stimme zu, dass es so ist.

Der Anwendungsfall ist folgender: Es gibt hier eine Organisation, die Unternehmen anhand dieser Client-Zertifikate authentifiziert. Wir versuchen, eine Discourse-Instanz einzurichten, auf die nur diese Unternehmen Zugriff haben. Basierend auf dem von @michaeld bereitgestellten nginx-Snippet scheint das ziemlich einfach zu sein.

In diesem Zertifikat ist auch eine Unternehmensnummer enthalten. Wir möchten diese Nummer extrahieren und in der Discourse-Instanz verfügbar machen. Auf diese Weise können die Unternehmen sich leicht finden und sind allein anhand ihrer Unternehmensnummer identifizierbar.

Ich hoffe, das ist jetzt klar. Falls nicht, fragen Sie gerne.

Wow, das klingt weniger albern, als ich gedacht hätte!

Kann man sich darauf verlassen, dass Mitarbeiter dieser Firmen eine Firmen-E-Mail-Adresse verwenden? Das wäre viel einfacher als ein Plugin, das das Zertifikat auslesen könnte. Man könnte es sogar rückwärts auf die Firmennummer mappen, falls diese Nummer irgendwie sehr wichtig ist.

Sie können das Zertifikat an Discourse übergeben, indem Sie eine Zeile wie

proxy_set_header X-Cert-DN: $ssl_client_s_dn;

verwenden und dann ein Plugin erstellen, das den Wert aus dem Header liest.