Настройка защищенного соединения со стороны сервера

Чтобы установить защищенное соединение между сетевым клиентом и сетевым ЛИНТЕР-сервером необходимо в файле сетевой конфигурации nodetab вместо протокола обмена TCP/IP указать протокол TCP/IPS или TLS. Все остальные поля файла nodetab для протокола TCP/IPS и TLS имеют ту же функциональность, что и для протокола TCP/IP. Если используется протокол защищённого соединения, то сначала будет установлено обычное соединение по протоколу TCP/IP, а затем по специальному запросу сетевого драйвера клиента это соединение переведется в защищенный режим. По умолчанию сетевой драйвер сервера одновременно может работать как с обычными TCP/IP протоколами, так и с защищенными.

Драйвер сервера (dbs_tcp) будет стараться загружать и использовать системные библиотеки openssl. При невозможности этого будут использованы библиотеки из соответствующих исполняемых файлов, или защищенные протоколы будут отключены, если вариант сборки соответствующих исполняемых файлов не содержит статически встроенных библиотек openssl.

В файле nodetab можно задавать две строки с различными именами ЛИНТЕР-сервера и протоколами соединений, но с идентичными значениями сетевого адреса и порта. В этом случае возможно попеременное как защищенное, так и незащищенное соединение с одним и тем же сетевым ЛИНТЕР-сервером. На стороне сетевого сервера для обеспечения работоспособности данного режима нет необходимости предпринимать какие-либо дополнительные действия.

По умолчанию для защищенного режима используются ключи длиной 512 бит.

Ключ и сертификат по умолчанию автоматически генерируются при запуске сетевого драйвера ЛИНТЕР-сервера (во время генерации на экране отображаются точки) и сохраняются в оперативной памяти до завершения работы сетевого драйвера сервера. В случае наличия в текущем каталоге запуска сетевого драйвера сервера файлов dbs_tcp.key и dbs_tcp.crt (см. пункт «Запуск драйвера») стадия генерации ключей пропускается, ключ и сертификат будут взяты из указанных файлов. Файлы ключа и сертификата должны соответствовать друг другу.

Файлы ключа и сертификата генерируются с использованием соответствующей утилиты генерации ключей операционной системы (openssl). Сертификаты могут быть подписаны удостоверяющим центром.

Сетевой ЛИНТЕР-сервер также позволяет сгенерировать пару «ключ-сертификат». Для этого сетевой драйвер сервера необходимо запустить с ключом -SSLKEY (одновременно можно задать длину ключа в битах). Продолжительность генерации ключа и сертификата лежит в пределах от нескольких секунд до нескольких минут (в зависимости от заданной длины ключа и мощности процессора). После окончания генерации ключ и сертификат будут сохранены в текущем каталоге в файлах dbs_tcp.key и dbs_tcp.crt соответственно. При последующем запуске из этого же каталога сетевого драйвера сервера будут использованы ключи и сертификат, запомненные в указанных файлах. Файлы dbs_tcp.key и dbs_tcp.crt будут доступны для чтения и записи только их владельцу. Можно увеличить длину используемого ключа до 1024 или 2048 бит для повышения степени защиты.

Созданный таким образом сертификат является самоподписанным.

Используя ключ -SSLONLY, можно отказаться от обмена с сетевым ЛИНТЕР-сервером по незащищенному каналу. В этом случае все попытки обращения к сетевому ЛИНТЕР-серверу без предварительного перевода соединения в защищенный режим приведут к разрыву соединения. При выборе ключа достаточной длины это обеспечивает практически полную защиту сетевого соединения от постороннего доступа, необходимо только тщательно контролировать доступ к файлам сертификата и (особенно) ключа.

Если файл сертификата будет:

  • скопирован с серверного компьютера на клиентский в текущий каталог сетевого драйвера клиента;

  • переименован таким образом, чтобы его имя (в верхнем регистре) совпало с именем ЛИНТЕР-сервера, определенным в файле nodetab;

  • иметь расширение .crt

то сетевой драйвер клиента при установке защищенного соединения сравнит сохраненный сертификат и сертификат сервера и, в случае их несоответствия, закроет соединение. Это обеспечит невозможность соединения при подмене адреса сетевого ЛИНТЕР-сервера. Злоумышленник также должен будет получить файл ключа, хранящийся на сервере, поэтому этот файл должен быть защищен от доступа посторонних лиц средствами операционной системы. В данном режиме также невозможно будет установить соединение с сетевым ЛИНТЕР-сервером, который сгенерирует ключ и сертификат при запуске, или ключ которого не будет соответствовать сертификату, хранимому на стороне клиента. Клиент, не имеющий сертификата, сохраняет возможность открыть защищенное соединение с ЛИНТЕР-сервером. Если имеется файл dbc_tcp.CA, то будет осуществлена проверка сертификата удостоверяющими центрами из этого списка. Существует возможность проверки у клиента наличия соответствующего сертификата (для этого сетевой драйвер сервера необходимо запустить с ключами SSLAUTH и SSLONLY).

Проверка выполняется следующим образом:

  • если задан ключ SSLAUTH и существуют файлы ключа и сертификата (dbs_tcp.key и dbs_tcp.crt соответственно) в текущем каталоге, то сетевой драйвер сервера (dbs_tcp) при установке с ним сетевого соединения запрашивает сертификат сетевого драйвера клиента;

  • сетевой драйвер клиента читает свой ключ и сертификат из файлов dbs_tcp.key и dbs_tcp.crt текущего каталога драйвера сервера;

  • сетевой драйвер клиента передает свой сертификат драйверу сервера по его запросу;

  • драйвер сервера пытается прочитать сертификат данного клиента из файла, имеющего имя, соответствующее сетевому адресу данного клиента в точечной нотации (например, для адреса клиента 127.0.0.1 имя файла должно быть 127.0.0.1.crt);

  • если сертификат сетевого клиента отсутствует или не соответствует образцу, хранимому на сервере, защищенное сетевое соединение установлено не будет;

  • в случае если соединение устанавливается в первый раз, и данный драйвер клиента имеет файлы ключа и сертификата, то соединение будет разрешено. При этом автоматически будет создан файл сертификата, соответствующий сетевому адресу данного клиента;

  • если другой клиент попытается соединиться с того же сетевого адреса, или кто-то подменит сетевой адрес, то выявится несовпадение сертификатов, и такое соединение будет отвергнуто.

Если существуют файлы сертификатов удостоверяющих центров dbs_tcp.CA, то дополнительно будет проверена подпись сертификата dbs_tcp.crt удостоверяющим центром, что гарантирует подлинность сертификата. Также производится проверка отозванных сертификатов, сохраненных в файле dbs_tcp.CRL.

Если необходимо исключить подключение к ЛИНТЕР-серверу неизвестных клиентов, то следует добавить ключ SSLNOCREAT при запуске сетевого драйвера сервера. Это исключит возможность соединения с ЛИНТЕР-сервером тех клиентов, для которых у сетевого драйвера сервера нет файлов сертификата. Таким образом, администратор СУБД путем запрета создания файлов сертификатов может обеспечить защищенные соединения с ограниченным кругом клиентов. Файлы сертификатов служат «ключами» открытия соединения и должны тщательно оберегаться как на серверной, так и на клиентской стороне.