Как мне поддерживать аутентификацию по сертификату клиента SSL?

StackOverflow https://stackoverflow.com/questions/28599

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

На самом деле я им не пользовался, но модифицированную версию restful-authentication можно найти здесь здесь это похоже на то, что тебе нужно после.

Я нашел это через ДокторСообщение Ник

Другие советы

Зависит от сервера, но самое простое решение, о котором я знаю, - использование Apache:

Поддельный базовый автор

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

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

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

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

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

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

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

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

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

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

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

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

Джонатан

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top