IPC в Windows между Java и Python защищен для текущего пользователя - PullRequest
0 голосов
/ 23 ноября 2010

У нас есть Rest API, который требует аутентификации сертификата клиента. API используется этой коллекцией скриптов Python, которые может запускать пользователь. Чтобы пользователю не приходилось вводить свой пароль для своего клиентского сертификата при каждом запуске одного из сценариев, мы создали этот процесс посредника в Java, который пользователь может запускать и запускать в фоновом режиме, который содержит пароль сертификата пользователя в памяти (у нас просто установлено свойство javax.net.ssl.keyStorePassword в JVM). Сценарии связываются с этим процессом, и процесс просто перенаправляет вызовы API Rest на сервер (добавляя учетные данные сертификата).

Чтобы выполнить IPC между сценариями и процессом брокера, мы просто используем сокет. Проблема заключается в том, что сокет создает угрозу безопасности, поскольку кто-то может использовать API Rest с помощью сертификата другого человека, связываясь через порт процесса посредника на компьютере другого человека. Мы несколько снизили риск, используя безопасность java, чтобы разрешить подключения к порту только с localhost. Я думаю, что кто-то в теории все еще может сделать это, подключившись к машине удаленно, а затем используя порт. Есть ли способ еще больше ограничить использование порта для текущего пользователя Windows? Или, может быть, есть другая форма IPC, которую я мог бы использовать для авторизации с использованием текущего пользователя Windows?

Мы используем Java для процесса брокера только потому, что все в нашей команде гораздо лучше знакомы с Java, чем с python, но его можно переписать на python, если это поможет.

Редактировать: Только что вспомнил, другая причина использования java для процесса брокера заключается в том, что мы застряли с использованием python v2.6, и в этой версии https с сертификатами клиентов не поддерживается ( по крайней мере, без использования сторонней библиотеки).

Ответы [ 2 ]

0 голосов
/ 25 ноября 2010

Я думаю, что нашел решение, вдохновленное постом Мартина выше. Когда процесс брокера запустится, я создам мини-http-сервер, прослушивающий порт IPC. Также во время запуска я напишу файл, содержащий случайно сгенерированный пароль (который отличается при каждом запуске) в домашний каталог пользователя, чтобы только пользователь мог читать файл (или администратор, но я не думаю, что мне нужно беспокоиться об этом ). Затем я заблокирую порт IPC, требуя, чтобы все http-запросы, отправленные туда, использовали пароль. Это немного Rube Goldberg-esque, но я думаю, что это сработает.

0 голосов
/ 23 ноября 2010

Самый простой подход - использовать контроль доступа на основе файлов cookie. Имейте файл в профиле пользователя / домашнем каталоге, который содержит куки. Пусть сервер Java сгенерирует и сохранит файл cookie, а клиентские сценарии Python отправят файл cookie в качестве первого фрагмента данных для любого TCP-соединения.

Это безопасно, если злоумышленник не может получить cookie, который затем должен быть защищен ACL файловой системы.

...