Delphi datasnap tcpip加密PC1和RSA

时间:2015-08-18 15:18:11

标签: delphi encryption filter datasnap

我试图通过在TDSTCPServerTransport上添加PC1和RSA过滤器来提高delphi datasnap服务器的安全性。Filters

添加过滤器以及之后连接客户端不是问题,事实上我并不认为任何内容是加密的或更安全的,但我不得不承认我不完全理解它应该如何运作。

基本上我想在客户端和服务器之间进行加密通信,我希望保护服务器不要将它的方法暴露给能够读取和列出服务器方法的任何客户端,除了那些知道服务器方法的客户端。加密的关键。

在我的基本示例中,无论添加到客户端的过滤器如何,我都能够连接客户端。我找到了一些文档,关于这个主题并没有很多有用的信息,如果我理解正确,客户端将从服务器获取过滤器,并且无论客户端上的PC1密钥与服务器匹配,都能够连接

我认为密钥必须匹配 - 就像预共享密钥一样工作。

如果有人正确设置,有人可以解释它应该如何工作以及它将保护什么(以及什么不可以)? 是否有可能保护暴露的方法不被滥用,这可以通过组合PC1 / RSA和角色来完成,这可以被认为是相对安全的吗?

我确实找到了PC1DynamicKey,但只展示了动态密钥。

我正在使用XE8。

2 个答案:

答案 0 :(得分:0)

您可以使用Apache HTTP作为反向代理和客户端证书。 The documentation通过配置示例介绍了这一点:

  
      
  • 如何强制客户端使用证书进行身份验证?
  •   
  • 如何强制客户端使用特定URL的证书进行身份验证,但仍允许任意客户端访问其余URL   服务器?
  •   
  • 我如何只允许拥有证书的客户访问特定网址,但允许所有客户端访问其余网址   服务器?
  •   
  • 如何使用具有强密码的HTTPS以及基本身份验证或客户端证书来访问部分内容   内联网网站,来自互联网的客户?
  •   

答案 1 :(得分:0)

我一直在挖掘这个,并找到了以下内容:

  1. 过滤器PC1和RSA仅加密通信,并且会 保护通信免受第三方的嗅探 网络。 Zip只是压缩。
  2. 执行方法的访问权限由datasnap中的角色控制。
  3. 如果导出,访问数据集提供程序不受任何保护......?!?!
  4. 名称以AS_开头的服务器方法被隐藏,代理生成器不包含在代理客户端类中。
  5. 名称以AS_开头的数据集提供者也会公开。
  6. [$ METHODINFO ON]对代理生成器没有影响,可能仅由RTTI使用。
  7. 这是一个示例ServerMethods类( G 我希望这个编辑器能够很好地格式化)

    `

    type
      TServerMethods1 = class(TDSServerModule)
        Sqlserver1ad4Connection: TFDConnection;
        Tree_alarmsTable: TFDQuery;
        Tree_calllistsTable: TFDQuery;
        Tree_contactsTable: TFDQuery;
        dspAlarms: TDataSetProvider;  // exported and accessable in proxy client
        dspCalllists: TDataSetProvider; // exported and accessable in proxy client
        dspContacts: TDataSetProvider;  // exported and accessable in proxy client
        AS_SecretDataSetProvider: TDataSetProvider; // AS_ has no effect here, exported and accessable in proxy client
        dspContactsNotExported: TDataSetProvider; // NOT exported and NOT accessable in proxy client
      private
        { Private declarations }
      public
        { Public declarations }
        function AS_AddCD(A, B : integer) : integer; // will not be in proxy client
        function AddDE(A, B : integer) : integer; /// will be in proxy client, and can be accessed by anyone
        {$METHODINFO ON} // has no effect on proxy client
        function EchoString(AString : string) : string; // will be in proxy client, and can be accessed by anyone
        function ReverseString(AString : string) : string; // will be in proxy client, and can be accessed by anyone
        function ValidateUser(ALoginName, APassword : string; out AUserLevel : integer; out AUserName : string) : boolean;
        [TAuthRoles('admins')]
        function AddAB(A, B : integer) : integer; // will be in proxy client, and can be accessed by user with role "admins"
        function AS_AddBC(A, B : integer) : integer; // will not be in proxy client
        {$METHODINFO OFF} // has no effect on proxy client
      end;
    

    `

    代理客户端就像这样 `

    type
      TServerMethods1Client = class(TDSAdminClient)
      private
        FAddDECommand: TDBXCommand;
        FEchoStringCommand: TDBXCommand;
        FReverseStringCommand: TDBXCommand;
        FValidateUserCommand: TDBXCommand;
        FAddABCommand: TDBXCommand;
      public
        constructor Create(ADBXConnection: TDBXConnection); overload;
        constructor Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean); overload;
        destructor Destroy; override;
        function AddDE(A: Integer; B: Integer): Integer;
        function EchoString(AString: string): string;
        function ReverseString(AString: string): string;
        function ValidateUser(ALoginName: string; APassword: string; out AUserLevel: Integer; out AUserName: string): Boolean;
        function AddAB(A: Integer; B: Integer): Integer;
      end;
    

    `