- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我开发了一个 WCF 自托管服务,我有两个基本的安全要求,因为它将通过 Internet 访问:
传输层应防止篡改和嗅探,尤其是身份验证凭据的检索。这就是 SSL 的作用,但据我所知,设置 SSL 需要安装证书(可能通过使用普通证书文件的 this hack 除外),我宁愿不必这样做。
身份验证层应包含用户名/密码验证器。
我将我的服务配置为使用:
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
<transport clientCredentialType="Basic" />
</security>
即使传输层是 HTTP(不是 HTTPS),这是否会让 WCF 创建另一个等同于 SSL 的安全层?如果不是,在安全强度方面有何不同?
此外,有没有什么方法可以在不使用 SSL 证书的情况下保护元数据端点(不是必需的,但我们将不胜感激)?
这是我的自托管服务的完整配置代码:
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
<system.serviceModel>
<services>
<service name="MyService">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8000/Services" />
</baseAddresses>
</host>
<endpoint address ="MyService" binding="wsHttpBinding" contract="IMyService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="Binding1" maxReceivedMessageSize="2147483647">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" />
<transport clientCredentialType="Basic" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="CR.Common.Services.CustomValidator, Common" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
谢谢!
最佳答案
默认情况下,所有安全 WCF 绑定(bind)(如 wsHttpBinding)都会对消息进行加密和签名。
SSL 强制使用证书,您提供的链接中的 hack 是 hacking wcf,而不是 SSL。因为在没有 SSL 的情况下,WCF 禁止使用 basicHttpBinding(以明文形式发送 xml)和 UserNamePasswordValidator,因为在这种情况下,拦截消息的任何人都可以获得用户名/密码。
使用 WSHttpBinding,您可以避免使用 SSL 并将安全性置于消息级别。
我强烈建议您阅读 this article ,尤其是Service Credentials and Negotiation章节:
To support mutual authentication and message protection, services must provide credentials to the caller. When transport security is used (SSL), service credentials are negotiated through the transport protocol. Service credentials for message security can also be negotiated when Windows credentials are used; otherwise a service certificate must be specified
对于 UserNamePasswordValidator
,您必须在服务器上配置证书以允许客户端对每条消息进行签名和加密(使用证书的公钥)。如果您使用的是 Windows 身份验证,则不需要。
你为什么这么担心证书?
关于c# - 没有证书的 TransportWithMessageCredential 对于 WCF 服务是否足够安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10696303/
对于我的问题,我找不到更好的措辞。 在我的应用程序中的某个时刻,我设置了一些非常密集的动画。问题是,在高端设备上,动画运行流畅且赏心悦目。另一方面,我测试过的一台低端设备在制作动画时表现非常糟糕。 试
我正在修补 OTP 模块 ( yubico_pam ),并尝试访问管理员选择的控制标志(例如必需,足够, ETC)。 有什么想法吗?这是否可行(无需解析文件)? 最佳答案 无法在 API 中查询此信息
我有一些为 Linux 编写的 C 代码,依赖于套接字和 arpa/inet.h 以及 libusb.h,我想在 MinGW 下为 Windows 编译它。 (请注意,当前项目只有一个非常简单的 Ma
我是一名优秀的程序员,十分优秀!