Модуль 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отменяется (поскольку именно так должен работать механизм ApacheSatisfy). Однако для строгого ограничения доступа можно использовать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