Я пишу утилиту Python, которая позволит синхронизировать файлы и папки по сети между клиентским компьютером и сервером. Синхронизация будет однонаправленной и инициируется push-действием клиента.
Первоначальная «версия 1» для этого довольно проста. Сервер будет находиться в состоянии «всегда включен» (прослушивание) и будет прослушивать соединения от клиента.
Клиент будет запускаться из командной строки. (Отсюда и «push action».) При запуске клиент подключается к серверу, выполняет некоторую форму аутентификации (скорее всего, на основе пар частного/открытого ключей или, альтернативно, имени пользователя и пароля), а затем отправляет каждый файл в целевой каталог на сервер.
Сервер запишет полученные файлы в (другой) целевой каталог.
Безопасность
Чтобы обеспечить безопасность, либо весь сеанс должен быть защищен шифрованием, либо защищенные данные должны отправляться в зашифрованном виде. В этом случае защищенными данными являются закрытый ключ или имя пользователя и пароль, а затем содержимое каждого файла.
Лучший способ обеспечить безопасность
Я не знаю, как лучше всего обеспечить безопасность. Одним из простых решений «создайте свое собственное» было бы предварительное согласование ключа шифрования между клиентом и сервером и использование этого ключа шифрования для шифрования и дешифрования данных. Это можно сделать вручную, просто написав соответствующий код.
Самым простым способом, вероятно, будет использование стандартной библиотеки шифрования/дешифрования. Быстрый поиск показывает, что библиотека криптографии Python, вероятно, является стандартным решением.
Хотя возможны и более ручные решения, например выполнение операции xor между 256 битовый ключ и данные. Я не уверен, насколько это будет безопасно, но, конечно, это будет менее безопасно, чем использование стандартной реализации.
Однако кажется, что лучшим подходом может быть использование библиотеки Python ssl, который обеспечивает TSL 1.3 поверх стандартной библиотеки сокетов.
Я не знаю, будет ли это подходящим решением. Библиотека (как и все библиотеки Python) довольно высокого уровня. Из примеров, приведенных в документации, сложно понять, что он делает и как работает.
Python ssl
I начал писать пример клиент-серверного приложения на Python, использующего библиотеку ssl.
В коде на стороне сервера есть одна строка, которую я не понимаю.
Код: Выделить всё
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
Я не знаю. действительно нужна вторая из этих функций. Благодаря сетевой инфраструктуре, на которой будет работать это клиент-серверное приложение, нет необходимости выполнять проверку, чтобы убедиться, что сервер является тем сервером, за который он выдает себя. Все это будет эффективно работать через виртуальную частную сеть. Вероятно, по этой причине мне не нужно шифровать данные, но это одна из функций безопасности, которую мы хотим иметь, хотя, по всей видимости, она и не нужна.
- Есть ли способ использовать библиотеку Python ssl для шифрования, но без необходимости загружать файлы сертификата и закрытого ключа?
Подробнее здесь: https://stackoverflow.com/questions/791 ... library-ar