Доступ к секретному ключу SSL из сервлета - PullRequest
3 голосов
/ 29 октября 2010

Я использую Apache Tomcat локально и установил самозаверяющий сертификат с использованием OpenSSL. У меня также работает сервлет.

Я хочу сделать следующее: Сервлет принимает параметры POST и возвращает параметры, подписанные с помощью PrivateKey сервера. То есть обработайте входной параметр как целое число и увеличьте его до степени секретного ключа.

Проблема: возможно ли получить доступ к серверу PrivateKey из сервлета? При развертывании на каком-либо другом хостинге доступ к нему, вероятно, невозможен. Так можно ли запросить у сервера «подпись» некоторого фрагмента данных с помощью своего закрытого ключа?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 29 октября 2010

Если бы я писал веб-сервер, я бы пошел на все, чтобы предотвратить чтение кода из хранилища сертификатов - я бы, конечно, не обеспечил бы вызов API!

Обычно сертификат хранится в виде файла в файловой системе веб-сервера (не всегда), но для сайта с какой-либо серьезной защитой он будет зашифрован и потребует парольную фразу для расшифровки. Поскольку вы используете самозаверяющий сертификат, он, вероятно, не зашифрован - просто импортируйте сертификат из файла в хранилище ключей.

1 голос
/ 29 октября 2010

Это зависит от конфигурации контейнера. В общем случае конфигурация SSL контейнера не будет доступна сервлету, который он содержит. Например, в Apache Tomcat конфигурация SSL этого коннектора может быть полностью независимой от настроек, доступных сервлету. (Кроме того, SSL может обрабатываться, например, APR или интерфейсом Apache Httpd, что не имеет большого отношения к конфигурации хранилища ключей Java).

Вы, вероятно, сможете получить доступ к хранилищу ключей, если они настроены с использованием свойств javax.net.ssl.*. Однако это не обязательно способ настройки SSLContext разъема сервера. Обычно не рекомендуется передавать эти параметры в командной строке в производственной среде.

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

Обратите внимание, что вы можете использовать свое собственное хранилище ключей, поставляемое в вашем веб-приложении (его можно даже загрузить из classpath как поток ресурсов). Будет ли это хранилище ключей содержать тот же закрытый ключ, что и используемый SSL-уровнем сервера, решать администраторам сервера (если они позволят вам его получить).

0 голосов
/ 30 октября 2010

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

0 голосов
/ 29 октября 2010

Если вы используете хранилище ключей Java, вы можете получить к нему доступ из своего сервлета, если он знает местоположение хранилища ключей и пароль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...