招待ページでクライアント証明書を使用する方法

こんにちは、

当社は「招待制」の Discourse インストールを行っています。招待を送信した際、招待されたユーザーはブラウザに特定のクライアント証明書が存在する場合にのみ招待を受け入れることができるようにしたいと考えています。

この実現方法について何かご存知でしょうか?

Grtz Harmstra

nginx の設定には、以下のような記述が必要です。

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

招待の受付時のみ有効にしたい場合は、招待受諾のルートを含む location ブロックで設定を行う必要があります。

@michaeld さん、こんにちは。

証明書フィールドを使用して、それをユーザーインスタンスのユーザーフィールドとして保存することも可能でしょうか?例えば、有効期限を保存したい場合、それは可能でしょうか?

これは奇妙に複雑に見えます。どのようなユースケースですか?

はい、その通りだと思います。

ユースケースは、ここにある組織が、そのクライアント証明書を使って企業の認証を行っているというものです。私たちは、それらの企業だけがアクセスできる Discourse インスタンスを作成しようとしています。@michaeld が提供してくれた nginx スニペットに基づけば、それほど難しくないはずです。

その証明書には企業の番号も含まれており、その番号を取得して Discourse インスタンス内で利用できるようにしたいと考えています。そうすれば、企業同士が簡単に互いを見つけ合い、企業の番号だけで識別できるようになります。

これで明確になったと思いますが、もし不明な点があれば、お気軽にお尋ねください。

まあ、想像よりはずっと馬鹿げていないようですね!

それらの企業の人が会社のメールアドレスを使うと期待できますか?証明書を読み取るプラグインを使うよりずっと簡単です。もしその番号が何か非常に重要なら、それを企業の番号に逆引きしてマッピングすることも可能です。

以下のような行で、証明書を Discourse に渡すことができます。

proxy_set_header X-Cert-DN: $ssl_client_s_dn;

その後、ヘッダーからその値を読み取るようなプラグインを用意します。