从小提琴手保护WCF(MITM)(PCL XAMARIN表格)

问题描述 投票:0回答:1

我一直在使用便携式类库xamarin形式的项目。在PCL我引用这在某些服务器托管我的WCF服务。

WCF的结合与安全运输作为basicHttpBinding的PCL不支持WsHttpBinding的。

另外,WCF是使用HTTPS和我有一个有效的证书。

我要保护的消息,因为现在如果我每次调用我的服务安装某种应用小提琴手的或装监视器我的Android,我可以看到可读格式的XML数据。

我想通过使用HTTPS我是为了保护这一点。我尝试使用WCF TransportWithMessageCredential但未能登录到我的服务,因为xamarin还不支持这个组合

所以:(研究后,我发现)

  • PCL不支持WsHttpBinding的唯一basicHttpBinding的
  • Xamarin.Forms basicHttpBinding的不支持邮件安全性,但只有TransportCredentialOnly

  • Xamarin不支持TransportWithMessageCredential但只有运输安全,而且运输安全保护不从MITM数据。

如何与其他形式xamarin工作和保护这些数据?我错过了什么?有什么建议么?

EDITED


我想之前加密XML请求发送到服务,但没有忘记我更改消息e.g从XML来编码字符(我猜是因为服务器不能识别模式)时

我已经实现在客户端侧也IDispatchMessageInspector IClientMessageInspector在服务器端。

我需要一些帮助,我怎么能发送加密到服务器的XML请求..如果我在这里做到这一点的话,我可以从服务端对其进行解码(服务器)

在客户端,我有以下

  Public Function BeforeSendRequest(ByRef request As Message, channel As IClientChannel) As Object Implements IClientMessageInspector.BeforeSendRequest

    Dim Binding As New BasicHttpBinding(BasicHttpSecurityMode.Transport)

    Dim ms As MemoryStream = New MemoryStream(System.Text.Encoding.UTF8.GetBytes(EncryptedData(request.ToString)))

    Dim RQuotas As Xml.XmlDictionaryReaderQuotas = Binding.ReaderQuotas

    Dim reader = Xml.XmlDictionaryReader.CreateTextReader(ms, RQuotas)
    request = Message.CreateMessage(reader, Int32.MaxValue, request.Version)


    Return Nothing

End Function

我不知道如果我没有做到这一点。任何帮助的欢迎。

wcf xamarin.forms portable-class-library basichttpbinding
1个回答
1
投票

提琴手只有解密HTTPS流量,如果你接受它的证书,它的作用基本上一个中间人和处理来自服务的所有调用你的应用程序,有一些有用的信息在这里https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/DecryptHTTPS

Fiddler Https Decryption


关于你问题的第二次更新,你需要创建一个容器,将容纳你所有的信息,这样你可以解密和您认为合适的加密数据,

一个简单的例子可以在https://misaxionsoftware.wordpress.com/2011/07/29/secure-restful-web-service-by-wcf-web-api-no-https-seriously/找到

您可以自定义它尽可能地

这里是在上面的链接定义的消息

信息

public class Message
{
    public string AppId { get; set; }

    public string Data { get; set; }

    public string Id { get; set; }

    public string TimeStamp { get; set; }

    public byte[] GenerateFingerprint();

    public bool ValidateHash(byte[] fingerprint);
}

加密邮件

public class EncryptedMessage
{
    public string AppId { get; set; }

    public byte[] Fingerprint { get; set; }

    ///<summary>
    /// The 3DES key used to encrypt/decrypt the message 
    /// </summary>
    public byte[] Key { get; set; }

    ///<summary>
    /// Encrypted message
    /// </summary>
    public byte[] Message { get; set; }
}

IEncryptionHelper

public interface IEncryptionHelper
{
    EncryptedMessage Encrypt(Message message);

    Message Decrypt(EncryptedMessage encryptedMessage);
}
© www.soinside.com 2019 - 2024. All rights reserved.