2015-08-18 3 views
0

Я пытаюсь улучшить безопасность на нашем сервере delphi datasnap, добавив фильтры PC1 и RSA на TDSTCPServerTransport. FiltersDelphi datasnap tcpip encryption PC1 и RSA

Не проблема в добавлении фильтров и последующем подключении к клиенту, на самом деле я не думаю, что что-то зашифровано или «безопасно», но я должен признать, что я не совсем понимаю, как это предполагается работать.

В основном я хочу зашифрованную связь между клиентом и сервером, и я хочу защитить сервер от разоблачения его методов любому клиенту, который может читать и перечислять методы сервера, за исключением тех клиентов, которые знают ключ к шифрование.

В моем базовом примере я могу подключить клиента независимо от того, какие фильтры добавлены к клиенту. Я нашел несколько документов, не так много полезной информации по этой теме, и если я правильно их понимаю, клиент получит фильтры с сервера и сможет подключиться независимо от того, что ключ ПК1 на клиенте совпадает с сервером ,

Я думал, что ключи должны были совпадать - работа была вроде как общий ключ.

Может кто-нибудь объяснить, как он должен работать и что он будет защищать (а что нет), если он правильно настроен? Возможно ли защитить подвергнутые воздействию методы от злоупотреблений, это нужно сделать, объединив PC1/RSA и роли, и можно ли считать это относительным безопасным?

Я нашел PC1DynamicKey, но это только демонстрирует динамические клавиши.

Я использую XE8.

ответ

0

Вы можете использовать Apache HTTP в качестве обратного прокси и клиентских сертификатов. The documentation охватывает это с примерами конфигурации:

  • Как я могу заставить клиентов для проверки подлинности с помощью сертификатов?
  • Как заставить клиентов выполнять аутентификацию с использованием сертификатов для определенного URL-адреса, но разрешить произвольным клиентам доступ к остальным сервера?
  • Как разрешить только клиентам, имеющим сертификаты для доступа к определенному URL-адресу, но разрешить всем клиентам доступ к остальной части сервера ?
  • Как я могу требовать HTTPS с сильными шифрами и базовыми аутентификационными или клиентскими сертификатами для доступа к части веб-сайта Intranet для клиентов, поступающих из Интернета?
+0

Спасибо, мы используем tcp comm. но, конечно, мы могли бы добавить некоторый прокси-сервер, но на самом деле это не то, что я просил/искал. – hhaumann

0

я копал в этом и нашел следующие:

  1. Фильтры PC1 и RSA только шифрование связи, и защитить сообщение от того понюхал третьей части на сеть . Zip - это просто сжатие.
  2. Доступ к методам выполнения контролируется ролями в datasnap.
  3. Доступ к datasetproviders, если экспортируется, не защищен ничем ...?!?!
  4. Серверные методы с именем, начинающимся с AS_, скрыты и не включены в прокси-клиентский класс генератором прокси.
  5. Datasetprovider с именем, начинающимся с AS_, также отображается.
  6. [$ METHODINFO ON] не влияет на генератор прокси, возможно, используется только RTTI.

Вот класс пример серверные методы (G Я надеюсь, что это S редактор форматировать хорошо)

`

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; 

`

Proxy клиент выглядит так, то `

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; 

`