Вопрос

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

По сути, требование заключается в том, что веб -приложение должно развлекать запрос только от ноутбука компании, иначе должен отказать в доступе с соответствующим текстом ошибки.

(Это могут быть ноутбуки с определенными сертификатами, установленными на их машине, или они могут быть из определенного набора статических IPS.)

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

Решение

Да, это возможно с помощью сертификатов клиентов HTTPS. Точная настройка и конфигурация зависит от вашего сервера приложений и конкретных требований, но общий сценарий - это то, что вы создаете внутренний CA Компании (Authority Certification) для выпуска сертификатов клиента, которые могут быть ограничены конкретными IP -адресами клиента и настраиваете сервер вашего сервера приложений. HTTPS Connector требует сертификата клиента и для доверия сертификатов, выпущенных вашим собственным CA.

После того, как надлежащая конфигурация была сделана, сертификат клиента (ы) предоставляется/доступно для веб -приложения с помощью атрибута запроса сервлета:

X509Certificate[] certificates = (X509Certificate[])
    request.getAttribute("javax.servlet.request.X509Certificate");

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

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

Пара других мыслей:

  • Почти любой сервер приложений позволит вам установить надежный хранилище сертификатов - список сертификатов CA, который ваш приложение примет для HTTPS Client Auth. Ограничьте это CA, который предоставляет сертификаты клиентов - либо внутренняя компания CA, либо поставщик сертификатов.
  • Выбор внутреннего поставщика CA или CA является корпоративным. Внутренняя CA потребует рабочей силы для настройки и обслуживания, поставщик CA будет стоить вам денег за сертификат. Достигает точку компромисса, где дешевле делать сертификаты самостоятельно, но до тех пор, пока вы не достигнете этой точки, поставщик CA может быть дешевле.
  • Если у вас есть внутреннее CA, и ваше правило состоит в том, что «любая машина компании (с сертификатом) может получить доступ к этому приложению», то ваша работа выполняется в списке Trusted CA на сервере Applicaiton, поскольку вы знаете, что компания CA не будет Используется для всех, кроме людей в компании.
  • Если у вас есть поставщик CA, вам может потребоваться дальше ограничить контроль доступа и использовать код Jambjo, чтобы получить сертификат и посмотреть информацию в нем. Как правило, существует компонент организации (O) и организационной единицы (OU) в субъекте DN (выдающееся имя), которое расскажет вам, какая организация создала этот сертификат. Вы должны быть в состоянии проверить это, чтобы убедиться, что у вас есть компьютер компании.
  • Полезно проверять O и OU, если вы знаете, что ваш поставщик CA никогда не даст имена вашей компании O и OU кому -либо, кроме члена вашей компании. Если это не так, вам может потребоваться проверить хранилище данных (например, каталог LDAP), чтобы убедиться, что пользователь или машина пользователя известны вам.
  • Также можно связать IP -адрес машины с сертификатом - часто субъект -антамен (альтернативное имя субъекта) используется для этого при создании сертификата. Я бы не рекомендовал это, потому что вам понадобится новый сертификат, если вы когда -нибудь измените IP -адрес машины. Это кажется излишне сложным для ваших целей.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top