И CACert, и MyOpenID делают это: у них есть форма, которая при отправке заставит браузер сгенерировать ключ и отправить открытую часть для подписи, а затем доставить обратно подписанный сертификат, содержащий этот открытый ключ, который браузер связывает. в своем хранилище ключей и будет использоваться для аутентификации в будущем. Я знаю, как использовать SSLVerify и тому подобное для проверки сертификата клиента, когда он есть у пользователя, и я знаю, как сгенерировать сертификат CA и клиентские сертификаты, обычно используя инструменты командной строки openssl, но не знаю, как сделать бит взаимодействия с браузером для генерации ключ и т. д.
Я, наверное, использую Apache и Ruby / Rack или PHP, если это помогает :)
Вы ищете тег keygen. Видеть Страница Mozilla.
Возможно, тебе лучше позволить EJBCA сделайте это, поскольку он обрабатывает различные особенности браузера, используя его компонент external-ra (Я сделал :) ).
По сути, создайте два экземпляра ejbca. Один, чтобы действовать как ваш CA за вашей защищенной сетью. Еще один экземпляр в качестве веб-интерфейса, который будет использоваться для регистрации ваших пользователей. CA опрашивает ra, запрашивая базу данных MySQL ra (файл конфигурации externalra.properties), выбирает все невыполненные CSR, подписывает их и затем отправляет сертификаты обратно.
Чтобы зарегистрировать пользователя:
Вот простой ejbca сценарий сборки, который я использовал. Это не сработает сразу, но должно работать. Обновление: также см. Это вопрос и эта ссылка для использования клиентского сертификата в Apache