Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_ssl

Описание: Надёжная криптография с использованием протоколов Secure Sockets Layer (SSL) и Transport Layer Security (TLS)
Статус: Расширение
Идентификатор модуля: ssl_module
Исходный файл: mod_ssl.c

Краткое описание

Этот модуль обеспечивает поддержку SSL v3 и TLS v1.x для HTTP-сервера Apache. SSL v2 больше не поддерживается.

Для работы криптографического движка модуль использует OpenSSL.

Дополнительные сведения, обсуждения и примеры приведены в документации по SSL.

Переменные окружения

Этот модуль можно настроить для передачи нескольких параметров SSL в пространство имён SSI и CGI в виде дополнительных переменных окружения. За исключением HTTPS и SSL_TLS_SNI, которые определены всегда, эти параметры по умолчанию не предоставляются по соображениям производительности. (См. SSLOptions StdEnvVars ниже.) Создаваемые переменные перечислены в таблице ниже. Для обратной совместимости эти параметры также можно предоставить под другими именами. Подробные сведения о переменных совместимости см. в главе «Совместимость».

Имя переменной Тип значения Описание
HTTPS flag Используется HTTPS.
SSL_PROTOCOL string Версия протокола SSL (SSLv3, TLSv1, TLSv1.1, TLSv1.2)
SSL_SESSION_ID string Идентификатор сеанса SSL в шестнадцатеричном формате
SSL_SESSION_RESUMED string Первоначальный или возобновлённый сеанс SSL. Примечание: если используется HTTP KeepAlive, через один и тот же (первоначальный или возобновлённый) сеанс SSL может обрабатываться несколько запросов
SSL_SECURE_RENEG string true, если поддерживается безопасное повторное согласование, иначе false
SSL_CIPHER string Имя набора шифров
SSL_CIPHER_EXPORT string true, если используется экспортный шифр
SSL_CIPHER_USEKEYSIZE number Число бит шифра (фактически используемое)
SSL_CIPHER_ALGKEYSIZE number Число бит шифра (возможное)
SSL_COMPRESS_METHOD string Согласованный метод сжатия SSL
SSL_VERSION_INTERFACE string Версия программы mod_ssl
SSL_VERSION_LIBRARY string Версия программы OpenSSL
SSL_CLIENT_M_VERSION string Версия сертификата клиента
SSL_CLIENT_M_SERIAL string Серийный номер сертификата клиента
SSL_CLIENT_S_DN string DN субъекта в сертификате клиента
SSL_CLIENT_S_DN_x509 string Компонент DN субъекта клиента
SSL_CLIENT_SAN_Email_n string Записи расширения subjectAltName сертификата клиента типа rfc822Name
SSL_CLIENT_SAN_DNS_n string Записи расширения subjectAltName сертификата клиента типа dNSName
SSL_CLIENT_SAN_OTHER_msUPN_n string Записи расширения subjectAltName сертификата клиента типа otherName в формате Microsoft User Principal Name (OID 1.3.6.1.4.1.311.20.2.3)
SSL_CLIENT_I_DN string DN издателя сертификата клиента
SSL_CLIENT_I_DN_x509 string Компонент DN издателя клиента
SSL_CLIENT_V_START string Срок действия сертификата клиента (время начала)
SSL_CLIENT_V_END string Срок действия сертификата клиента (время окончания)
SSL_CLIENT_V_REMAIN string Число дней до истечения срока действия сертификата клиента
SSL_CLIENT_A_SIG string Алгоритм, использованный для подписи сертификата клиента
SSL_CLIENT_A_KEY string Алгоритм, использованный для открытого ключа сертификата клиента
SSL_CLIENT_CERT string Сертификат клиента в кодировке PEM
SSL_CLIENT_CERT_CHAIN_n string Сертификаты в цепочке сертификатов клиента в кодировке PEM
SSL_CLIENT_CERT_RFC4523_CEA string Серийный номер и издатель сертификата. Формат соответствует CertificateExactAssertion в RFC4523
SSL_CLIENT_VERIFY string NONE, SUCCESS, GENEROUS или FAILED:reason
SSL_SERVER_M_VERSION string Версия сертификата сервера
SSL_SERVER_M_SERIAL string Серийный номер сертификата сервера
SSL_SERVER_S_DN string DN субъекта в сертификате сервера
SSL_SERVER_SAN_Email_n string Записи расширения subjectAltName сертификата сервера типа rfc822Name
SSL_SERVER_SAN_DNS_n string Записи расширения subjectAltName сертификата сервера типа dNSName
SSL_SERVER_SAN_OTHER_dnsSRV_n string Записи расширения subjectAltName сертификата сервера типа otherName в формате SRVName (OID 1.3.6.1.5.5.7.8.7, RFC 4985)
SSL_SERVER_S_DN_x509 string Компонент DN субъекта сервера
SSL_SERVER_I_DN string DN издателя сертификата сервера
SSL_SERVER_I_DN_x509 string Компонент DN издателя сервера
SSL_SERVER_V_START string Срок действия сертификата сервера (время начала)
SSL_SERVER_V_END string Срок действия сертификата сервера (время окончания)
SSL_SERVER_A_SIG string Алгоритм, использованный для подписи сертификата сервера
SSL_SERVER_A_KEY string Алгоритм, использованный для открытого ключа сертификата сервера
SSL_SERVER_CERT string Сертификат сервера в кодировке PEM
SSL_SRP_USER string Имя пользователя SRP
SSL_SRP_USERINFO string Информация о пользователе SRP
SSL_TLS_SNI string Содержимое расширения SNI TLS (если передано в ClientHello)

x509 обозначает компонент DN X.509; один из C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email. В httpd 2.2.0 и более поздних версиях x509 также может содержать числовой суффикс _n. Если соответствующий DN содержит несколько атрибутов с одинаковым именем, этот суффикс используется как индекс с нуля для выбора конкретного атрибута. Например, если DN субъекта сертификата сервера содержит два атрибута OU, можно использовать SSL_SERVER_S_DN_OU_0 и SSL_SERVER_S_DN_OU_1 для ссылки на каждый из них. Имя переменной без суффикса _n эквивалентно имени с суффиксом _0; оно обозначает первый (или единственный) атрибут. Когда таблица окружения заполняется с помощью параметра StdEnvVars директивы SSLOptions, первый (или единственный) атрибут любого DN добавляется только под именем без суффикса; то есть записи с суффиксом _0 не добавляются.

В httpd 2.4.32 и более поздних версиях к x509 в компоненте DN можно добавить необязательный суффикс _RAW, чтобы отключить преобразование значения атрибута в UTF-8. Его необходимо указывать после суффикса индекса (если он есть). Например, можно использовать SSL_SERVER_S_DN_OU_RAW или SSL_SERVER_S_DN_OU_0_RAW.

Формат переменных *_DN изменился в Apache HTTPD 2.3.11. Подробности см. в описании параметра LegacyDNStringFormat директивы SSLOptions.

SSL_CLIENT_V_REMAIN доступен только в версии 2.1 и более поздних.

Несколько дополнительных переменных окружения также можно использовать в выражениях SSLRequire или в пользовательских форматах журнала:

HTTP_USER_AGENT        PATH_INFO             AUTH_TYPE
HTTP_REFERER           QUERY_STRING          SERVER_SOFTWARE
HTTP_COOKIE            REMOTE_HOST           API_VERSION
HTTP_FORWARDED         REMOTE_IDENT          TIME_YEAR
HTTP_HOST              IS_SUBREQ             TIME_MON
HTTP_PROXY_CONNECTION  DOCUMENT_ROOT         TIME_DAY
HTTP_ACCEPT            SERVER_ADMIN          TIME_HOUR
THE_REQUEST            SERVER_NAME           TIME_MIN
REQUEST_FILENAME       SERVER_PORT           TIME_SEC
REQUEST_METHOD         SERVER_PROTOCOL       TIME_WDAY
REQUEST_SCHEME         REMOTE_ADDR           TIME
REQUEST_URI            REMOTE_USER

В этих контекстах также можно использовать два специальных формата:

ENV:variablename
Подставляет стандартную переменную окружения variablename.
HTTP:headername
Подставляет значение заголовка запроса с именем headername.

Пользовательские форматы журналов

Если mod_ssl встроен в Apache или хотя бы загружен (в случае DSO), становятся доступны дополнительные функции для пользовательского формата журнала mod_log_config. Во-первых, появляется дополнительная функция расширения формата ``%{varname}x'', с помощью которой можно подставлять любые переменные, предоставляемые любым модулем, в частности переменные mod_ssl, перечисленные в таблице выше.

Для обратной совместимости также предоставляется специальная функция криптографического формата ``%{name}c''. Сведения об этой функции приведены в главе «Совместимость».

Пример

CustomLog "logs/ssl_request_log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Эти форматы работают, даже если не задан параметр StdEnvVars директивы SSLOptions.

Примечания к запросам

mod_ssl задаёт для запроса «примечания», которые можно использовать при ведении журнала с помощью строки формата %{name}n в mod_log_config.

Поддерживаются следующие примечания:

ssl-access-forbidden
Этому примечанию присваивается значение 1, если в доступе отказано из-за директивы SSLRequire или SSLRequireSSL.
ssl-secure-reneg
Если mod_ssl собран с версией OpenSSL, поддерживающей расширение безопасного повторного согласования, этому примечанию присваивается значение 1, если для текущего соединения используется SSL и клиент также поддерживает расширение безопасного повторного согласования. Если клиент не поддерживает это расширение, примечанию присваивается значение 0. Если mod_ssl собран с версией OpenSSL, не поддерживающей безопасное повторное согласование, или если для текущего соединения не используется SSL, примечание не задаётся.

Расширение анализатора выражений

Если mod_ssl встроен в Apache или хотя бы загружен (в случае DSO), любые переменные, предоставляемые mod_ssl, можно использовать в выражениях для анализатора выражений ap_expr. На переменные можно ссылаться с помощью синтаксиса ``%{varname}''. Начиная с версии 2.4.18 можно также использовать синтаксис стиля mod_rewrite ``%{SSL:varname}'' или синтаксис в виде функции ``ssl(varname)''.

Пример (с использованием mod_headers)

Header set X-SSL-PROTOCOL "expr=%{SSL_PROTOCOL}"
Header set X-SSL-CIPHER "expr=%{SSL:SSL_CIPHER}"

Эта возможность работает, даже если не задан параметр StdEnvVars директивы SSLOptions.

Поставщики авторизации для использования с Require

mod_ssl предоставляет несколько поставщиков аутентификации для использования с директивой Require модуля mod_authz_core.

Require ssl

Поставщик ssl запрещает доступ, если соединение не зашифровано с помощью SSL. Он аналогичен директиве SSLRequireSSL.

Require ssl

Require ssl-verify-client

Поставщик ssl разрешает доступ, если пользователь прошёл аутентификацию с помощью действительного клиентского сертификата. Это полезно только при активной директиве SSLVerifyClient optional.

Следующий пример разрешает доступ, если пользователь прошёл аутентификацию с помощью клиентского сертификата или имени пользователя и пароля.

Require ssl-verify-client
Require valid-user

Директива SSLCACertificateFile

Описание: Файл с объединёнными сертификатами CA в кодировке PEM для аутентификации клиента
Синтаксис:
SSLCACertificateFile file-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Эта директива задаёт единый файл, в который можно поместить сертификаты центров сертификации (CA), с клиентами которых вы работаете. Они используются для аутентификации клиента. Такой файл представляет собой объединение нескольких файлов сертификатов в кодировке PEM, расположенных в порядке предпочтения. Этот способ можно использовать вместо SSLCACertificatePath и/или в дополнение к ней.

Пример

SSLCACertificateFile "/usr/local/apache2/conf/ssl.crt/ca-bundle-client.crt"

Директива SSLCACertificatePath

Описание: Каталог сертификатов CA в кодировке PEM для аутентификации клиента
Синтаксис:
SSLCACertificatePath directory-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Эта директива задаёт каталог, в котором хранятся сертификаты центров сертификации (CA), с клиентами которых вы работаете. Они используются для проверки клиентского сертификата при аутентификации клиента.

Файлы в этом каталоге должны быть в кодировке PEM; доступ к ним осуществляется по хешированным именам файлов. Поэтому обычно недостаточно просто поместить туда файлы сертификатов: необходимо также создать символические ссылки с именами hash-value.N. Всегда проверяйте, что в этом каталоге есть соответствующие символические ссылки.

Пример

SSLCACertificatePath "/usr/local/apache2/conf/ssl.crt/"

Директива SSLCADNRequestFile

Описание: Файл с объединёнными сертификатами CA в кодировке PEM для задания допустимых имён CA
Синтаксис:
SSLCADNRequestFile file-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Когда mod_ssl запрашивает клиентский сертификат, во время SSL-рукопожатия клиенту отправляется список допустимых имён центров сертификации. Клиент может использовать эти имена, чтобы выбрать подходящий клиентский сертификат из имеющихся.

Если не заданы ни директива SSLCADNRequestPath, ни директива SSLCADNRequestFile, клиенту отправляются имена всех сертификатов CA, заданных директивами SSLCACertificateFile и SSLCACertificatePath; иными словами, имена CA, которые фактически будут использоваться для проверки клиентского сертификата.

В некоторых случаях полезно отправить набор допустимых имён CA, отличный от фактически используемых для проверки клиентского сертификата CA, например, если клиентские сертификаты подписаны промежуточными CA. В таких случаях можно использовать SSLCADNRequestPath и/или SSLCADNRequestFile; тогда допустимые имена CA берутся из полного набора сертификатов в каталоге и/или файле, заданном этими директивами.

SSLCADNRequestFile должна указывать на единый файл, содержащий объединённые сертификаты CA в кодировке PEM.

Пример

SSLCADNRequestFile "/usr/local/apache2/conf/ca-names.crt"

Директива SSLCADNRequestPath

Описание: Каталог сертификатов CA в кодировке PEM для задания допустимых имён CA
Синтаксис:
SSLCADNRequestPath directory-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Эту необязательную директиву можно использовать для задания набора допустимых имён CA, который будет отправлен клиенту при запросе клиентского сертификата. Подробности см. в описании директивы SSLCADNRequestFile.

Файлы в этом каталоге должны быть в кодировке PEM; доступ к ним осуществляется по хешированным именам файлов. Поэтому обычно недостаточно просто поместить туда файлы сертификатов: необходимо также создать символические ссылки с именами hash-value.N. Всегда проверяйте, что в этом каталоге есть соответствующие символические ссылки.

Пример

SSLCADNRequestPath "/usr/local/apache2/conf/ca-names.crt/"

Директива SSLCARevocationCheck

Описание: Включение проверки отзыва на основе CRL
Синтаксис:
SSLCARevocationCheck chain|leaf|none [flags ...]
Значение по умолчанию:
SSLCARevocationCheck none
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Необязательные флаги доступны в httpd 2.4.21 и более поздних версиях

Включает проверку списков отозванных сертификатов (CRL). Необходимо настроить как минимум один из параметров SSLCARevocationFile или SSLCARevocationPath. При значении chain (рекомендуемая настройка) проверяются CRL для всех сертификатов в цепочке; значение leaf ограничивает проверку конечным сертификатом.

Доступны следующие флаги:

  • no_crl_for_cert_ok

    До версии 2.3.15 проверка CRL в mod_ssl также считалась успешной, если CRL для проверяемых сертификатов не были найдены ни в одном из расположений, заданных с помощью SSLCARevocationFile или SSLCARevocationPath.

    С появлением SSLCARevocationFile поведение изменилось: по умолчанию при использовании chain или leaf наличие CRL обязательно для успешной проверки; в противном случае проверка завершится ошибкой "unable to get certificate CRL".

    Флаг no_crl_for_cert_ok позволяет восстановить прежнее поведение.

Пример

SSLCARevocationCheck chain

Совместимость с версиями 2.2

SSLCARevocationCheck chain no_crl_for_cert_ok

Директива SSLCARevocationFile

Описание: Файл с объединёнными CRL CA в кодировке PEM для аутентификации клиента
Синтаксис:
SSLCARevocationFile file-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Эта директива задаёт единый файл, в который можно поместить списки отозванных сертификатов (CRL) центров сертификации (CA), с клиентами которых вы работаете. Они используются для аутентификации клиента. Такой файл представляет собой объединение нескольких файлов CRL в кодировке PEM, расположенных в порядке предпочтения. Этот способ можно использовать вместо SSLCARevocationPath и/или в дополнение к ней.

Пример

SSLCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle-client.crl"

Директива SSLCARevocationPath

Описание: Каталог CRL CA в кодировке PEM для аутентификации клиента
Синтаксис:
SSLCARevocationPath directory-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Эта директива задаёт каталог, в котором хранятся списки отозванных сертификатов (CRL) центров сертификации (CA), с клиентами которых вы работаете. Они используются для отзыва клиентского сертификата при аутентификации клиента.

Файлы в этом каталоге должны быть в кодировке PEM; доступ к ним осуществляется по хешированным именам файлов. Поэтому обычно недостаточно просто поместить туда файлы CRL. Необходимо также создать символические ссылки с именами hash-value.rN. Всегда проверяйте, что в этом каталоге есть соответствующие символические ссылки.

Пример

SSLCARevocationPath "/usr/local/apache2/conf/ssl.crl/"

Директива SSLCertificateChainFile

Описание: Файл сертификатов CA сервера в кодировке PEM
Синтаксис:
SSLCertificateChainFile file-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

SSLCertificateChainFile устарела

SSLCertificateChainFile устарела в версии 2.4.8, когда директива SSLCertificateFile была расширена и стала загружать промежуточные сертификаты CA также из файла сертификата сервера.

Эта директива задаёт необязательный единый файл, в который можно поместить сертификаты центров сертификации (CA), образующих цепочку сертификатов сервера. Цепочка начинается с сертификата CA, выдавшего сертификат сервера, и может доходить до корневого сертификата CA. Такой файл представляет собой объединение нескольких файлов сертификатов CA в кодировке PEM, обычно расположенных в порядке цепочки сертификатов.

Эту директиву следует использовать вместо SSLCACertificatePath и/или в дополнение к ней для явного построения цепочки сертификатов сервера, которая отправляется браузеру вместе с сертификатом сервера. Это особенно полезно для предотвращения конфликтов с сертификатами CA при использовании аутентификации клиента. Хотя добавление сертификата CA из цепочки сертификатов сервера в SSLCACertificatePath даёт тот же результат при построении цепочки, это также приводит к побочному эффекту: при аутентификации клиента принимаются клиентские сертификаты, выданные тем же сертификатом CA.

Но будьте осторожны: предоставление цепочки сертификатов работает только при использовании одного сертификата сервера на основе RSA или DSA. Если используется связанная пара сертификатов RSA+DSA, этот способ сработает только в том случае, если для обоих сертификатов используется одна и та же цепочка сертификатов. В противном случае браузеры будут введены в заблуждение.

Пример

SSLCertificateChainFile "/usr/local/apache2/conf/ssl.crt/ca.crt"

Директива SSLCertificateFile

Описание: Файл данных сертификата сервера X.509 в кодировке PEM или идентификатор токена
Синтаксис:
SSLCertificateFile file-path|certid
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: certid доступен в версии 2.4.42 и более поздних.

Эта директива указывает на файл с данными сертификата в формате PEM или на идентификатор сертификата, хранящегося в настроенном криптографическом токене. Если используется файл PEM, он должен содержать как минимум конечный сертификат (сертификат конечного узла). Директиву можно указывать несколько раз (с разными именами файлов), чтобы поддерживать несколько алгоритмов аутентификации сервера — обычно RSA, DSA и ECC. Число поддерживаемых алгоритмов зависит от версии OpenSSL, используемой mod_ssl: версия 1.0.0 и более поздние позволяют получить список поддерживаемых алгоритмов с помощью openssl list-public-key-algorithms. См. также приведённое ниже примечание об ограничениях версий OpenSSL до 1.0.2 и способах их обхода.

Файлы могут также содержать промежуточные сертификаты CA, упорядоченные от конечного к корневому. Эта возможность поддерживается в версии 2.4.8 и более поздних и заменяет SSLCertificateChainFile. При использовании OpenSSL 1.0.2 или более поздней версии это позволяет настраивать цепочку промежуточных CA отдельно для каждого сертификата.

Пользовательские параметры DH и имя кривой EC для эфемерных ключей также можно добавить в конец первого файла, заданного с помощью SSLCertificateFile. Эта возможность поддерживается в версии 2.4.7 и более поздних. Такие параметры можно создать с помощью команд openssl dhparam и openssl ecparam. Параметры можно добавить в конец первого файла сертификата без изменений. Пользовательские параметры можно указать только в первом файле, поскольку они применяются независимо от типа алгоритма аутентификации.

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

Вместо хранения сертификатов и закрытых ключей в файлах можно использовать идентификатор сертификата, хранящегося в токене. В настоящее время идентификаторами сертификатов распознаются только URI PKCS#11; их можно использовать совместно с движком или провайдером OpenSSL pkcs11. Если SSLCertificateKeyFile не задан, сертификат и закрытый ключ можно загрузить с помощью единого идентификатора, указанного в SSLCertificateFile.

Совместимость параметров DH с простыми числами длиной более 1024 бит

Начиная с версии 2.4.7, mod_ssl использует стандартизованные параметры DH с длиной простых чисел 2048, 3072 и 4096 бит; начиная с версии 2.4.10 добавлены простые числа длиной 6144 и 8192 бит (из RFC 3526). Эти параметры передаются клиентам в зависимости от длины ключа RSA/DSA сертификата. В частности, это может привести к сбоям рукопожатия с клиентами на базе Java (Java 7 или более ранней версии). Способы обхода подобных проблем описаны в этом ответе на часто задаваемый вопрос.

Параметры DH по умолчанию при использовании нескольких сертификатов и версий OpenSSL до 1.0.2

При использовании нескольких сертификатов для поддержки разных алгоритмов аутентификации (например, RSA, DSA, но прежде всего ECC) с OpenSSL до версии 1.0.2 рекомендуется использовать пользовательские параметры DH (предпочтительно), добавив их в первый файл сертификата (как описано выше), либо расположить директивы SSLCertificateFile так, чтобы сертификаты RSA/DSA находились после сертификата ECC.

Это связано с ограничением старых версий OpenSSL, которые не позволяют HTTP-серверу Apache определить, какой сертификат выбран в данный момент, во время рукопожатия (когда параметры DH необходимо отправить другой стороне), а вместо этого всегда предоставляют последний настроенный сертификат. В результате сервер может выбрать параметры DH по умолчанию исходя из длины ключа неверного сертификата (ключи ECC намного короче ключей RSA/DSA, а их длина не имеет значения при выборе простых чисел DH).

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

Пример

# Example using a PEM-encoded file.
SSLCertificateFile "/usr/local/apache2/conf/ssl.crt/server.crt"
# Example use of a certificate and private key from a PKCS#11 token:
SSLCertificateFile "pkcs11:token=My%20Token%20Name;id=45"

Директива SSLCertificateKeyFile

Описание: Файл закрытого ключа сервера в кодировке PEM
Синтаксис:
SSLCertificateKeyFile file-path|keyid
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: keyid доступен в версии 2.4.42 и более поздних.

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

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

Закрытый ключ также можно объединить с сертификатом в файле, заданном директивой SSLCertificateFile, но настоятельно не рекомендуется поступать таким образом. Если этот способ используется, файлы сертификатов со встроенным ключом необходимо настроить после сертификатов, для которых задан отдельный файл ключа.

Вместо хранения закрытых ключей в файлах можно использовать идентификатор ключа, хранящегося в токене. В настоящее время идентификаторами закрытых ключей распознаются только URI PKCS#11; их можно использовать совместно с движком или провайдером OpenSSL pkcs11.

Пример

# To use a private key from a PEM-encoded file:
SSLCertificateKeyFile "/usr/local/apache2/conf/ssl.key/server.key"
# To use a private key from a PKCS#11 token:
SSLCertificateKeyFile "pkcs11:token=My%20Token%20Name;id=45"

Директива SSLCipherSuite

Описание: Набор шифров, доступных для согласования во время SSL-рукопожатия
Синтаксис:
SSLCipherSuite [protocol] cipher-spec
Значение по умолчанию:
SSLCipherSuite DEFAULT (depends on OpenSSL version)
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_ssl

Эта сложная директива использует разделённую двоеточиями строку cipher-spec, состоящую из спецификаций шифров OpenSSL, чтобы настроить набор шифров, который клиенту разрешено согласовать на этапе SSL-рукопожатия. Необязательный спецификатор протокола позволяет настроить набор шифров для определённой версии SSL. Возможные значения включают «SSL» для всех протоколов SSL вплоть до TLSv1.2 включительно.

Обратите внимание, что эту директиву можно использовать как в контексте отдельного сервера, так и в контексте отдельного каталога. В контексте отдельного сервера она применяется к стандартному SSL-рукопожатию при установлении соединения. В контексте отдельного каталога она принудительно запускает повторное SSL-согласование с перенастроенным набором шифров после чтения HTTP-запроса, но до отправки HTTP-ответа.

Если библиотека SSL поддерживает TLSv1.3 (OpenSSL 1.1.1 и новее), для настройки наборов шифров этого протокола можно использовать спецификатор протокола «TLSv1.3». Поскольку TLSv1.3 не поддерживает повторное согласование, указывать для него шифры в контексте каталога нельзя.

Список названий шифров TLSv1.3 см. в документации OpenSSL.

Спецификация SSL-шифра в cipher-spec состоит из 4 основных атрибутов и нескольких дополнительных второстепенных:

  • Алгоритм обмена ключами:
    RSA, Диффи — Хеллман, Диффи — Хеллман на эллиптических кривых, Secure Remote Password
  • Алгоритм аутентификации:
    RSA, Диффи — Хеллман, DSS, ECDSA или отсутствует.
  • Алгоритм шифрования:
    AES, DES, Triple-DES, RC4, RC2, IDEA и т. д.
  • Алгоритм хеширования MAC:
    MD5, SHA или SHA1, SHA256, SHA384.

SSL-шифр также может быть экспортным. Шифры SSLv2 больше не поддерживаются. Чтобы указать, какие шифры использовать, можно перечислить все шифры по одному или воспользоваться псевдонимами, задающими предпочтения и порядок шифров (см. таблицу 1). Фактически доступные шифры и псевдонимы зависят от используемой версии OpenSSL. В более новых версиях OpenSSL могут быть дополнительные шифры.

Тег Описание
Алгоритм обмена ключами:
kRSA Обмен ключами RSA
kDHr Обмен ключами Диффи — Хеллмана с ключом RSA
kDHd Обмен ключами Диффи — Хеллмана с ключом DSA
kEDH Эфемерный обмен ключами Диффи — Хеллмана (временный ключ, без сертификата)
kSRP Обмен ключами Secure Remote Password (SRP)
Алгоритм аутентификации:
aNULL Без аутентификации
aRSA Аутентификация RSA
aDSS Аутентификация DSS
aDH Аутентификация Диффи — Хеллмана
Алгоритм шифрования:
eNULL Без шифрования
NULL псевдоним для eNULL
AES Шифрование AES
DES Шифрование DES
3DES Шифрование Triple-DES
RC4 Шифрование RC4
RC2 Шифрование RC2
IDEA Шифрование IDEA
Алгоритм хеширования MAC:
MD5 Хеш-функция MD5
SHA1 Хеш-функция SHA1
SHA псевдоним для SHA1
SHA256 Хеш-функция SHA256
SHA384 Хеш-функция SHA384
Псевдонимы:
SSLv3 все шифры SSL версии 3.0
TLSv1 все шифры TLS версии 1.0
EXP все экспортные шифры
EXPORT40 только все экспортные шифры с ключом 40 бит
EXPORT56 только все экспортные шифры с ключом 56 бит
LOW все шифры с низкой стойкостью (не экспортные, однократный DES)
MEDIUM все шифры с 128-битным шифрованием
HIGH все шифры, использующие Triple-DES
RSA все шифры, использующие обмен ключами RSA
DH все шифры, использующие обмен ключами Диффи — Хеллмана
EDH все шифры, использующие эфемерный обмен ключами Диффи — Хеллмана
ECDH Обмен ключами Диффи — Хеллмана на эллиптических кривых
ADH все шифры, использующие анонимный обмен ключами Диффи — Хеллмана
AECDH все шифры, использующие анонимный обмен ключами Диффи — Хеллмана на эллиптических кривых
SRP все шифры, использующие обмен ключами Secure Remote Password (SRP)
DSS все шифры, использующие аутентификацию DSS
ECDSA все шифры, использующие аутентификацию ECDSA
aNULL все шифры без аутентификации

Интересно то, что эти значения можно комбинировать, чтобы задать желаемый порядок и набор шифров. Для ускорения настройки существуют также псевдонимы (SSLv3, TLSv1, EXP, LOW, MEDIUM, HIGH) для некоторых групп шифров. Эти теги можно объединять с префиксами, формируя cipher-spec. Доступны следующие префиксы:

  • без префикса: добавить шифр в список
  • +: переместить соответствующие шифры в текущую позицию в списке
  • -: удалить шифр из списка (позже его можно добавить снова)
  • !: полностью исключить шифр из списка (позже его нельзя будет добавить снова)

Шифры aNULL, eNULL и EXP всегда отключены

Начиная с версии 2.4.7, шифры без шифрования и экспортные шифры всегда отключены, поскольку mod_ssl безусловно добавляет !aNULL:!eNULL:!EXP в любую строку шифров при инициализации.

Более простой способ разобраться во всём этом — использовать команду «openssl ciphers -v», которая позволяет последовательно составить правильную строку cipher-spec. Строка cipher-spec по умолчанию зависит от версии используемых библиотек OpenSSL. Предположим, что это «RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5», что означает следующее: поместить RC4-SHA и AES128-SHA в начало. Мы делаем это, поскольку эти шифры обеспечивают хороший компромисс между скоростью и безопасностью. Затем включить шифры с высокой и средней стойкостью. Наконец, удалить все шифры без аутентификации, то есть для SSL — шифры с анонимным обменом ключами Диффи — Хеллмана, а также все шифры, использующие MD5 в качестве алгоритма хеширования, поскольку его стойкость признана недостаточной.

$ openssl ciphers -v 'RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5'
RC4-SHA                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=SHA1
AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
...                     ...               ...     ...           ...
SEED-SHA                SSLv3 Kx=RSA      Au=RSA  Enc=SEED(128) Mac=SHA1
PSK-RC4-SHA             SSLv3 Kx=PSK      Au=PSK  Enc=RC4(128)  Mac=SHA1
KRB5-RC4-SHA            SSLv3 Kx=KRB5     Au=KRB5 Enc=RC4(128)  Mac=SHA1

Полный список отдельных шифров RSA и DH для SSL приведён в таблице 2.

Пример

SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
Тег шифра Протокол Обмен ключами Аутентификация Шифрование MAC Тип
Шифры RSA:
DES-CBC3-SHA SSLv3 RSA RSA 3DES(168) SHA1
IDEA-CBC-SHA SSLv3 RSA RSA IDEA(128) SHA1
RC4-SHA SSLv3 RSA RSA RC4(128) SHA1
RC4-MD5 SSLv3 RSA RSA RC4(128) MD5
DES-CBC-SHA SSLv3 RSA RSA DES(56) SHA1
EXP-DES-CBC-SHA SSLv3 RSA(512) RSA DES(40) SHA1 экспортный
EXP-RC2-CBC-MD5 SSLv3 RSA(512) RSA RC2(40) MD5 экспортный
EXP-RC4-MD5 SSLv3 RSA(512) RSA RC4(40) MD5 экспортный
NULL-SHA SSLv3 RSA RSA Нет SHA1
NULL-MD5 SSLv3 RSA RSA Нет MD5
Шифры Диффи — Хеллмана:
ADH-DES-CBC3-SHA SSLv3 DH Нет 3DES(168) SHA1
ADH-DES-CBC-SHA SSLv3 DH Нет DES(56) SHA1
ADH-RC4-MD5 SSLv3 DH Нет RC4(128) MD5
EDH-RSA-DES-CBC3-SHA SSLv3 DH RSA 3DES(168) SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 DH DSS 3DES(168) SHA1
EDH-RSA-DES-CBC-SHA SSLv3 DH RSA DES(56) SHA1
EDH-DSS-DES-CBC-SHA SSLv3 DH DSS DES(56) SHA1
EXP-EDH-RSA-DES-CBC-SHA SSLv3 DH(512) RSA DES(40) SHA1 экспортный
EXP-EDH-DSS-DES-CBC-SHA SSLv3 DH(512) DSS DES(40) SHA1 экспортный
EXP-ADH-DES-CBC-SHA SSLv3 DH(512) Нет DES(40) SHA1 экспортный
EXP-ADH-RC4-MD5 SSLv3 DH(512) Нет RC4(40) MD5 экспортный

Директива SSLCompression

Описание: Включение сжатия на уровне SSL
Синтаксис:
SSLCompression on|off
Значение по умолчанию:
SSLCompression off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.3 и новее при использовании OpenSSL 0.9.8 или новее; область действия виртуального хоста доступна при использовании OpenSSL 1.0.0 или новее. В версии 2.4.3 значением по умолчанию было on.

Эта директива позволяет включить сжатие на уровне SSL.

Включение сжатия создаёт проблемы безопасности в большинстве конфигураций (так называемая атака CRIME).

Директива SSLCryptoDevice

Описание: Включение использования аппаратного криптографического ускорителя
Синтаксис:
SSLCryptoDevice engine
Значение по умолчанию:
SSLCryptoDevice builtin
Контекст: конфигурация сервера
Статус: Расширение
Модуль: mod_ssl

Эта директива включает использование аппаратной платы криптографического ускорителя для переноса на неё части нагрузки по обработке SSL. Эту директиву можно использовать, только если набор инструментов SSL собран с поддержкой «engine»; выпуски OpenSSL 0.9.7 и новее по умолчанию поддерживают «engine», а для OpenSSL 0.9.6 необходимо использовать отдельные выпуски «-engine».

Чтобы узнать, какие имена движков поддерживаются, выполните команду «openssl engine».

Пример

# For a Broadcom accelerator:
SSLCryptoDevice ubsec

В OpenSSL 3.0 и новее, если движок не указан, но ключ или сертификат заданы с помощью URI PKCS#11, будет предпринята попытка загрузить ключ и сертификат из провайдера OpenSSL. Используемый провайдер OpenSSL необходимо определить и настроить в файле конфигурации OpenSSL; он должен поддерживать метод STORE для URI PKCS#11.

Директива SSLEngine

Описание: Переключатель работы SSL-движка
Синтаксис:
SSLEngine on|off|optional
Значение по умолчанию:
SSLEngine off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Эта директива включает или отключает использование обработчика протокола SSL/TLS. Её следует использовать внутри секции <VirtualHost>, чтобы включить SSL/TLS для этого виртуального хоста. По умолчанию обработчик протокола SSL/TLS отключён как для основного сервера, так и для всех настроенных виртуальных хостов.

Пример

<VirtualHost _default_:443>
SSLEngine on
#...
</VirtualHost>

В Apache 2.1 и новее для SSLEngine можно задать значение optional. Это включает поддержку RFC 2817 — перехода на TLS в рамках HTTP/1.1. В настоящее время ни один веб-браузер не поддерживает RFC 2817.

Директива SSLFIPS

Описание: Переключатель режима FIPS для SSL
Синтаксис:
SSLFIPS on|off
Значение по умолчанию:
SSLFIPS off
Контекст: конфигурация сервера
Статус: Расширение
Модуль: mod_ssl

Эта директива включает или отключает флаг FIPS_mode библиотеки SSL. Её необходимо задать в глобальном контексте сервера; задавать конфликтующие значения (например, SSLFIPS on, а затем SSLFIPS off) нельзя. Режим применяется ко всем операциям библиотеки SSL.

Если httpd был скомпилирован с библиотекой SSL, которая не поддерживает флаг FIPS_mode, директива SSLFIPS on завершится ошибкой. Конкретные требования для использования mod_ssl в режиме, одобренном по стандарту FIPS 140-2, см. в документе «Политика безопасности» библиотеки SSL-провайдера. Обратите внимание: сам mod_ssl не прошёл валидацию, однако его можно описать как использующий криптографический модуль, прошедший валидацию FIPS 140-2, если все компоненты собраны и работают в соответствии с рекомендациями применимой политики безопасности.

Директива SSLHonorCipherOrder

Описание: Параметр, задающий приоритет порядка шифров сервера
Синтаксис:
SSLHonorCipherOrder on|off
Значение по умолчанию:
SSLHonorCipherOrder off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

При выборе шифра во время рукопожатия SSLv3 или TLSv1 обычно учитываются предпочтения клиента. Если эта директива включена, вместо них будут использоваться предпочтения сервера.

Пример

SSLHonorCipherOrder on

Директива SSLInsecureRenegotiation

Описание: Параметр включения поддержки небезопасного повторного согласования
Синтаксис:
SSLInsecureRenegotiation on|off
Значение по умолчанию:
SSLInsecureRenegotiation off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.2.15 и новее при использовании OpenSSL 0.9.8m или новее

В исходной спецификации все версии протоколов SSL и TLS (вплоть до TLS/1.2 включительно) были уязвимы к атаке «человек посередине» (CVE-2009-3555) во время повторного согласования. Эта уязвимость позволяла злоумышленнику добавить выбранный открытый текст в начало HTTP-запроса, получаемого веб-сервером. Для устранения уязвимости было разработано расширение протокола, обеспечивающее защиту при его поддержке клиентом и сервером.

Если mod_ssl скомпонован с OpenSSL версии 0.9.8m или новее, по умолчанию повторное согласование поддерживается только для клиентов, поддерживающих новое расширение протокола. Если эта директива включена, повторное согласование будет разрешено и для старых (неисправленных) клиентов, хотя и с риском для безопасности.

Предупреждение о безопасности

Если эта директива включена, SSL-соединения будут уязвимы к атаке «человек посередине» с добавлением префикса, описанной в CVE-2009-3555.

Пример

SSLInsecureRenegotiation on

Переменную окружения SSL_SECURE_RENEG можно использовать в SSI- или CGI-сценарии, чтобы определить, поддерживается ли безопасное повторное согласование для данного SSL-соединения.

Директива SSLOCSPDefaultResponder

Описание: Задание URI ответчика по умолчанию для проверки OCSP
Синтаксис:
SSLOCSPDefaultResponder uri
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Этот параметр задаёт ответчик OCSP по умолчанию. Если SSLOCSPOverrideResponder не включена, указанный URI будет использоваться только в том случае, если в проверяемом сертификате не задан URI ответчика.

Директива SSLOCSPEnable

Описание: Включение проверки цепочки сертификатов клиента с помощью OCSP
Синтаксис:
SSLOCSPEnable on|leaf|off
Значение по умолчанию:
SSLOCSPEnable off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Режим leaf доступен в httpd 2.4.34 и новее

Этот параметр включает проверку цепочки сертификатов клиента с помощью OCSP. Если параметр включён, сертификаты в цепочке сертификатов клиента будут проверены ответчиком OCSP после выполнения обычной проверки (включая проверки CRL). В режиме «leaf» проверяется только сам сертификат клиента.

Используемый ответчик OCSP извлекается из самого сертификата или определяется конфигурацией; см. директивы SSLOCSPDefaultResponder и SSLOCSPOverrideResponder.

Пример

SSLVerifyClient on
SSLOCSPEnable on
SSLOCSPDefaultResponder "http://responder.example.com:8888/responder"
SSLOCSPOverrideResponder on

Директива SSLOCSPNoverify

Описание: Пропуск проверки сертификатов ответчика OCSP
Синтаксис:
SSLOCSPNoverify on|off
Значение по умолчанию:
SSLOCSPNoverify off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.26 и новее при использовании OpenSSL 0.9.7 или новее

Пропускает проверку сертификатов ответчика OCSP; это может быть полезно при тестировании сервера OCSP.

Директива SSLOCSPOverrideResponder

Описание: Принудительное использование URI ответчика по умолчанию для проверки OCSP
Синтаксис:
SSLOCSPOverrideResponder on|off
Значение по умолчанию:
SSLOCSPOverrideResponder off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Этот параметр принудительно задаёт использование настроенного ответчика OCSP по умолчанию при проверке сертификатов с помощью OCSP независимо от того, указан ли ответчик OCSP в проверяемом сертификате.

Директива SSLOCSPProxyURL

Описание: URL прокси-сервера для запросов OCSP
Синтаксис:
SSLOCSPProxyURL url
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.19 и новее

Этот параметр позволяет задать URL HTTP-прокси-сервера, который будет использоваться для всех запросов к ответчикам OCSP.

Директива SSLOCSPResponderCertificateFile

Описание: Набор доверенных сертификатов ответчика OCSP в кодировке PEM
Синтаксис:
SSLOCSPResponderCertificateFile file
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.26 и новее при использовании OpenSSL 0.9.7 или новее

Задаёт список доверенных сертификатов ответчика OCSP, используемых при проверке сертификата ответчика OCSP. Предоставленные сертификаты считаются доверенными без дополнительной проверки. Обычно это используется, когда сертификат ответчика OCSP самоподписан или не включён в ответ OCSP.

Директива SSLOCSPResponderTimeout

Описание: Время ожидания ответов на запросы OCSP
Синтаксис:
SSLOCSPResponderTimeout seconds
Значение по умолчанию:
SSLOCSPResponderTimeout 10
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Этот параметр задаёт время ожидания ответов на запросы к ответчикам OCSP, когда включён параметр SSLOCSPEnable.

Директива SSLOCSPResponseMaxAge

Описание: Максимально допустимый возраст ответов OCSP
Синтаксис:
SSLOCSPResponseMaxAge seconds
Значение по умолчанию:
SSLOCSPResponseMaxAge -1
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Этот параметр задаёт максимально допустимый возраст («свежесть») ответов OCSP. Значение по умолчанию (-1) не ограничивает максимальный возраст, а значит, ответы OCSP считаются действительными, пока их поле nextUpdate содержит дату в будущем.

Директива SSLOCSPResponseTimeSkew

Описание: Максимально допустимое расхождение времени при проверке ответа OCSP
Синтаксис:
SSLOCSPResponseTimeSkew seconds
Значение по умолчанию:
SSLOCSPResponseTimeSkew 300
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Этот параметр задаёт максимально допустимое расхождение времени для ответов OCSP (при проверке их полей thisUpdate и nextUpdate).

Директива SSLOCSPUseRequestNonce

Описание: Использование nonce в запросах OCSP
Синтаксис:
SSLOCSPUseRequestNonce on|off
Значение по умолчанию:
SSLOCSPUseRequestNonce on
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.10 и новее

Этот параметр определяет, должны ли запросы к ответчикам OCSP содержать nonce. По умолчанию nonce всегда используется в запросе и сверяется со значением в ответе. Если ответчик не использует nonce (например, Microsoft OCSP Responder), этот параметр следует выключить: off.

Директива SSLOpenSSLConfCmd

Описание: Настройка параметров OpenSSL с помощью API SSL_CONF
Синтаксис:
SSLOpenSSLConfCmd command-name command-value
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.8 и новее при использовании OpenSSL 1.0.2 или новее

Эта директива предоставляет mod_ssl доступ к API SSL_CONF OpenSSL, позволяя гибко настраивать параметры OpenSSL без необходимости реализовывать дополнительные директивы mod_ssl при добавлении новых функций в OpenSSL.

Набор доступных команд SSLOpenSSLConfCmd зависит от версии OpenSSL, используемой для mod_ssl (требуется версия не ниже 1.0.2). Список поддерживаемых имён команд см. в разделе Supported configuration file commands руководства SSL_CONF_cmd(3) для OpenSSL.

Некоторые команды SSLOpenSSLConfCmd можно использовать вместо существующих директив (например, SSLCipherSuite или SSLProtocol), однако следует учитывать, что синтаксис и допустимые значения параметров могут различаться.

Примеры

SSLOpenSSLConfCmd Options -SessionTicket,ServerPreference
SSLOpenSSLConfCmd ECDHParameters brainpoolP256r1
SSLOpenSSLConfCmd ServerInfoFile "/usr/local/apache2/conf/server-info.pem"
SSLOpenSSLConfCmd Protocol "-ALL, TLSv1.2"
SSLOpenSSLConfCmd SignatureAlgorithms RSA+SHA384:ECDSA+SHA256

Директива SSLOptions

Описание: Настройка различных параметров среды выполнения SSL
Синтаксис:
SSLOptions [+|-]option ...
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: Options
Статус: Расширение
Модуль: mod_ssl

Эта директива позволяет управлять различными параметрами среды выполнения отдельно для каждого каталога. Обычно, если к каталогу применимы несколько директив SSLOptions, полностью применяется наиболее специфичная из них; параметры не объединяются. Однако, если перед всеми параметрами директивы SSLOptions стоит знак плюс (+) или минус (-), параметры объединяются. Параметры, перед которыми стоит +, добавляются к действующим в данный момент параметрам, а параметры, перед которыми стоит -, удаляются из действующих в данный момент параметров.

Доступны следующие параметры:

  • StdEnvVars

    Если этот параметр включён, создаётся стандартный набор переменных среды CGI/SSI, связанных с SSL. По умолчанию этот параметр отключён из соображений производительности, поскольку извлечение этой информации — довольно затратная операция. Поэтому обычно этот параметр включают только для запросов CGI и SSI.

  • ExportCertData

    Если этот параметр включён, создаются дополнительные переменные среды CGI/SSI: SSL_SERVER_CERT, SSL_CLIENT_CERT и SSL_CLIENT_CERT_CHAIN_n (где n = 0,1,2,..). Они содержат сертификаты X.509 сервера и клиента для текущего HTTPS-соединения в кодировке PEM и могут использоваться скриптами CGI для более глубокой проверки сертификатов. Кроме того, предоставляются все остальные сертификаты из цепочки сертификатов клиента. Это немного увеличивает размер среды, поэтому данный параметр необходимо включать только при необходимости.

  • FakeBasicAuth

    Если этот параметр включён, отличительное имя (DN) субъекта сертификата X509 клиента преобразуется в имя пользователя HTTP Basic Authorization. Это означает, что для управления доступом можно использовать стандартные методы аутентификации Apache. Именем пользователя является субъект сертификата X509 клиента (его можно определить с помощью команды OpenSSL openssl x509: openssl x509 -noout -subject -incertificate.crt). Обратите внимание, что пароль пользователя не запрашивается. Для каждой записи в файле пользователей нужен пароль ``xxj31ZMTZzkVA'' — DES-зашифрованная версия слова `password''. В системах, использующих шифрование на основе MD5 (например, FreeBSD или BSD/OS и т. д.), следует использовать следующий MD5-хеш того же слова: ``$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/''.

    Обратите внимание, что директива AuthBasicFake в mod_auth_basic может использоваться как более общий механизм имитации базовой аутентификации, позволяющий управлять структурой имени пользователя и пароля.

  • StrictRequire

    Этот параметр принудительно запрещает доступ, если SSLRequireSSL или SSLRequire успешно определили, что доступ должен быть запрещён. Обычно по умолчанию, если используется директива «Satisfy any», а другие ограничения доступа пройдены, запрет доступа из-за SSLRequireSSL или SSLRequire отменяется (поскольку именно так должен работать механизм Apache Satisfy). Однако для строгого ограничения доступа можно использовать SSLRequireSSL и/или SSLRequire вместе с «SSLOptions +StrictRequire». Тогда дополнительная директива «Satisfy Any» не сможет повлиять на решение mod_ssl запретить доступ.

  • OptRenegotiate

    Этот параметр включает оптимизированную обработку повторного согласования SSL-соединения, если директивы SSL используются в контексте отдельного каталога. По умолчанию используется строгая схема, при которой каждая перенастройка параметров SSL для отдельного каталога приводит к полному рукопожатию повторного согласования SSL. При использовании этого параметра mod_ssl пытается избежать ненужных рукопожатий, выполняя более детальные (но по-прежнему безопасные) проверки параметров. Тем не менее такие детальные проверки иногда могут не соответствовать ожиданиям пользователя, поэтому включайте этот параметр только для отдельных каталогов.

  • LegacyDNStringFormat

    Этот параметр влияет на форматирование значений переменных SSL_{CLIENT,SERVER}_{I,S}_DN. Начиная с версии 2.3.11, Apache HTTPD по умолчанию использует формат, совместимый с RFC 2253. В нём в качестве разделителей между атрибутами используются запятые, допускаются символы не ASCII (которые преобразуются в UTF8), различные специальные символы экранируются обратными косыми чертами, а атрибут "C" сортируется последним.

    Если задан LegacyDNStringFormat, будет использоваться старый формат: атрибут "C" сортируется первым, в качестве разделителей используются косые черты, а символы не ASCII и специальные символы обрабатываются непоследовательно.

Пример

SSLOptions +FakeBasicAuth -StrictRequire
<Files ~ "\.(cgi|shtml)$">
    SSLOptions +StdEnvVars -ExportCertData
</Files>

Директива SSLPassPhraseDialog

Описание: Тип диалога для ввода парольной фразы зашифрованных закрытых ключей
Синтаксис:
SSLPassPhraseDialog type
По умолчанию:
SSLPassPhraseDialog builtin
Контекст: конфигурация сервера
Статус: Расширение
Модуль: mod_ssl

При запуске Apache необходимо прочитать различные файлы сертификатов (см. SSLCertificateFile) и закрытых ключей (см. SSLCertificateKeyFile) SSL-виртуальных серверов. Поскольку из соображений безопасности файлы закрытых ключей обычно зашифрованы, mod_ssl должен запросить у администратора парольную фразу для их расшифровки. Такой запрос можно выполнить двумя способами, которые задаются параметром type:

  • builtin

    Это вариант по умолчанию: при запуске открывается интерактивный диалог в терминале, непосредственно перед тем как Apache отсоединится от терминала. Администратор должен вручную ввести парольную фразу для каждого зашифрованного файла закрытого ключа. Поскольку может быть настроено много виртуальных хостов с поддержкой SSL, для сокращения числа запросов используется следующая схема повторного использования: при зашифрованном файле закрытого ключа проверяются все известные парольные фразы (в начале их, конечно, нет). Если одна из известных парольных фраз подходит, для этого файла закрытого ключа диалог не открывается. Если ни одна не подошла, в терминале запрашивается ещё одна парольная фраза, которая сохраняется для следующей проверки (когда её, возможно, удастся повторно использовать).

    Эта схема обеспечивает mod_ssl максимальную гибкость (поскольку для N зашифрованных файлов закрытых ключей можно использовать N разных парольных фраз — но тогда, разумеется, придётся ввести их все) и одновременно сокращает число запросов в терминале (то есть если для всех N файлов закрытых ключей используется одна парольная фраза, она будет запрошена только один раз).

  • |/path/to/program [args...]

    В этом режиме можно использовать внешнюю программу, работающую как канал к определённому устройству ввода. Программе передаётся стандартный текст запроса, используемый в режиме builtin, через stdin; ожидается, что строки с паролями она будет записывать в stdout. Если требуется несколько паролей (или введён неверный пароль), после возврата первого пароля будет выведен дополнительный текст запроса, и программе нужно будет передать следующие пароли.

  • exec:/path/to/program

    Здесь настраивается внешняя программа, которая вызывается при запуске для каждого зашифрованного файла закрытого ключа. Она вызывается с двумя аргументами (первый имеет формат «servername:portnumber», второй — «RSA», «DSA», «ECC» или целочисленный индекс, начиная с 3, если настроено более трёх ключей); они указывают, для какого сервера и алгоритма требуется вывести соответствующую парольную фразу в stdout. В версиях 2.4.8 (не выпущена) и 2.4.9 ей передаётся один аргумент — строка формата «servername:portnumber:index» (где index — целое число, отсчитываемое с нуля), указывающая сервер, порт TCP и номер сертификата. Предполагается, что сначала эта внешняя программа выполняет проверки безопасности, чтобы убедиться, что система не скомпрометирована злоумышленником, и только после успешного прохождения этих проверок предоставляет парольную фразу.

    Эти проверки безопасности и способ определения парольной фразы могут быть сколь угодно сложными. Mod_ssl определяет только интерфейс: исполняемая программа, которая предоставляет парольную фразу в stdout. Ни больше ни меньше! Поэтому, если вы действительно крайне осторожны в вопросах безопасности, этот интерфейс для вас. Всё остальное остаётся на усмотрение администратора, поскольку требования к локальной безопасности могут сильно различаться.

    Здесь также используется описанный выше алгоритм повторного использования. Иными словами, внешняя программа вызывается только один раз для каждой уникальной парольной фразы.

Пример

SSLPassPhraseDialog "exec:/usr/local/apache/sbin/pp-filter"

Директива SSLProtocol

Описание: Настройка поддерживаемых версий протокола SSL/TLS
Синтаксис:
SSLProtocol [+|-]protocol ...
По умолчанию:
SSLProtocol all -SSLv3 (up to 2.4.16: all)
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl

Эта директива позволяет управлять версиями протокола SSL/TLS, которые будут приниматься при новых соединениях.

Доступны следующие протоколы (регистр не учитывается):

  • SSLv3

    Протокол Secure Sockets Layer (SSL), версия 3.0, разработанный корпорацией Netscape. Он пришёл на смену SSLv2, а затем был заменён TLSv1; в настоящее время его использование не рекомендуется согласно RFC 7568.

  • TLSv1

    Протокол Transport Layer Security (TLS), версия 1.0. Он пришёл на смену SSLv3 и описан в RFC 2246. Его поддерживает почти каждый клиент.

  • TLSv1.1 (при использовании OpenSSL 1.0.1 и более поздних версий)

    Пересмотренная версия протокола TLS 1.0, описанная в RFC 4346.

  • TLSv1.2 (при использовании OpenSSL 1.0.1 и более поздних версий)

    Пересмотренная версия протокола TLS 1.1, описанная в RFC 5246.

  • TLSv1.3 (при использовании OpenSSL 1.1.1 и более поздних версий)

    Новая версия протокола TLS, описанная в RFC 8446.

  • all

    Это сокращение для «+SSLv3 +TLSv1» или — при использовании OpenSSL 1.0.1 и более поздних версий — «+SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2» соответственно (за исключением версий OpenSSL, собранных с параметром конфигурации «no-ssl3», в которых all не включает +SSLv3).

Пример

SSLProtocol TLSv1

SSLProtocol для виртуальных хостов на основе имени

До OpenSSL 1.1.1, несмотря на то что индикация имени сервера (SNI) позволяла определить целевой виртуальный хост на раннем этапе TLS-рукопожатия, переключить версию протокола TLS на этом этапе было невозможно. Поэтому согласованная версия SSLProtocol всегда определялась на основе версии базового виртуального хоста (первого виртуального хоста, объявленного в IP:port прослушивания соединения).

Начиная с версии 2.4.42 веб-сервера Apache HTTP, собранной/связанной с OpenSSL 1.1.1 или более поздней версией, если клиент передаёт SNI в TLS-рукопожатии, учитывается SSLProtocol каждого виртуального хоста (на основе имени).

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

Директива SSLProxyCACertificateFile

Описание: Файл объединённых сертификатов центров сертификации в кодировке PEM для аутентификации удалённых серверов
Синтаксис:
SSLProxyCACertificateFile file-path
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива задаёт единый файл, в котором можно объединить сертификаты центров сертификации (CA), с которыми работают ваши удалённые серверы. Они используются для аутентификации удалённых серверов. Такой файл представляет собой простое объединение различных файлов сертификатов в кодировке PEM, расположенных в порядке предпочтения. Его можно использовать вместо SSLProxyCACertificatePath и/или в дополнение к ней.

Пример

SSLProxyCACertificateFile "/usr/local/apache2/conf/ssl.crt/ca-bundle-remote-server.crt"

Директива SSLProxyCACertificatePath

Описание: Каталог сертификатов центров сертификации в кодировке PEM для аутентификации удалённых серверов
Синтаксис:
SSLProxyCACertificatePath directory-path
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива задаёт каталог, в котором хранятся сертификаты центров сертификации (CA), с которыми работают ваши удалённые серверы. Они используются для проверки сертификата удалённого сервера при его аутентификации.

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

Пример

SSLProxyCACertificatePath "/usr/local/apache2/conf/ssl.crt/"

Директива SSLProxyCARevocationCheck

Описание: Включение проверки отзыва сертификатов на основе CRL для аутентификации удалённых серверов
Синтаксис:
SSLProxyCARevocationCheck chain|leaf|none
По умолчанию:
SSLProxyCARevocationCheck none
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Включает проверку списков отозванных сертификатов (CRL) для удалённых серверов, с которыми вы работаете. Должна быть настроена как минимум одна из директив SSLProxyCARevocationFile или SSLProxyCARevocationPath. При значении chain (рекомендуемая настройка) проверяются CRL для всех сертификатов в цепочке; значение leaf ограничивает проверку конечным сертификатом.

При значении chain или leaf наличие CRL обязательно для успешной проверки

До версии 2.3.15 проверка CRL в mod_ssl завершалась успешно, даже если ни в одном из расположений, настроенных с помощью SSLProxyCARevocationFile или SSLProxyCARevocationPath, не было найдено списков CRL. С появлением этой директивы поведение изменилось: если проверка включена, для её успешного завершения обязательно наличие CRL; в противном случае проверка завершится ошибкой "unable to get certificate CRL".

Пример

SSLProxyCARevocationCheck chain

Директива SSLProxyCARevocationFile

Описание: Файл объединённых списков CRL центров сертификации в кодировке PEM для аутентификации удалённых серверов
Синтаксис:
SSLProxyCARevocationFile file-path
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива задаёт единый файл, в котором можно объединить списки отозванных сертификатов (CRL) центров сертификации (CA), с которыми работают ваши удалённые серверы. Они используются для аутентификации удалённых серверов. Такой файл представляет собой простое объединение различных файлов CRL в кодировке PEM, расположенных в порядке предпочтения. Его можно использовать вместо SSLProxyCARevocationPath и/или в дополнение к ней.

Пример

SSLProxyCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle-remote-server.crl"

Директива SSLProxyCARevocationPath

Описание: Каталог списков CRL центров сертификации в кодировке PEM для аутентификации удалённых серверов
Синтаксис:
SSLProxyCARevocationPath directory-path
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива задаёт каталог, в котором хранятся списки отозванных сертификатов (CRL) центров сертификации (CA), с которыми работают ваши удалённые серверы. Они используются для отзыва сертификата удалённого сервера при его аутентификации.

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

Пример

SSLProxyCARevocationPath "/usr/local/apache2/conf/ssl.crl/"

Директива SSLProxyCheckPeerCN

Описание: Проверять ли поле CN сертификата удалённого сервера
Синтаксис:
SSLProxyCheckPeerCN on|off
По умолчанию:
SSLProxyCheckPeerCN on
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива задаёт, следует ли сравнивать поле CN сертификата удалённого сервера с именем хоста в URL запроса. Если они не совпадают, возвращается код состояния 502 (Bad Gateway). В выпуске 2.4.5 и более поздних версиях директику SSLProxyCheckPeerCN заменила директива SSLProxyCheckPeerName.

Во всех выпусках с 2.4.5 по 2.4.20 для включения такого поведения было достаточно задать SSLProxyCheckPeerName off (поскольку значением по умолчанию для SSLProxyCheckPeerCN было on). В этих выпусках, чтобы полностью отключить проверку имени в сертификате удалённого сервера, обе директивы нужно было задать как off. Многие пользователи считали это поведение весьма запутанным.

Начиная с выпуска 2.4.21, во всех конфигурациях, где включён хотя бы один из параметров SSLProxyCheckPeerName или SSLProxyCheckPeerCN, используется новое поведение SSLProxyCheckPeerName, а во всех конфигурациях, где отключён хотя бы один из параметров SSLProxyCheckPeerName или SSLProxyCheckPeerCN, подавляется вся проверка имени в сертификате удалённого сервера. Только следующая конфигурация запускает устаревшее сравнение CN сертификата в версии 2.4.21 и более поздних выпусках;

Пример

SSLProxyCheckPeerCN on
SSLProxyCheckPeerName off

Директива SSLProxyCheckPeerExpire

Описание: Проверять ли срок действия сертификата удалённого сервера
Синтаксис:
SSLProxyCheckPeerExpire on|off
По умолчанию:
SSLProxyCheckPeerExpire on
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива задаёт, проверяется ли истечение срока действия сертификата удалённого сервера. Если проверка не пройдена, возвращается код состояния 502 (Bad Gateway).

Пример

SSLProxyCheckPeerExpire on

Директива SSLProxyCheckPeerName

Описание: Настройка проверки имени хоста в сертификатах удалённого сервера
Синтаксис:
SSLProxyCheckPeerName on|off
По умолчанию:
SSLProxyCheckPeerName on
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Apache HTTP Server 2.4.5 и более поздние версии
Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива настраивает проверку имени хоста в сертификатах сервера, когда mod_ssl работает в качестве клиента SSL. Проверка считается успешной, если имя хоста из URI запроса совпадает с одним из атрибутов CN субъекта сертификата или с расширением subjectAltName. Если проверка не пройдена, SSL-запрос прерывается и возвращается код состояния 502 (Bad Gateway).

Подстановка символов-шаблонов поддерживается в определённых случаях: запись subjectAltName типа dNSName или атрибуты CN, начинающиеся с *., совпадают с любым именем хоста с таким же числом компонентов и тем же суффиксом. Например, *.example.org совпадает с foo.example.org, но не с foo.bar.example.org, поскольку соответствующие имена хостов содержат разное число компонентов.

Эта возможность появилась в версии 2.4.5 и заменила поведение директивы SSLProxyCheckPeerCN, которая проверяла только точное совпадение значения первого атрибута CN с именем хоста. Однако многих пользователей сбивало с толку поведение при раздельном использовании этих директив, поэтому в выпуске 2.4.21 было улучшено совместное поведение директив SSLProxyCheckPeerName и SSLProxyCheckPeerCN. Описание директивы SSLProxyCheckPeerCN содержит сведения об исходном поведении и подробности этих улучшений.

Директива SSLProxyCipherSuite

Описание: Набор шифров, доступный для согласования при рукопожатии SSL-прокси
Синтаксис:
SSLProxyCipherSuite [protocol] cipher-spec
По умолчанию:
SSLProxyCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эквивалент директивы SSLCipherSuite, применяемый к соединению прокси. Дополнительные сведения см. в SSLCipherSuite.

Директива SSLProxyEngine

Описание: Переключатель работы SSL-прокси
Синтаксис:
SSLProxyEngine on|off
По умолчанию:
SSLProxyEngine off
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива включает или отключает работу протокольного механизма SSL/TLS для прокси. Обычно она используется внутри секции <VirtualHost>, чтобы включить SSL/TLS для прокси в определённом виртуальном хосте. По умолчанию протокольный механизм SSL/TLS для прокси отключён как на главном сервере, так и во всех настроенных виртуальных хостах.

Обратите внимание, что директиву SSLProxyEngine обычно не следует включать в виртуальный хост, который будет работать как прямой прокси (с использованием директив <Proxy> или ProxyRequests). Для того чтобы прямой прокси-сервер мог проксировать запросы SSL/TLS, SSLProxyEngine не требуется.

Пример

<VirtualHost _default_:443>
    SSLProxyEngine on
    #...
</VirtualHost>

Директива SSLProxyMachineCertificateChainFile

Описание: Файл объединённых сертификатов центров сертификации в кодировке PEM, используемый прокси для выбора сертификата
Синтаксис:
SSLProxyMachineCertificateChainFile filename
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

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

Указанный файл представляет собой простое объединение различных файлов сертификатов в кодировке PEM. При запуске проверяется каждый настроенный клиентский сертификат и строится цепочка доверия.

Предупреждение о безопасности

Если эта директива включена, все сертификаты в файле будут считаться доверенными так же, как если бы они находились в SSLProxyCACertificateFile.

Пример

SSLProxyMachineCertificateChainFile "/usr/local/apache2/conf/ssl.crt/proxyCA.pem"

Директива SSLProxyMachineCertificateFile

Описание: Файл объединённых клиентских сертификатов и ключей в кодировке PEM, используемый прокси
Синтаксис:
SSLProxyMachineCertificateFile filename
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях
Включать сертификаты, не являющиеся конечными (CA), разрешено только в httpd 2.4.59 и более поздних версиях.

Эта директива задаёт единый файл, в котором хранятся сертификаты и ключи, используемые для аутентификации прокси-сервера на удалённых серверах.

Указанный файл представляет собой простое объединение различных файлов сертификатов в кодировке PEM. Используйте эту директиву вместо SSLProxyMachineCertificatePath или в дополнение к ней. Указанный файл может содержать любое количество пар клиентского сертификата и соответствующего закрытого ключа. Каждую пару можно указать в любом порядке: (сертификат, ключ) или (ключ, сертификат). Файл также может содержать сертификаты, не являющиеся конечными (CA); они обрабатываются так, как если бы были настроены с помощью SSLProxyMachineCertificateChainFile.

Когда удалённый сервер запрашивает клиентский сертификат, он должен передать в запросе список приемлемых имён центров сертификации. Если такой список не передан, mod_ssl использует первый настроенный клиентский сертификат/ключ. Если список имён CA передан, mod_ssl перебирает его и пытается найти настроенный клиентский сертификат, выданный непосредственно указанным центром сертификации или через любое количество промежуточных центров сертификации. Цепочку промежуточных сертификатов CA можно построить из включённых в файл сертификатов или настроить с помощью SSLProxyMachineCertificateChainFile. Затем в ответ на запрос будет передан первый настроенный сертификат, соответствующий условиям.

Если удалённый сервер передал список имён CA и подходящий клиентский сертификат найти не удалось, mod_ssl не предоставит клиентский сертификат, что, скорее всего, приведёт к сбою TLS-рукопожатия (в зависимости от конфигурации удалённого сервера).

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

Поддерживаются только ключи в формате PKCS1 RSA, DSA или EC. Ключи в формате PKCS8, то есть начинающиеся с "-----BEGIN PRIVATE KEY-----", необходимо преобразовать, например, с помощью "openssl rsa -in private-pkcs8.pem -outform pem".

Пример

SSLProxyMachineCertificateFile "/usr/local/apache2/conf/ssl.crt/proxy.pem"

Директива SSLProxyMachineCertificatePath

Описание: Каталог клиентских сертификатов и ключей в формате PEM, используемых прокси-сервером
Синтаксис:
SSLProxyMachineCertificatePath directory
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива задаёт каталог, в котором хранятся клиентские сертификаты и ключи, используемые для аутентификации прокси-сервера на удалённых серверах.

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

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

Поддерживаются только ключи в форматах PKCS1 RSA, DSA или EC. Ключи в формате PKCS8, то есть начинающиеся с "-----BEGIN PRIVATE KEY-----", необходимо преобразовать, например, с помощью "openssl rsa -in private-pkcs8.pem -outform pem".

Пример

SSLProxyMachineCertificatePath "/usr/local/apache2/conf/proxy.crt/"

Директива SSLProxyProtocol

Описание: Настройка допустимых версий протокола SSL для использования прокси-сервером
Синтаксис:
SSLProxyProtocol [+|-]protocol ...
Значение по умолчанию:
SSLProxyProtocol all -SSLv3 (up to 2.4.16: all)
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива позволяет управлять версиями протокола SSL, которые mod_ssl должен использовать при настройке среды сервера для прокси-соединения. Подключение будет выполняться только к серверам, использующим один из указанных протоколов.

Дополнительные сведения см. в разделе SSLProtocol.

Директива SSLProxyVerify

Описание: Тип проверки сертификата удалённого сервера
Синтаксис:
SSLProxyVerify level
Значение по умолчанию:
SSLProxyVerify none
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Если прокси настроен на перенаправление запросов к удалённому SSL-серверу, эту директиву можно использовать для настройки проверки сертификата удалённого сервера.

Для уровня доступны следующие значения:

  • none: сертификат удалённого сервера не требуется
  • optional: удалённый сервер может предъявить действительный сертификат
  • require: удалённый сервер должен предъявить действительный сертификат
  • optional_no_ca: удалённый сервер может предъявить действительный сертификат,
    но его необязательно успешно проверять.

На практике представляют интерес только уровни none и require, поскольку уровень optional работает не со всеми серверами, а уровень optional_no_ca противоречит самой идее аутентификации (однако его можно использовать для создания тестовых страниц SSL и т. п.).

Пример

SSLProxyVerify require

Директива SSLProxyVerifyDepth

Описание: Максимальная глубина цепочки сертификатов центров сертификации при проверке сертификата удалённого сервера
Синтаксис:
SSLProxyVerifyDepth number
Значение по умолчанию:
SSLProxyVerifyDepth 1
Контекст: конфигурация сервера, виртуальный хост, секция прокси
Статус: Расширение
Модуль: mod_ssl
Совместимость: Контекст секции прокси разрешён в httpd 2.4.30 и более поздних версиях

Эта директива задаёт глубину проверки mod_ssl, после которой он решает, что сертификат удалённого сервера недействителен.

Глубина — это максимальное число промежуточных издателей сертификатов, то есть максимальное количество сертификатов центров сертификации, по которым разрешено пройти при проверке сертификата удалённого сервера. Глубина 0 означает, что принимаются только самоподписанные сертификаты удалённых серверов; глубина 1 по умолчанию означает, что сертификат удалённого сервера может быть самоподписанным или должен быть подписан центром сертификации, который непосредственно известен серверу (то есть сертификат центра сертификации находится в SSLProxyCACertificatePath), и т. д.

Пример

SSLProxyVerifyDepth 10

Директива SSLRandomSeed

Описание: Источник начального заполнения генератора псевдослучайных чисел (PRNG)
Синтаксис:
SSLRandomSeed context source [bytes]
Контекст: конфигурация сервера
Статус: Расширение
Модуль: mod_ssl

Эта директива настраивает один или несколько источников для начального заполнения генератора псевдослучайных чисел (PRNG) в OpenSSL при запуске (контекст — startup) и/или непосредственно перед установлением нового SSL-соединения (контекст — connect). Эту директиву можно использовать только в глобальном контексте сервера, поскольку PRNG является глобальным механизмом.

Доступны следующие варианты источника:

  • builtin

    Это встроенный источник начального заполнения, доступный всегда. Во время работы он потребляет минимум процессорных ресурсов, поэтому его можно использовать постоянно без каких-либо недостатков. Источник данных для начального заполнения PRNG состоит из текущего времени, идентификатора текущего процесса и случайно выбранных 128 байт из стека. Недостаток заключается в том, что этот источник нельзя считать действительно надёжным, а при запуске (когда таблица состояния ещё недоступна) он даёт лишь несколько байтов энтропии. Поэтому при запуске всегда следует использовать дополнительный источник начального заполнения.

  • file:/path/to/source

    Этот вариант использует внешний файл /path/to/source в качестве источника для начального заполнения PRNG. Если задано значение bytes, энтропию образуют только первые bytes байт файла (а значение bytes передаётся в /path/to/source как первый аргумент). Если значение bytes не задано, энтропию образует весь файл (а 0 передаётся в /path/to/source как первый аргумент). Используйте этот вариант, особенно при запуске, например, с доступными устройствами /dev/random и/или /dev/urandom (обычно они есть в современных системах на базе Unix, таких как FreeBSD и Linux).

    Однако будьте осторожны: обычно /dev/random предоставляет столько данных энтропии, сколько имеется в данный момент. Например, если запрошено 512 байт энтропии, а устройство располагает только 100 байтами, возможны два варианта: на некоторых платформах вы получите только 100 байт, а на других чтение будет заблокировано до появления достаточного количества байт (что может занять много времени). В этом случае лучше использовать имеющийся /dev/urandom, поскольку он никогда не блокирует работу и действительно выдаёт запрошенный объём данных. Недостаток лишь в том, что качество полученных данных может быть не самым высоким.

  • exec:/path/to/program

    Этот вариант использует внешнюю исполняемую программу /path/to/program в качестве источника для начального заполнения PRNG. Если задано значение bytes, энтропию образуют только первые bytes байт содержимого её stdout. Если значение bytes не задано, энтропию образуют все данные, полученные из stdout. Используйте этот вариант только при запуске, когда требуется очень надёжное начальное заполнение с помощью внешней программы (например, как в приведённом выше примере с утилитой truerand из дистрибутива mod_ssl, основанной на библиотеке AT&T truerand). Использование этого варианта в контексте соединения, разумеется, слишком сильно замедляет работу сервера. Поэтому обычно следует избегать использования внешних программ в этом контексте.

  • egd:/path/to/egd-socket (только Unix)

    Этот вариант использует доменный сокет Unix внешнего демона сбора энтропии (EGD) (см. http://www.lothar.com/tech /crypto/) для начального заполнения PRNG. Используйте его, если на вашей платформе нет устройства генерации случайных чисел.

Пример

SSLRandomSeed startup builtin
SSLRandomSeed startup "file:/dev/random"
SSLRandomSeed startup "file:/dev/urandom" 1024
SSLRandomSeed startup "exec:/usr/local/bin/truerand" 16
SSLRandomSeed connect builtin
SSLRandomSeed connect "file:/dev/random"
SSLRandomSeed connect "file:/dev/urandom" 1024

Директива SSLRenegBufferSize

Описание: Задание размера буфера повторного согласования SSL
Синтаксис:
SSLRenegBufferSize bytes
Значение по умолчанию:
SSLRenegBufferSize 131072
Контекст: каталог, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_ssl

Если требуется повторное согласование SSL в контексте отдельного расположения, например при использовании SSLVerifyClient в блоке Directory или Location, mod_ssl должен буферизовать тело HTTP-запроса в памяти до завершения нового рукопожатия SSL. Эту директиву можно использовать для задания объёма памяти, выделяемого под этот буфер.

Обратите внимание: во многих конфигурациях отправитель тела запроса может быть недоверенным, поэтому при изменении этого параметра необходимо учитывать возможность атаки типа «отказ в обслуживании» за счёт потребления памяти.

Пример

SSLRenegBufferSize 262144

Директива SSLRequire

Описание: Разрешение доступа только при истинности произвольно сложного логического выражения
Синтаксис:
SSLRequire expression
Контекст: каталог, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_ssl

SSLRequire устарела

SSLRequire устарела и в общем случае должна быть заменена на Require expr. Так называемый синтаксис ap_expr директивы Require expr является надмножеством синтаксиса SSLRequire, за следующим исключением:

В SSLRequire операторы сравнения <, <=, ... полностью эквивалентны операторам lt, le, ... и работают несколько необычным образом: сначала сравнивается длина двух строк, а затем их лексикографический порядок. В свою очередь, в ap_expr есть два набора операторов сравнения: операторы <, <=, ... выполняют лексикографическое сравнение строк, а операторы -lt, -le, ... — сравнение целых чисел. Для последних также предусмотрены псевдонимы без начальных дефисов: lt, le, ...

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

Выражение должно соответствовать следующему синтаксису (записанному в нотации грамматики БНФ):

expr     ::= "true" | "false"
           | "!" expr
           | expr "&&" expr
           | expr "||" expr
           | "(" expr ")"
           | comp

comp     ::= word "==" word | word "eq" word
           | word "!=" word | word "ne" word
           | word "<"  word | word "lt" word
           | word "<=" word | word "le" word
           | word ">"  word | word "gt" word
           | word ">=" word | word "ge" word
           | word "in" "{" wordlist "}"
           | word "in" "PeerExtList(" word ")"
           | word "=~" regex
           | word "!~" regex

wordlist ::= word
           | wordlist "," word

word     ::= digit
           | cstring
           | variable
           | function

digit    ::= [0-9]+
cstring  ::= "..."
variable ::= "%{" varname "}"
function ::= funcname "(" funcargs ")"

Для varname можно использовать любые переменные, описанные в разделе Переменные среды. Доступные для funcname функции перечислены в документации ap_expr.

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

Пример

SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)-/                   \
            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd."          \
            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"}    \
            and %{TIME_WDAY} -ge 1 and %{TIME_WDAY} -le 5          \
            and %{TIME_HOUR} -ge 8 and %{TIME_HOUR} -le 20       ) \
           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/

Функция PeerExtList(object-ID) ищет в сертификате клиента ноль или более экземпляров расширения сертификата X.509, определяемого заданным идентификатором объекта (OID). Выражение считается истинным, если строка слева точно совпадает со значением расширения с этим OID. (Если присутствует несколько расширений с одинаковым OID, должно совпасть хотя бы одно из них.)

Пример

SSLRequire "foobar" in PeerExtList("1.2.3.4.5.6")

Примечания о функции PeerExtList

  • Идентификатор объекта можно указать как в виде распознаваемого библиотекой SSL описательного имени, например "nsComment", так и в виде числового OID, например "1.2.3.4.5.6".

  • Перед сравнением значения расширений с типами, известными библиотеке SSL, преобразуются в строки. Для расширения с типом, который библиотеке SSL неизвестен, mod_ssl разберёт значение, если оно относится к одному из примитивных типов ASN.1: UTF8String, IA5String, VisibleString или BMPString. Для расширения одного из этих типов строковое значение при необходимости преобразуется в UTF-8, а затем сравнивается с выражением слева.

См. также

  • Переменные среды в Apache HTTP Server — дополнительные примеры.
  • Require expr
  • Общий синтаксис выражений в Apache HTTP Server

Директива SSLRequireSSL

Описание: Запрет доступа, если для HTTP-запроса не используется SSL
Синтаксис: SSLRequireSSL
Контекст: каталог, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_ssl

Эта директива запрещает доступ, если для текущего соединения не включён HTTP поверх SSL (то есть HTTPS). Она очень удобна внутри виртуального хоста с включённым SSL или каталогов, чтобы защититься от ошибок конфигурации, из-за которых могут стать доступными данные, требующие защиты. При наличии этой директивы все запросы без использования SSL отклоняются.

Пример

SSLRequireSSL

Директива SSLSessionCache

Описание: Тип глобального/межпроцессного кэша сеансов SSL
Синтаксис:
SSLSessionCache type
Значение по умолчанию:
SSLSessionCache none
Контекст: конфигурация сервера
Статус: Расширение
Модуль: mod_ssl

Эта директива настраивает тип хранилища глобального/межпроцессного кэша сеансов SSL. Этот кэш является необязательным механизмом, который ускоряет параллельную обработку запросов. Для запросов к одному и тому же процессу сервера (через HTTP keep-alive) OpenSSL уже кэширует сведения о сеансах SSL локально. Однако современные клиенты запрашивают встроенные изображения и другие данные параллельно (обычно одновременно выполняется до четырёх запросов), и эти запросы обслуживаются разными предварительно созданными процессами сервера. Межпроцессный кэш помогает избежать ненужных рукопожатий сеанса.

В настоящее время поддерживаются следующие пять типов хранилища:

  • none

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

  • nonenotnull

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

  • dbm:/path/to/datafile

    Использует хеш-файл DBM на локальном диске для синхронизации локальных кэшей памяти OpenSSL процессов сервера. При высокой нагрузке в работе этого кэша сеансов могут возникать проблемы с надёжностью. Для его использования убедитесь, что загружен mod_socache_dbm.

  • shmcb:/path/to/datafile [(размер)]

    Использует высокопроизводительный циклический буфер (приблизительно размер байт) в сегменте разделяемой оперативной памяти (создаваемом с помощью /path/to/datafile) для синхронизации локальных кэшей памяти OpenSSL процессов сервера. Это рекомендуемый кэш сеансов. Для его использования убедитесь, что загружен mod_socache_shmcb.

  • dc:UNIX:/path/to/socket

    Использует библиотеки распределённого кэширования сеансов distcache. Аргумент должен указывать расположение используемого сервера или прокси-сервера в синтаксисе адресов distcache; например, UNIX:/path/to/socket указывает доменный сокет UNIX (обычно локальный прокси dc_client); IP:server.example.com:9001 указывает IP-адрес. Для использования убедитесь, что загружен mod_socache_dc.

Примеры

SSLSessionCache "dbm:/usr/local/apache/logs/ssl_gcache_data"
SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_gcache_data(512000)"

Мьютекс ssl-cache используется для сериализации доступа к кэшу сеансов и предотвращения его повреждения. Этот мьютекс можно настроить с помощью директивы Mutex.

Директива SSLSessionCacheTimeout

Описание: Время в секундах до истечения срока действия сеанса SSL в кэше сеансов
Синтаксис:
SSLSessionCacheTimeout seconds
Значение по умолчанию:
SSLSessionCacheTimeout 300
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Применяется также к возобновлению сеансов TLS по RFC 5077 в Apache 2.4.10 и более поздних версиях

Эта директива задаёт время ожидания в секундах для данных, хранящихся в глобальном/межпроцессном кэше сеансов SSL и внутреннем кэше памяти OpenSSL, а также для сеансов, возобновляемых с помощью механизма возобновления сеансов TLS (RFC 5077). Для тестирования значение можно уменьшить до 15, но в реальных условиях следует использовать более высокие значения, например 300.

Пример

SSLSessionCacheTimeout 600

Директива SSLSessionTicketKeyFile

Описание: Постоянный ключ шифрования/расшифрования билетов сеансов TLS
Синтаксис:
SSLSessionTicketKeyFile file-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.0 и более поздних версиях при использовании OpenSSL 0.9.8h или более поздней версии

Эта необязательная директива задаёт секретный ключ для шифрования и расшифрования билетов сеансов TLS, определённых в RFC 5077. В первую очередь подходит для кластерных сред, где сведения о сеансах TLS должны быть общими для нескольких узлов. Для конфигураций httpd с одним экземпляром рекомендуется не задавать файл ключа билета, а вместо этого использовать ключи, которые mod_ssl генерирует при запуске (случайным образом).

Файл ключа билета должен содержать 48 байт случайных данных, предпочтительно полученных из источника с высокой энтропией. В Unix-подобной системе файл ключа билета можно создать следующим образом:

dd if=/dev/random of=/path/to/file.tkey bs=1 count=48

Ключи билетов следует регулярно менять, поскольку это единственный способ аннулировать существующие билеты сеансов: в настоящее время OpenSSL не позволяет задавать срок действия билетов. Новый ключ билета начинает использоваться только после перезапуска веб-сервера. После перезапуска все существующие билеты сеансов становятся недействительными.

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

Директива SSLSessionTickets

Описание: Включение или отключение использования билетов сеансов TLS
Синтаксис:
SSLSessionTickets on|off
Значение по умолчанию:
SSLSessionTickets on
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.11 и более поздних версиях при использовании OpenSSL 0.9.8f или более поздней версии.

Эта директива позволяет включить или отключить использование билетов сеансов TLS (RFC 5077).

Билеты сеансов TLS включены по умолчанию. Их использование без достаточно частого перезапуска веб-сервера (например, ежедневно) ставит под угрозу прямую секретность.

Директива SSLSRPUnknownUserSeed

Описание: Начальное значение SRP для неизвестного пользователя
Синтаксис:
SSLSRPUnknownUserSeed secret-string
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.4 и более поздних версиях при использовании OpenSSL 1.0.1 или более поздней версии

Эта директива задаёт начальное значение, используемое для подстановки параметров пользователя SRP для неизвестных пользователей, чтобы не раскрывать, существует ли указанный пользователь. Укажите секретную строку. Если директива не используется, Apache будет возвращать клиентам, указавшим неизвестное имя пользователя, оповещение UNKNOWN_PSK_IDENTITY.

Пример

SSLSRPUnknownUserSeed "secret"

Директива SSLSRPVerifierFile

Описание: Путь к файлу верификатора SRP
Синтаксис:
SSLSRPVerifierFile file-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в httpd 2.4.4 и более поздних версиях при использовании OpenSSL 1.0.1 или более поздней версии

Эта директива включает TLS-SRP и задаёт путь к файлу верификаторов OpenSSL SRP (Secure Remote Password), содержащему имена пользователей TLS-SRP, верификаторы, соли и параметры групп.

Пример

SSLSRPVerifierFile "/path/to/file.srpv"

Файл верификаторов можно создать с помощью утилиты командной строки openssl:

Создание файла верификаторов SRP

openssl srp -srpvfile passwd.srpv -userinfo "some info" -add username

Значение, указанное с необязательным параметром -userinfo, доступно в переменной среды запроса SSL_SRP_USERINFO.

Директива SSLStaplingCache

Описание: Настройка кэша OCSP-штампования
Синтаксис:
SSLStaplingCache type
Контекст: конфигурация сервера
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Настраивает кэш для хранения ответов OCSP, включаемых в рукопожатие TLS, если включена SSLUseStapling. Для OCSP-штампования настройка кэша обязательна. За исключением none и nonenotnull, поддерживаются те же типы хранилища, что и для SSLSessionCache.

Директива SSLStaplingErrorCacheTimeout

Описание: Время в секундах до истечения срока действия недействительных ответов в кэше OCSP-штампования
Синтаксис:
SSLStaplingErrorCacheTimeout seconds
Значение по умолчанию:
SSLStaplingErrorCacheTimeout 600
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Задаёт время ожидания в секундах до истечения срока действия недействительных ответов в кэше OCSP-штампования (настраиваемом с помощью SSLStaplingCache). Чтобы задать время хранения действительных ответов в кэше, см. SSLStaplingStandardCacheTimeout.

Директива SSLStaplingFakeTryLater

Описание: Формирование ответов "tryLater" при сбое запросов OCSP-штампования
Синтаксис:
SSLStaplingFakeTryLater on|off
Значение по умолчанию:
SSLStaplingFakeTryLater on
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Если эта директива включена и запрос к ответчику OCSP для целей штампования завершается ошибкой, mod_ssl сформирует для клиента ответ "tryLater". Действует только при включённой SSLStaplingReturnResponderErrors.

Директива SSLStaplingForceURL

Описание: Переопределение URI ответчика OCSP, указанного в расширении AIA сертификата
Синтаксис:
SSLStaplingForceURL uri
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Эта директива переопределяет URI ответчика OCSP, полученный из расширения authorityInfoAccess (AIA) сертификата. Один из возможных вариантов использования — обращение через прокси-сервер для получения запросов OCSP.

Директива SSLStaplingResponderTimeout

Описание: Время ожидания запросов OCSP-штампования
Синтаксис:
SSLStaplingResponderTimeout seconds
Значение по умолчанию:
SSLStaplingResponderTimeout 10
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Этот параметр задаёт время ожидания ответов на запросы к ответчикам OCSP, когда включена SSLUseStapling и mod_ssl запрашивает ответчика для целей OCSP-штампования.

Директива SSLStaplingResponseMaxAge

Описание: Максимально допустимый возраст ответов OCSP-штампования
Синтаксис:
SSLStaplingResponseMaxAge seconds
Значение по умолчанию:
SSLStaplingResponseMaxAge -1
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Этот параметр задаёт максимально допустимый возраст («свежесть») ответов OCSP при их использовании для штампования, то есть когда включена SSLUseStapling. Значение по умолчанию (-1) не ограничивает максимальный возраст, поэтому ответы OCSP считаются действительными, пока их поле nextUpdate указывает на будущее время.

Директива SSLStaplingResponseTimeSkew

Описание: Максимально допустимое расхождение времени при проверке ответа OCSP-штампования
Синтаксис:
SSLStaplingResponseTimeSkew seconds
Значение по умолчанию:
SSLStaplingResponseTimeSkew 300
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Этот параметр задаёт максимально допустимое расхождение времени при проверке mod_ssl полей thisUpdate и nextUpdate ответов OCSP, включаемых в рукопожатие TLS (OCSP-штампование). Применяется только при включённой SSLUseStapling.

Директива SSLStaplingReturnResponderErrors

Описание: Передача клиенту ошибок OCSP, связанных со штампованием
Синтаксис:
SSLStaplingReturnResponderErrors on|off
Значение по умолчанию:
SSLStaplingReturnResponderErrors on
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Если эта директива включена, mod_ssl будет передавать клиенту ответы на неудачные запросы OCSP, связанные со штампованием (например, ответы с общим статусом, отличным от "successful", ответы со статусом сертификата, отличным от "good", просроченные ответы и т. д.). Если задано значение off, в рукопожатие TLS будут включаться только ответы, указывающие на статус сертификата "good".

Директива SSLStaplingStandardCacheTimeout

Описание: Количество секунд до истечения срока действия ответов в кэше OCSP stapling
Синтаксис:
SSLStaplingStandardCacheTimeout seconds
Значение по умолчанию:
SSLStaplingStandardCacheTimeout 3600
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Задаёт время в секундах, по истечении которого ответы в кэше OCSP stapling (настраиваемом с помощью SSLStaplingCache) теряют силу. Эта директива применяется к действительным ответам, тогда как SSLStaplingErrorCacheTimeout используется для управления временем хранения недействительных/недоступных ответов.

Директива SSLStrictSNIVHostCheck

Описание: Разрешён ли клиентам без поддержки SNI доступ к виртуальному хосту на основе имени.
Синтаксис:
SSLStrictSNIVHostCheck on|off
Значение по умолчанию:
SSLStrictSNIVHostCheck off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна в Apache 2.2.12 и более поздних версиях

Эта директива задаёт, разрешён ли клиенту без поддержки SNI доступ к виртуальному хосту на основе имени. Если в виртуальном хосте по умолчанию, использующем имя, задано значение on, клиенты без поддержки SNI не смогут получить доступ ни к одному виртуальному хосту, относящемуся к этой комбинации IP-адреса и порта. Если в любом другом виртуальном хосте задано значение on, клиенты без поддержки SNI не смогут получить доступ к этому виртуальному хосту.

Этот параметр доступен, только если httpd был скомпилирован с версией OpenSSL, поддерживающей SNI.

Пример

SSLStrictSNIVHostCheck on

Директива SSLUserName

Описание: Имя переменной, определяющей имя пользователя
Синтаксис:
SSLUserName varname
Контекст: конфигурация сервера, каталог, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_ssl

Эта директива задаёт поле «user» в объекте запроса Apache. Нижестоящие модули используют его для идентификации пользователя в виде символьной строки. В частности, это может привести к установке переменной окружения REMOTE_USER. В качестве varname можно указать любую из переменных окружения SSL.

Обратите внимание, что эта директива не действует, если используется параметр FakeBasicAuth (см. SSLOptions).

Пример

SSLUserName SSL_CLIENT_S_DN_CN

Директива SSLUseStapling

Описание: Включение передачи ответов OCSP в рукопожатии TLS
Синтаксис:
SSLUseStapling on|off
Значение по умолчанию:
SSLUseStapling off
Контекст: конфигурация сервера, виртуальный хост
Статус: Расширение
Модуль: mod_ssl
Совместимость: Доступна при использовании OpenSSL 0.9.8h или более поздней версии

Этот параметр включает OCSP stapling, определённый расширением TLS «Certificate Status Request», описанным в RFC 6066. Если этот параметр включён (и клиент отправил соответствующий запрос), mod_ssl включит ответ OCSP для собственного сертификата в рукопожатие TLS. Для включения OCSP stapling необходимо настроить SSLStaplingCache.

OCSP stapling избавляет клиента от необходимости самостоятельно обращаться к серверу OCSP, однако следует учитывать, что согласно спецификации RFC 6066 ответ CertificateStatus сервера может содержать ответ OCSP только для одного сертификата. Поэтому для сертификатов сервера, цепочка которых содержит промежуточные сертификаты ЦС (что обычно встречается в наши дни), текущая реализация stapling лишь частично достигает заявленной цели — «сокращения числа обменов данными и расхода ресурсов». См. также RFC 6961 (расширение TLS для статусов нескольких сертификатов).

При включённом OCSP stapling мьютекс ssl-stapling используется для управления доступом к кэшу OCSP stapling и предотвращения его повреждения, а мьютекс sss-stapling-refresh — для управления обновлением ответов OCSP. Эти мьютексы можно настроить с помощью директивы Mutex.

Директива SSLVerifyClient

Описание: Тип проверки сертификата клиента
Синтаксис:
SSLVerifyClient level
Значение по умолчанию:
SSLVerifyClient none
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_ssl

Эта директива задаёт уровень проверки сертификата для аутентификации клиента. Обратите внимание, что директиву можно использовать как в контексте сервера, так и в контексте каталога. В контексте сервера она применяется к процессу аутентификации клиента, выполняемому во время стандартного рукопожатия SSL при установлении соединения. В контексте каталога она принудительно запускает повторное согласование SSL с перенастроенным уровнем проверки клиента после чтения HTTP-запроса, но до отправки HTTP-ответа.

Для параметра level доступны следующие значения:

  • none: сертификат клиента не требуется
  • optional: клиент может предоставить действительный сертификат
  • require: клиент должен предоставить действительный сертификат
  • optional_no_ca: клиент может предоставить действительный сертификат,
    но его проверка может завершиться неудачей. На этот параметр нельзя полагаться при аутентификации клиента.

Пример

SSLVerifyClient require

Директива SSLVerifyDepth

Описание: Максимальная глубина цепочки сертификатов ЦС при проверке сертификата клиента
Синтаксис:
SSLVerifyDepth number
Значение по умолчанию:
SSLVerifyDepth 1
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределение: AuthConfig
Статус: Расширение
Модуль: mod_ssl

Эта директива задаёт глубину проверки, до которой mod_ssl будет проверять сертификат, прежде чем решить, что у клиента нет действительного сертификата. Обратите внимание, что директиву можно использовать как в контексте сервера, так и в контексте каталога. В контексте сервера она применяется к процессу аутентификации клиента, выполняемому во время стандартного рукопожатия SSL при установлении соединения. В контексте каталога она принудительно запускает повторное согласование SSL с перенастроенной глубиной проверки клиента после чтения HTTP-запроса, но до отправки HTTP-ответа.

Фактически глубина — это максимальное количество промежуточных издателей сертификатов, то есть максимальное количество сертификатов ЦС, по которым разрешено пройти при проверке сертификата клиента. Глубина 0 означает, что принимаются только самоподписанные сертификаты клиента; глубина 1, заданная по умолчанию, означает, что сертификат клиента может быть самоподписанным или должен быть подписан ЦС, непосредственно известным серверу (то есть сертификат ЦС находится в SSLCACertificatePath), и так далее.

Пример

SSLVerifyDepth 10

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_ssl.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API