Как мне поддерживать аутентификацию SSL Client Certificate? - PullRequest
10 голосов
/ 26 августа 2008

Я хочу сделать то, что делает myopenid - после того, как вы вошли в систему, вы можете нажать кнопку, которая сгенерирует вам сертификат SSL; браузер затем загружает этот сертификат и сохраняет его. Когда вы позже вернетесь на yourid.myopenid.com, ваш браузер сможет использовать сохраненный сертификат для аутентификации, поэтому вам никогда не понадобится пароль.

Итак, мои вопросы: что требуется, чтобы это работало? Как я могу генерировать сертификаты? Как я могу подтвердить их, как только они будут мне возвращены?

Мой стек - это Rails на Apache с использованием Passenger, но я не слишком конкретен.

Ответы [ 5 ]

8 голосов
/ 26 августа 2008

Обычно они называются сертификатами на стороне клиента.

Я на самом деле не использовал его, но измененную версию restful-аутентификации можно найти здесь здесь , которая выглядит как то, что вы после.

Я нашел это через Доктор. Пост Ника

2 голосов
/ 26 августа 2008

Зависит от сервера, но самое простое из известных мне решений с использованием Apache:

FakeBasicAuth

"Когда эта опция включена, отличительное имя субъекта (DN) сертификата клиента X509 преобразуется в имя пользователя базовой авторизации HTTP. Это означает, что для контроля доступа можно использовать стандартные методы проверки подлинности Apache. Имя пользователя только предмет сертификата клиента X509 (можно определить, выполнив команду openssl x509 OpenSSL: openssl x509 -noout -subject -in certificate.crt). Обратите внимание, что пароль от пользователя не получен ... "

Не уверен насчет рельсов, но обычная переменная среды REMOTE_USER должна быть доступна каким-то образом.

1 голос
/ 29 октября 2012

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

Вы также можете сгенерировать клиентские сертификаты SSL на стороне сервера, используя OpenSSL в Ruby ( см. Это q ). (Это будет работать в любом браузере без специфичного для браузера кода, но ваш сервер сгенерирует закрытый ключ клиента, который не идеален для крипто-пуристов.)

Какой бы метод вы не использовали для их создания, вам потребуется настроить веб-сервер так, чтобы он запрашивал сертификаты клиента. См. документацию по Apache для примера.

1 голос
/ 29 августа 2008

Если вы хотите сгенерировать сертификаты, вам нужно заставить клиента сгенерировать пару ключей и отправить вам хотя бы открытый ключ. Вы можете сделать это в Firefox с помощью вызова Javascript, это crypto.generateCRMFRequest . Я предполагаю, что есть специфичные для браузера методы, доступные и в других браузерах. Но сначала вам нужно выяснить, как выдать сертификат после получения открытого ключа.

Вы можете написать что-нибудь на сервере с OpenSSL, но он имеет встроенную поддержку CSR, а не формат CRMF, который вам отправит Firefox. Таким образом, вам нужно написать некоторый код для преобразования CRMF в CSR, что потребует какой-то возможности обработки DER & hellip; Я просто выхожу на поверхность - управление ЦС, даже для игрушечного приложения, не тривиально.

Решения SSO, такие как OpenId и PKI, перекрываются, и в PKI есть элегантность. Но дьявол кроется в деталях, и есть веские причины, по которым этот подход существует уже давно, но получил распространение только в правительственных и военных приложениях.

Если вы заинтересованы в этом, ответьте на некоторые вопросы, относящиеся к платформе, на которой вы хотели бы развивать свою службу CA.

0 голосов
/ 09 января 2009

Я работаю над решением этой проблемы. Я хотел сделать то же самое, и я знаю, что многие другие владельцы веб-сайтов хотят эту функцию, со сторонним поставщиком или без него.

Я создал необходимые настройки сервера и плагин firefox для обработки аутентификации на основе сертификатов. Перейдите на mypassfree.com, чтобы получить бесплатный плагин Firefox. Напишите мне (ссылка на этой странице) для настройки сервера, так как я еще не упаковал его с хорошим установщиком.

Настройка сервера - Apache2 + OpenSSL + Perl (но вы можете переписать сценарии perl на любом языке)

Jonathan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...