Назад | Перейти на главную страницу

Создание сертификата SSL / TLS на стороне клиента из браузера

И CACert, и MyOpenID делают это: у них есть форма, которая при отправке заставит браузер сгенерировать ключ и отправить открытую часть для подписи, а затем доставить обратно подписанный сертификат, содержащий этот открытый ключ, который браузер связывает. в своем хранилище ключей и будет использоваться для аутентификации в будущем. Я знаю, как использовать SSLVerify и тому подобное для проверки сертификата клиента, когда он есть у пользователя, и я знаю, как сгенерировать сертификат CA и клиентские сертификаты, обычно используя инструменты командной строки openssl, но не знаю, как сделать бит взаимодействия с браузером для генерации ключ и т. д.

Я, наверное, использую Apache и Ruby / Rack или PHP, если это помогает :)

Вы ищете тег keygen. Видеть Страница Mozilla.

Возможно, тебе лучше позволить EJBCA сделайте это, поскольку он обрабатывает различные особенности браузера, используя его компонент external-ra (Я сделал :) ).

По сути, создайте два экземпляра ejbca. Один, чтобы действовать как ваш CA за вашей защищенной сетью. Еще один экземпляр в качестве веб-интерфейса, который будет использоваться для регистрации ваших пользователей. CA опрашивает ra, запрашивая базу данных MySQL ra (файл конфигурации externalra.properties), выбирает все невыполненные CSR, подписывает их и затем отправляет сертификаты обратно.

Чтобы зарегистрировать пользователя:

  • Вы должны предварительно создать пользователя в конце ca (конечный объект, как они называются. Это означает, что вы должны создать ca, caprofile и т. Д.)
  • Войдите в интерфейс externalra с учетными данными конечного объекта и отправьте форму.
  • Браузер клиента начнет отображать значок занятости.
  • CSR попадает в ra db и ждет, пока CA заберет csr и вернет сертификат. Как только сертификат попадает в ra db, он представляется пользователю.

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