Когда использование SSL или TLS оправдано, проверяйте выполнение следующих условий:

□ используется последняя версия протокола (во время работы над книгой это была версия TLS 1.1);

□ используются стойкие шифры (к нестойким относятся прежде всего RC4 и DES);

□ проверяется, что текущая дата попадает в период действия сертификата;

□ гарантируется, что сертификат прямо или косвенно выпущен доверенным источником (корневым УЦ);

□ проверяется, что хранящееся в сертификате имя хоста соответствует ожидаемому.

Кроме того, необходимо реализовать хотя бы один метод работы с отозванными сертификатами: либо сверку с CRL–списком, либо запрос по протоколу OCSP.

Выбор версии протокола

В большинстве языков высокого уровня не существует простого способа указать, каким протоколом вы хотели бы воспользоваться. Вы просто запрашиваете защищенный сокет, а библиотека устанавливает соединение и возвращает результат. Например, в языке Python имеется функция ssl() из модуля socket, которая принимает объект сокета и защищает его по протоколу SSL, но не позволяет указать ни версию протокола, ни шифр. Базовым API в таких языках, как Perl или РНР, присуща та же проблема. Для исправления ситуации часто приходится писать код на языке низкого уровня или копаться в скрытом API, обертывающем такой код (написанный, например, с использованием библиотеки OpenSSL).

В языках низкого уровня возможность задать версию протокола встречается чаще. Так, Java хотя и не поддерживает TLS 1.1 (в версии 1.4.2), но, по крайней мере, позволяет сказать, что вас устраивает только протокол TLS версии 1.0: