2017-08-24 64 views
1

我正在构建一个在几十个嵌入式设备上运行的ServiceStack服务。我想确保与设备的所有通信都通过加密通道进行。我研究了各种SSL/TLS选项,但是管理几十个不同的证书,或者向几十个设备发布单个证书,似乎是一个很大的开销。只允许用于ServiceStack主机的`EncryptedMessage`

我一直在寻找Encrypted Messaging功能,但它似乎只提供了一个透明的覆盖,这将允许发送一个普通的DTO或加密的DTO。

是否有任何方法限制我的端点只接受EncryptedMessage DTO,同时保留在内部处理它们的能力?某种可以告诉原始DTO的过滤器原来可能来自EncryptedMessage

我认为Service Gateway,但它似乎我必须有两个单独的AppHosts - 一个接收加密数据和一个(仅限内部)来处理&响应。似乎应该有更好的方法。

回答

1

我刚刚打上加密邮件请求为this commit安全,让您使用Restricting Services Attribute,以确保只有安全的请求与由:

[Restrict(RequestAttributes.Secure)] 
public class SecureOnlyServices { } 

[Restrict(RequestAttributes.InSecure | RequestAttributes.InternalNetworkAccess, 
      RequestAttributes.Secure | RequestAttributes.External)] 
public class InternalHttpAndExternalSecure { } 

这种变化可以从v4.5.13这就是现在available on MyGet

ServiceStack的早期版本可以检查IRequest.Items字典来确定它是否是一个加密的邮件请求与:

var isEncryptedMessagingRequest = base.Request.Items.ContainsKey("_encryptCryptKey"); 
if (!isEncryptedMessagingRequest) 
    throw new HttpError.Forbidden("Only secure requests allowed"); 
+0

感谢@mythz。看起来'RestrictAttribute'就是要走的路,但我不想推出自己的! – jklemmack