Подтвердить что ты не робот

Создание сертификатов на стороне клиента в браузере и подписывание на сервере

Можно ли запросить создание клиентской ключевой пары в браузере и отправить открытый ключ на сервер CA, который будет подписан прозрачно? Затем установите подписанный сертификат в браузере пользователя?

Сценарий:

  • Пользователь открывает веб-страницу https://examle.com/, удостоверяется личность сервера
  • Пользователь запрашивает создание учетной записи.
  • Keypair создается в браузере пользователя и не отображается на сервере /CA
  • Pubkey отправляется на сервер для подписания
  • Сервер подписывает ключ и генерирует сертификат
  • Сертификат отправляется клиенту и устанавливается в браузере вместе с закрытым ключом

В следующий раз клиент подключается к серверу, его идентификация проверяется на основе сертификата клиента.

Было бы неплохо, если бы сервер мог заставить/намекнуть клиенту защитить свой закрытый ключ, используя шифрование паролей.

Я видел онлайн-банкинг с помощью java-апплета для этой задачи. Можно ли это сделать, используя собственные возможности браузера? Решение Apache/PHP или Node.js будет приветствоваться.

4b9b3361

Ответ 1

Да, это возможно. Однако нет межсерверных решений.

  • Для Internet Explorer вам нужно будет использовать некоторые элементы управления ActiveX с помощью X509Enrollment.CX509EnrollmentWebClassFactory или CEnroll.CEnroll, в зависимости от того, работает ли он в Windows XP или Vista/7. Это создаст запрос сертификата PKCS # 10 (который может потребоваться обернуть между традиционными разделителями.
  • В остальном вы должны использовать тег <keygen />. Это устаревший тег Netscape, а не официальный HTML раньше, но он превратил его в HTML 5 (хотя MS заявила, что не будет поддерживать его в своих реализациях). Это создаст структуру SPKAC (аналогичную CSR).
  • Для Firefox (хотя он поддерживает keygen), вы можете использовать функции Вот пример script, который должен выполнять большую часть работы для ActiveX или Keygen.

    Когда сервер отправляет сертификат в ответ (возможно, позже), браузер должен импортировать его в свой магазин и связать его с закрытым ключом, который он сгенерировал во время запроса.

    Как защищенный секретный ключ будет зависеть от браузера или механизма хранилища сертификатов. Например, в Firefox должен быть главный пароль на устройстве безопасности.

    На стороне сервера вы можете реализовать собственный CA с помощью различных инструментов. OpenSSL и BouncyCastle могут обрабатывать PKCS # 10 и SPKAC. Вот пример BouncyCastle (связанный с script выше) и некоторый код для CRMF.

    Если вы хотите готовое решение, вам может быть интересно что-то вроде OpenCA.