Представлен значительный выпуск GnuTLS 3.5.0, свободной библиотеки с реализацией протоколов SSL, TLS и DTLS, алгоритмов шифрования (включая AES и Camellia) и функций для работы с различными типами сертификатов и ключей. Ветка 3.5.x подготовлена после года разработки в Git-репозитории и помечена как stable-next, что сигнализирует о достижении качества стабильной ветки, но пока неготовности заменить текущую стабильную ветку 3.4.x, поддержка которой будет продолжена.
Основные новшества:
- Для DSA, RSA и ECDSA добавлены алгоритмы цифровой подписи на базе SHA3. В утилиту certtool добавлена поддержка создания подписей для сертификатов с использованием SHA3.
- Добавлена поддержка алгоритма Curve25519 (RFC 7748), предложенного Дэниэлом Бернштейном (D. J. Bernstein). По умолчанию данный алгоритм не активирован, для включения в строке приоритетов следует указать "+CURVE-X25519";
- Для TLS реализовано расширение False Start (draft-ietf-tls-falsestart-01) для ускорения установки соединения, активируемое через флаг GNUTLS_ENABLE_FALSE_START в gnutls_init();
- Добавлены новые вызовы API для доступа к средствам генерации параметров RSA и DSA, определённым в FIPS186-4;
- По умолчанию активирована связка из потокового шифра ChaCha20 и алгоритма аутентификации сообщений (MAC) Poly1305, которая в цепочке приоритетов поставлена вслед за AES-GCM;
- Добавлена проверка сохранения владельца прежнего сертификата при повторном согласовании соединения (rehandshake), что добавляет дополнительное звено защиты для приложений не делающих подобных проверок;
- Ужесточён процесс декодирования списка расширений TLS, который теперь не допускает ошибок при разборе содержимого поля с расширениями (ранее при ошибке использовалась типовая структура);
- Старые и неподдерживаемые номера версий протокола в сообщениях установки соединения теперь приводят к отказу установки соединения;
- Вызов функций gnutls_session_get_data*() ограничен только для исходных сессий (не возобновлённых);
- Для возобновления сеанса задействованы требования RFC 7627 (extended master secret);
- Системные вызовы writev() и select() заменены на sendmsg() и poll();
- Файл со списком приоритетов теперь загружается при загрузке библиотеки, что позволяет использовать приоритеты и в программах, выполняющих chroot();
- Приложениям разрешено переопределять URL встроенных ключей и сертификатов;
- В утилиту certtool добавлены опции "--provable" "--verify-allow-broken";
- Из базовой поставки удалена утилита crywrap, которая теперь развивается отдельно;
- Добавлены новые элементы API:
- GNUTLS_FORCE_CLIENT_CERT;
- GNUTLS_ENABLE_FALSE_START;
- GNUTLS_INDEFINITE_TIMEOUT;
- GNUTLS_ALPN_SERVER_PRECEDENCE;
- GNUTLS_E_ASN1_EMBEDDED_NULL_IN_STRING;
- GNUTLS_E_HANDSHAKE_DURING_FALSE_START;
- gnutls_check_version_numeric;
- gnutls_x509_crt_equals;
- gnutls_x509_crt_equals2;
- gnutls_x509_crt_set_subject_alt_othername;
- gnutls_x509_crt_set_issuer_alt_othername;
- gnutls_x509_crt_get_signature_oid;
- gnutls_x509_crt_get_pk_oid;
- gnutls_x509_crq_set_subject_alt_othername;
- gnutls_x509_crq_get_pk_oid;
- gnutls_x509_crq_get_signature_oid;
- gnutls_x509_crl_get_signature_oid;
- gnutls_x509_privkey_generate2;
- gnutls_x509_privkey_get_seed;
- gnutls_x509_privkey_verify_seed;
- gnutls_privkey_generate2;
- gnutls_privkey_get_seed;
- gnutls_privkey_verify_seed;
- gnutls_decode_ber_digest_info;
- gnutls_encode_ber_digest_info;
- gnutls_dh_params_import_dsa;
- gnutls_session_get_master_secret;
|