Во-первых, оба подхода безопасны и их хватит на 90% случаев. Транспортная безопасность защищает ваш канал связи, но не шифрует ваше фактическое сообщение. Безопасность сообщений шифрует ваше фактическое сообщение, поэтому серверы, через которые оно передается, не могут видеть его содержимое, и им потребуется закрытый ключ для расшифровки ваших сообщений. Таким образом, можно утверждать, что безопасность сообщений более безопасна, по крайней мере, она больше подходит для интернет-общения. Несколько хороших ссылок по безопасности WCF: Безопасность сообщений в WCF и шаблоны и практики Руководство по повышению безопасности веб-служб < / а>
netTcpBinding
по умолчанию использует безопасность транспорта, но это не значит, что вы не можете использовать с ним безопасность сообщений. Транспортная безопасность требует меньших затрат на вычисления, чем безопасность сообщений (где каждое сообщение зашифровано), поэтому она имеет лучшую производительность. Одно предостережение при использовании netTcpBinding
через Интернет заключается в том, что его постоянная работа не может быть гарантирована (хотя в прошлом я successfully
настраивал netTcpBinding
через Интернет), поскольку он использует некоторые порты для передачи сообщений, которые не всегда гарантированно работают. оставлено открытым для сетевых маршрутизаторов и брандмауэров (через Интернет ваши сообщения будут проходить через множество маршрутизаторов и брандмауэров). Для интернет-связи рассмотрите одну из привязок HTTP, например basicHttpBinding
или wsHttpBinding
, которая также поддерживает безопасность сообщений.
Вы можете использовать безопасность сообщений, как и в других привязках:
<netTcpBinding>
<binding name="securedBinding">
<security mode="Message">
</security>
</binding>
</netTcpBinding>
а затем установите bindingConfiguration
на конечных точках на securedBinding
.
И на машине, на которой размещена ваша служба (сервер):
<behavoirs>
<serviceBehavior>
<behavior name="securityBehaviour">
<serviceCredentials>
<serviceCertificate
findValue="serviceCert"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavoir>
</serviceBehavior>
</behavoirs>
<services>
<service name="Service1" behaviorConfiguration="securityBehaviour">
<endpoint address="" binding="netTcpBinding" contract="IService1" bindingConfiguration="securedBinding">
</endpoint>
</service>
</services>
Если у вас ограниченное количество клиентов и вы знаете, кто они, вы можете использовать самозаверяющие сертификаты. Однако, если вам нужна оптимальная безопасность с большим количеством неизвестных клиентов, использующих ваш сервис, лучше всего покупать его у известного центра сертификации. Затем вам необходимо установить сертификаты сервера на сервер. Здесь - это статья о том, как защитить свои службы с помощью сертификатов, в блоге также есть некоторые другие полезные статьи по безопасности WCF, которые вы, возможно, захотите прочитать.
person
Mohammad Sepahvand
schedule
01.04.2013