Как безопасно поддерживать связь между PHP и WCF

Моя система основана на .net. Их система основана на PHP. Мы хотим обмениваться информацией для поиска и добавлять данные в соответствующие базы данных. Это нужно сделать безопасно, и две системы будут единственными игроками в этой игре.

Я занимаюсь некоторыми исследованиями, но вещи, связанные с безопасностью, всегда меня отталкивают. Я должен признать, что у меня возникли проблемы с пониманием того, что все в файле конфигурации (web.config на веб-сайте WCF).

С чего начать, чтобы обеспечить надежную передачу данных? Предполагая, что я выясню обязательный материал, будут ли они отправлять имя пользователя и пароль, которые мне придется извлечь из их сообщения? Клиент будет подключаться к адресу https.

На самом деле есть много способов ответить на этот вопрос …

Я предполагаю, что их приложение PHP будет общаться с вашим сервером WCF с помощью SOAP?

Таким образом, WCF имеет два способа обеспечения безопасности: на уровне транспорта или на уровне сообщений. В основном, если вы включите безопасность уровня транспортного уровня, он шифрует все соединение. Это означает, что он будет использовать HTTPS. Это, в свою очередь, означает, что весь разговор зашифрован, как если бы вы отправляли информацию о своей кредитной карте на веб-сайт в веб-форме. Это не менее безопасно. Альтернативой является безопасность на уровне сообщений. Это означает, что вместо шифрования всего соединения связь будет происходить по простому незашифрованному HTTP, но само фактическое сообщение будет зашифровано перед передачей по проводу.

Если ваша служба размещена в IIS, то проще всего использовать BasicHttpBinding и включить безопасность транспорта. Затем в IIS используйте SSL-сертификат и HTTPS.

Это будет обрабатывать шифрование сообщений. В прошлом, если вам нужно обрабатывать «логин» в качестве имени пользователя и пароля, WCF имеет встроенный способ обработки этого. Это может помочь: http://nirajrules.wordpress.com/2009/05/22/username-over-https-custombinding-with-wcf%E2%80%99s-channelfactory-interface/

Сам PHP не поддерживает безопасность сообщений. Для его поддержки нужны дополнительные рамки. Я интегрировал клиента WCF с PHP, предоставляющим веб-службу с защитой сообщений, предоставляемой инфраструктурой веб-сервисов WSO2 . В структуре WSO2 не так много функций, как WCF (по крайней мере, это говорили разработчики PHP), она поддерживает асимметричную безопасность (WS-Security) с сертификатом сервера и клиента (XK509 Certificate Token Profile) и с именем пользователя и паролем в качестве поддержки token (профиль токена имени пользователя с переваренным паролем). Сертификаты используются для шифрования и подписи сообщений, для аутентификации используется имя пользователя. Эта интеграция была довольно сложной задачей, потому что WCF в отличие не поддерживает профиль токена имени пользователя с переваренным паролем, и мы должны реализовать его сами.

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

Вам действительно нужно будет определить ограничения PHP с точки зрения стандартов веб-сервиса. Может ли он обрабатывать WS-Security, например?

Вы можете ограничить basicHttpBinding через SSL, посылая имя пользователя / пароль в заголовке SOAP (при условии, что он обрабатывает заголовки SOAP).