Как использовать клиентский сертификат на странице приглашений

Здравствуйте,

У нас установлена Discourse с доступом только по приглашениям. При отправке приглашения приглашённый должен иметь возможность принять его только при наличии определённого клиентского сертификата в браузере.

Есть ли какие-либо подсказки, как это реализовать?

С уважением, Хармстра

В конфигурацию nginx нужно добавить что-то вроде следующего:

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

Если это должно применяться только для приглашений, вам нужно разместить это в блоке location, содержащем маршрут для принятия приглашения.

Привет, @michaeld,

Возможно ли также использовать поле сертификата и сохранить его в экземпляр пользователя как поле пользователя? Например, если мы хотим сохранить дату истечения срока действия, можем ли мы это сделать?

Это кажется неоправданно сложным. Какой у вас случай использования?

Я согласен с этим.

Сценарий использования следующий: у нас есть организация, которая аутентифицирует компании с помощью этих клиентских сертификатов. Мы пытаемся создать экземпляр Discourse, доступ к которому получат только эти компании. Судя по фрагменту nginx, предоставленному @michaeld, это должно быть довольно просто.

В сертификате также указан номер компании. Мы хотели бы извлекать этот номер и делать его доступным в экземпляре Discourse. Так компании смогут легко находить друг друга, и их можно будет идентифицировать только по номеру.

Надеюсь, теперь всё понятно. Если нет — не стесняйтесь спрашивать.

Вау. Это звучит не так глупо, как я представлял!

Можно ли рассчитывать на то, что сотрудники этих компаний будут использовать корпоративные адреса электронной почты? Это было бы намного проще, чем плагин, способный читать сертификат. Вы даже могли бы сопоставить его обратно с номером компании, если этот номер каким-то образом очень важен.

Вы можете передать сертификат в Discourse, используя строку вида

proxy_set_header X-Cert-DN: $ssl_client_s_dn;

а затем создать какой-либо плагин для чтения этого значения из заголовка.