我试图通过在TDSTCPServerTransport
上添加PC1和RSA过滤器来提高delphi datasnap服务器的安全性。Filters
添加过滤器以及之后连接客户端不是问题,事实上我并不认为任何内容是加密的或更安全的,但我不得不承认我不完全理解它应该如何运作。
基本上我想在客户端和服务器之间进行加密通信,我希望保护服务器不要将它的方法暴露给能够读取和列出服务器方法的任何客户端,除了那些知道服务器方法的客户端。加密的关键。
在我的基本示例中,无论添加到客户端的过滤器如何,我都能够连接客户端。我找到了一些文档,关于这个主题并没有很多有用的信息,如果我理解正确,客户端将从服务器获取过滤器,并且无论客户端上的PC1密钥与服务器匹配,都能够连接
我认为密钥必须匹配 - 就像预共享密钥一样工作。
如果有人正确设置,有人可以解释它应该如何工作以及它将保护什么(以及什么不可以)? 是否有可能保护暴露的方法不被滥用,这可以通过组合PC1 / RSA和角色来完成,这可以被认为是相对安全的吗?
我确实找到了PC1DynamicKey,但只展示了动态密钥。
我正在使用XE8。
答案 0 :(得分:0)
您可以使用Apache HTTP作为反向代理和客户端证书。 The documentation通过配置示例介绍了这一点:
- 如何强制客户端使用证书进行身份验证?
- 如何强制客户端使用特定URL的证书进行身份验证,但仍允许任意客户端访问其余URL 服务器?
- 我如何只允许拥有证书的客户访问特定网址,但允许所有客户端访问其余网址 服务器?
- 如何使用具有强密码的HTTPS以及基本身份验证或客户端证书来访问部分内容 内联网网站,来自互联网的客户?
答案 1 :(得分:0)
我一直在挖掘这个,并找到了以下内容:
这是一个示例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;
`