Зашифрованные и подписанные MIME-сообщения с использованием RFC 1847
-
10-07-2019 - |
Вопрос
Мне нужно решение для шифрования клиент-сервер для веб-передачи, (т.е.подписанный и зашифрованный на стороне клиента, а также проверенный и расшифрованный на стороне сервера).
Я использую HTTP, но SSL недоступен из-за ограничений общего хостинга (мой сервер является средой общего хостинга).Изучая альтернативные решения, я остановил свой выбор на OpenPGP, используя GnuPG.Одна из причин заключается в том, что он поддерживается в PHP с помощью различных модулей PEAR и PECL (PHP - это язык, который я намерен использовать для и то , и другое мой клиентский скрипт и мой серверный скрипт, хотя Perl также доступен в качестве последнего средства).
Сейчас я пытаюсь определиться с наилучшим способом передачи данных.Я наткнулся на RFC 1847, который определяет зашифрованные и подписанные составные MIME-сообщения.Этот протокол расширен специально для PGP в RFC 3156.(Я думаю, что эти протоколы связаны с протоколом зашифрованной электронной почты S / MIME).
Мой вопрос заключается в следующем:есть ли какие-либо причины следовать этим стандартам?Что касается протоколов, они выглядят как разумные решения, но есть ли какие-либо клиенты, которые действительно используют этот протокол?Например, если я отправил составной / зашифрованный запрос на веб-сервер Apache, будет ли какой-нибудь простой способ получить данные?Мои тесты с использованием PHP-скрипта заставили меня подумать, что PHP бесполезно пытаться расшифровать подобные запросы (данные $ _POST, похоже, поступают из данных MIME-типа 'multipart / form-data').
Как мой хозяин будет позвольте мне открыть розетки, это бы я мог бы использовать PHP socket programming API для написания PHP-скрипта, который действовал бы как сервер, который будет принимать HTTP-запросы "multipart / encrypted" и "multipart / signed", но это кажется излишним.
Есть какие-нибудь предложения?
Для получения дополнительной информации о моей проблеме, пожалуйста, смотрите этот вопрос.
Решение
Вы правы - эти протоколы связаны с протоколом зашифрованной почты, использование которого в вашем случае немного излишне, и вам придется использовать расширение OpenSSL php.Используйте OpenPGP.
Поскольку ваш клиент будет написан на PHP - рассмотрите следующие сценарии:
Сценарий 1:создайте простой веб-сервис SOAP
Серверные и клиентские методы были бы одинаковыми:
- getPublicKey() - возвращает открытый ключ.
- SendMessage(msg) - возвращает ответ
Сценарий 2:используйте GET / POST сообщение
- Клиент -> HTTP GET (пришлите мне свой открытый ключ) -> Сервер
- Клиент <- (мой открытый ключ - xxxx) <- Сервер
- Клиент шифрует сообщение с общественными сервера ключевой клиент добавляет собственный открытый ключ сообщение
- Клиент -> HTTP POST (отправляет зашифрованное сообщение) -> Сервер
- Сервер декодирует сообщение и кодирует ответ открытым ключом клиента
- Клиент <- (закодированный ответ клиенту) <- Сервер