Apache Module mod_ssl
| Описание: | Сильная криптография, использующая протоколы Secure Sockets Layer (SSL) и Transport Layer Security (TLS) |
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | ssl_module |
| Файл исходного кода: | mod_ssl.c |
Обзор
Этот модуль предоставляет поддержку SSL v3 и TLS v1.x для Apache HTTP Server. SSL v2 больше не поддерживается.
Этот модуль полагается на OpenSSL для обеспечения криптографического движка.
Дополнительные сведения, обсуждения и примеры приведены в документации SSL.
Переменные окружения
Этот модуль может быть настроен для предоставления нескольких элементов информации SSL в качестве дополнительных переменных окружения для пространства имен SSI и CGI. За исключением HTTPS и SSL_TLS_SNI, которые всегда определены, эта информация по умолчанию не предоставляется из соображений производительности. (См. SSLOptions StdEnvVars, ниже) Сгенерированные переменные перечислены в таблице ниже. Для обратной совместимости информация может быть доступна и под другими именами. Подробности о переменных совместимости см. в главе Совместимость.
| Имя переменной | Тип значения | Описание |
|---|---|---|
HTTPS | флаг | Используется HTTPS. |
SSL_PROTOCOL | строка | Версия протокола SSL (SSLv3, TLSv1, TLSv1.1, TLSv1.2) |
SSL_SESSION_ID | строка | Идентификатор сессии SSL в шестнадцатеричном формате |
SSL_SESSION_RESUMED | строка | Начальная или возобновленная сессия SSL. Примечание: несколько запросов могут быть обработаны в рамках одной (начальной или возобновленной) сессии SSL, если используется HTTP KeepAlive |
SSL_SECURE_RENEG | строка |
true если поддерживается безопасное возобновление, иначе false
|
SSL_CIPHER | строка | Имя спецификации шифра |
SSL_CIPHER_EXPORT | строка |
true если шифр экспортный |
SSL_CIPHER_USEKEYSIZE | число | Количество битов шифра (фактически используемых) |
SSL_CIPHER_ALGKEYSIZE | число | Количество битов шифра (возможных) |
SSL_COMPRESS_METHOD | строка | Метод сжатия SSL, согласованный по протоколу |
SSL_VERSION_INTERFACE | строка | Версия программы mod_ssl |
SSL_VERSION_LIBRARY | строка | Версия программы OpenSSL |
SSL_CLIENT_M_VERSION | строка | Версия сертификата клиента |
SSL_CLIENT_M_SERIAL | строка | Серийный номер сертификата клиента |
SSL_CLIENT_S_DN | строка | DN субъекта в сертификате клиента |
SSL_CLIENT_S_DN_x509
| строка | Компонент DN субъекта сертификата клиента |
SSL_CLIENT_SAN_Email_n
| строка | Записи расширения subjectAltName сертификата клиента типа rfc822Name |
SSL_CLIENT_SAN_DNS_n
| строка | Записи расширения subjectAltName сертификата клиента типа dNSName |
SSL_CLIENT_SAN_OTHER_msUPN_n
| строка | Записи расширения subjectAltName сертификата клиента типа otherName, форма Microsoft User Principal Name (OID 1.3.6.1.4.1.311.20.2.3) |
SSL_CLIENT_I_DN | строка | DN эмитента сертификата клиента |
SSL_CLIENT_I_DN_x509
| строка | Компонент DN эмитента сертификата клиента |
SSL_CLIENT_V_START | строка | Дата начала действия сертификата клиента |
SSL_CLIENT_V_END | строка | Дата окончания действия сертификата клиента |
SSL_CLIENT_V_REMAIN | строка | Количество дней до истечения срока действия сертификата клиента |
SSL_CLIENT_A_SIG | строка | Алгоритм, используемый для подписи сертификата клиента |
SSL_CLIENT_A_KEY | строка | Алгоритм, используемый для открытого ключа сертификата клиента |
SSL_CLIENT_CERT | строка | Сертификат клиента в формате PEM |
SSL_CLIENT_CERT_CHAIN_n
| строка | Сертификаты в цепочке сертификатов клиента в формате PEM |
SSL_CLIENT_CERT_RFC4523_CEA | строка | Серийный номер и эмитент сертификата. Формат соответствует CertificateExactAssertion в RFC4523 |
SSL_CLIENT_VERIFY | строка |
NONE, SUCCESS, GENEROUS или FAILED:reason
|
SSL_SERVER_M_VERSION | строка | Версия сертификата сервера |
SSL_SERVER_M_SERIAL | строка | Серийный номер сертификата сервера |
SSL_SERVER_S_DN | строка | DN субъекта в сертификате сервера |
SSL_SERVER_SAN_Email_n
| строка | Записи расширения subjectAltName сертификата сервера типа rfc822Name |
SSL_SERVER_SAN_DNS_n
| строка | Записи расширения subjectAltName сертификата сервера типа dNSName |
SSL_SERVER_SAN_OTHER_dnsSRV_n
| строка | Записи расширения subjectAltName сертификата сервера типа otherName, форма SRVName (OID 1.3.6.1.5.5.7.8.7, RFC 4985) |
SSL_SERVER_S_DN_x509
| строка | Компонент DN субъекта сертификата сервера |
SSL_SERVER_I_DN | строка | DN эмитента сертификата сервера |
SSL_SERVER_I_DN_x509
| строка | Компонент DN эмитента сертификата сервера |
SSL_SERVER_V_START | строка | Дата начала действия сертификата сервера |
SSL_SERVER_V_END | строка | Дата окончания действия сертификата сервера |
SSL_SERVER_A_SIG | строка | Алгоритм, используемый для подписи сертификата сервера |
SSL_SERVER_A_KEY | строка | Алгоритм, используемый для открытого ключа сертификата сервера |
SSL_SERVER_CERT | строка | Сертификат сервера в формате PEM |
SSL_SRP_USER | строка | Имя пользователя SRP |
SSL_SRP_USERINFO | строка | Дополнительная информация пользователя SRP |
SSL_TLS_SNI | строка | Содержимое расширения 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. К переменным можно обращаться, используя синтаксис ``%{имя_переменной}''. Начиная с версии 2.4.18, также можно использовать синтаксис в стиле mod_rewrite, ``%{SSL:имя_переменной}'', или синтаксис в стиле функции ``ssl(имя_переменной)''.
Пример (используя mod_headers)
Header set X-SSL-PROTOCOL "expr=%{SSL_PROTOCOL}"
Header set X-SSL-CIPHER "expr=%{SSL:SSL_CIPHER}" Эта функция работает даже без установки параметра StdEnvVars директивы SSLOptions.
Поставщики авторизации для использования с Require
mod_ssl предоставляет несколько поставщиков аутентификации для использования с директивой mod_authz_core Require.
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 |
Данная директива устанавливает единый файл, где вы можете собрать сертификаты Удостоверяющих центров (УЦ), клиентов которых вы используете. Они используются для проверки клиентов. Такой файл представляет собой просто конкатенацию различных файлов сертификатов в формате PEM в порядке приоритета. Его можно использовать как альтернативу и/или дополнительно к SSLCACertificatePath.
Пример
SSLCACertificateFile "/usr/local/apache2/conf/ssl.crt/ca-bundle-client.crt"
Директива SSLCACertificatePath
| Описание: | Директория с сертификатами CA в формате PEM для проверки клиентов |
|---|---|
| Синтаксис: | SSLCACertificatePath directory-path |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_ssl |
Данная директива устанавливает директорию, в которой хранятся сертификаты Удостоверяющих центров (УЦ), клиентов которых вы используете. Они используются для проверки сертификата клиента при аутентификации клиента.
Файлы в этой директории должны быть в формате PEM и доступны через имена файлов с хешем. Поэтому обычно вы не можете просто поместить файлы сертификатов туда: вам также необходимо создать символические ссылки с именами значение-хеша.N. И вы всегда должны убедиться, что эта директория содержит соответствующие символические ссылки.
Пример
SSLCACertificatePath "/usr/local/apache2/conf/ssl.crt/"
Директива SSLCADNRequestFile
| Описание: | Файл с конкатенированными сертификатами CA в формате PEM для определения допустимых имен CA |
|---|---|
| Синтаксис: | SSLCADNRequestFile file-path |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_ssl |
При запросе сертификата клиента mod_ssl клиенту отправляется список допустимых имен Удостоверяющих центров. Эти имена CA могут использоваться клиентом для выбора соответствующего сертификата клиента из имеющихся у него.
Если ни одна из директив SSLCADNRequestPath или SSLCADNRequestFile не указана, тогда множество допустимых имен CA, отправляемых клиенту, состоит из имен всех сертификатов CA, заданных директивами SSLCACertificateFile и SSLCACertificatePath; другими словами, имен УЦ, которые будут фактически использоваться для проверки сертификата клиента.
В некоторых ситуациях полезно иметь возможность отправлять набор допустимых имен 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 и доступны через имена файлов с хешем. Поэтому обычно вы не можете просто поместить файлы сертификатов туда: вам также необходимо создать символические ссылки с именами значение-хеша.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) Удостоверяющих центров (УЦ), клиентов которых вы используете. Они используются для проверки клиентов. Такой файл представляет собой просто конкатенацию различных файлов CRL в формате PEM в порядке приоритета. Его можно использовать как альтернативу и/или дополнительно к SSLCARevocationPath.
Пример
SSLCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle-client.crl"
Директива SSLCARevocationPath
| Описание: | Директория с CRL сертификатов CA в формате PEM для проверки клиентов |
|---|---|
| Синтаксис: | SSLCARevocationPath directory-path |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_ssl |
Данная директива устанавливает директорию, в которой хранятся списки отозванных сертификатов (CRL) Удостоверяющих центров (УЦ), клиентов которых вы используете. Они используются для отзыва сертификата клиента при аутентификации клиента.
Файлы в этой директории должны быть в формате PEM и доступны через имена файлов с хешем. Поэтому обычно вы не можете просто поместить файлы CRL туда: вам также необходимо создать символические ссылки с именами значение-хеша.rN. И вы всегда должны убедиться, что эта директория содержит соответствующие символические ссылки.
Пример
SSLCARevocationPath "/usr/local/apache2/conf/ssl.crl/"
Директива SSLCertificateChainFile
| Описание: | Файл с PEM-закодированными сертификатами CA сервера |
|---|---|
| Синтаксис: | 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. Эта практика крайне не рекомендуется. Если она используется, файлы сертификатов, использующие такой встроенный ключ, должны быть настроены после сертификатов, использующих отдельный файл ключа. Если закрытый ключ зашифрован, диалог с запросом пароля будет вынужденно появляться при запуске.
В качестве альтернативы хранению сертификатов и закрытых ключей в файлах, может быть использован идентификатор сертификата для идентификации сертификата, хранящегося в токене. В настоящее время только PKCS#11 URI распознаются как идентификаторы сертификатов и могут быть использованы в сочетании с OpenSSL pkcs11 модулем. Если SSLCertificateKeyFile опущен, сертификат и закрытый ключ могут быть загружены через единственный идентификатор, указанный с помощью SSLCertificateFile.
Взаимодействие параметров DH с простыми числами > 1024 бит
Начиная с версии 2.4.7, mod_ssl использует стандартизированные параметры DH с длиной простых чисел 2048, 3072 и 4096 бит, а также с дополнительными длинами простых чисел 6144 и 8192 бит, начиная с версии 2.4.10 (из RFC 3526), и предоставляет их клиентам, основываясь на длине ключа RSA/DSA сертификата. В частности, для клиентов на Java (Java 7 или ранее) это может привести к сбою рукопожатия — см. этот ответ FAQ для решения таких проблем.
Параметры DH по умолчанию при использовании нескольких сертификатов и версий OpenSSL до 1.0.2
При использовании нескольких сертификатов для поддержки различных алгоритмов аутентификации (например, RSA, DSA, но в основном ECC) и OpenSSL до версии 1.0.2 рекомендуется либо использовать пользовательские параметры DH (предпочтительнее), добавив их в первый файл сертификата (как описано выше), либо упорядочить директивы SSLCertificateFile таким образом, чтобы сертификаты RSA/DSA располагались после сертификата ECC.
Это связано с ограничением в более старых версиях OpenSSL, которые не позволяют Apache HTTP Server определить текущий выбранный сертификат во время рукопожатия (когда параметры 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, но эта практика крайне не рекомендуется. Если она используется, файлы сертификатов, использующие такой встроенный ключ, должны быть настроены после сертификатов, использующих отдельный файл ключа.
В качестве альтернативы хранению закрытых ключей в файлах, может быть использован идентификатор ключа для идентификации закрытого ключа, хранящегося в токене. В настоящее время только PKCS#11 URI распознаются как идентификаторы закрытых ключей и могут быть использованы в сочетании с 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, Diffie-Hellman, Эллиптическая кривая Diffie-Hellman, Secure Remote Password -
Алгоритм аутентификации:
RSA, Diffie-Hellman, DSS, ECDSA или none. -
Алгоритм шифрования:
AES, DES, Triple-DES, RC4, RC2, IDEA и т.д. -
Алгоритм MAC-хеширования:
MD5, SHA или SHA1, SHA256, SHA384.
SSL-шифр также может быть экспортным шифром. Шифры SSLv2 больше не поддерживаются. Для указания используемых шифров можно указать все шифры по одному или использовать псевдонимы для указания предпочтения и порядка шифров (см. Таблица 1). Фактически доступные шифры и псевдонимы зависят от используемой версии OpenSSL. Более новые версии OpenSSL могут включать дополнительные шифры.
| Метка | Описание |
|---|---|
| Алгоритм обмена ключами: | |
kRSA | Обмен ключами RSA |
kDHr | Обмен ключами Diffie-Hellman с ключом RSA |
kDHd | Обмен ключами Diffie-Hellman с ключом DSA |
kEDH | Эфемерный (временный ключ) обмен ключами Diffie-Hellman (без сертификата) |
kSRP | Обмен ключами Secure Remote Password (SRP) |
| Алгоритм аутентификации: | |
aNULL | Отсутствует аутентификация |
aRSA | Аутентификация RSA |
aDSS | Аутентификация DSS |
aDH | Аутентификация Diffie-Hellman |
| Алгоритм кодирования шифра: | |
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 | Все шифры, использующие обмен ключами Diffie-Hellman |
EDH | Все шифры, использующие эфемерный обмен ключами Diffie-Hellman |
ECDH | Обмен ключами по эллиптическим кривым Diffie-Hellman |
ADH | Все шифры, использующие анонимный обмен ключами Diffie-Hellman |
AECDH | Все шифры, использующие анонимный обмен ключами по эллиптическим кривым Diffie-Hellman |
SRP | Все шифры, использующие обмен ключами Secure Remote Password (SRP) |
DSS | Все шифры, использующие аутентификацию DSS |
ECDSA | Все шифры, использующие аутентификацию ECDSA |
aNULL | Все шифры, использующие отсутствие аутентификации |
Теперь, где это становится интересным, заключается в том, что их можно объединить для указания порядка и шифров, которые вы хотите использовать. Для ускорения этого процесса также существуют псевдонимы (SSLv3, TLSv1, EXP, LOW, MEDIUM, HIGH) для определённых групп шифров. Эти метки могут быть объединены с префиксами для формирования cipher-spec. Доступные префиксы:
- none: добавить шифр в список
-
+: переместить соответствующие шифры в текущую позицию в списке -
-: удалить шифр из списка (его можно добавить позже) -
!: полностью удалить шифр из списка (его нельзя добавить позже)
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 анонимные шифры Diffie-Hellman, а также все шифры, использующие 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 | None | SHA1 | |
NULL-MD5 | SSLv3 | RSA | RSA | None | MD5 | |
| Шифры Diffie-Hellman: | ||||||
ADH-DES-CBC3-SHA | SSLv3 | DH | None | 3DES(168) | SHA1 | |
ADH-DES-CBC-SHA | SSLv3 | DH | None | DES(56) | SHA1 | |
ADH-RC4-MD5 | SSLv3 | DH | None | 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) | None | DES(40) | SHA1 | экспортный |
EXP-ADH-RC4-MD5 | SSLv3 | DH(512) | None | RC4(40) | MD5 | экспортный |
Направление SSLCompression
| Описание: | Включить сжатие на уровне SSL |
|---|---|
| Синтаксис: | SSLCompression on|off |
| Значение по умолчанию: | SSLCompression off |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Доступно в httpd 2.4.3 и более поздних версиях, если используется OpenSSL 0.9.8 или более поздняя версия; доступ в области виртуального хоста, если используется OpenSSL 1.0.0 или более поздняя версия. По умолчанию использовалось on в версии 2.4.3. |
Данное направление позволяет включить сжатие на уровне 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
Направление SSLEngine
| Описание: | Переключатель работы двигателя SSL/TLS |
|---|---|
| Синтаксис: | 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
| Описание: | Переключатель режима SSL FIPS |
|---|---|
| Синтаксис: | SSLFIPS on|off |
| Значение по умолчанию: | SSLFIPS off |
| Контекст: | конфигурация сервера |
| Статус: | Расширение |
| Модуль: | mod_ssl |
Это направление включает использование флага FIPS_mode библиотеки SSL. Оно должно быть установлено в глобальном контексте сервера и не может быть сконфигурировано с конфликтующими настройками (SSLFIPS включено, затем SSLFIPS выключено или аналогично). Режим применяется ко всем операциям библиотеки SSL.
Если httpd был скомпилирован с библиотекой SSL, которая не поддерживает флаг FIPS_mode, SSLFIPS on завершится с ошибкой. Обратитесь к документу политики безопасности FIPS 140-2 поставщика библиотек SSL для получения конкретных требований к использованию mod_ssl в режиме FIPS 140-2; обратите внимание, что сам 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 ответа. Если отвечающий не использует 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 или более поздней версии |
Эта директива предоставляет доступ к API OpenSSL SSL_CONF модулю mod_ssl, позволяя гибко настраивать параметры OpenSSL без необходимости реализации дополнительных mod_ssl директив при добавлении новых функций в OpenSSL.
Набор доступных SSLOpenSSLConfCmd команд зависит от используемой версии OpenSSL для mod_ssl (требуется не менее версии 1.0.2). Список поддерживаемых имен команд см. в разделе Поддерживаемые команды конфигурационного файла в руководстве OpenSSL SSL_CONF_cmd(3).
Некоторые из 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,..). Эти переменные содержат PEM-закодированные сертификаты X.509 сервера и клиента для текущего HTTPS-соединения и могут использоваться сценариями CGI для более глубокой проверки сертификатов. Дополнительно предоставляются все другие сертификаты цепочки сертификатов клиента. Это немного увеличивает окружение, поэтому необходимо использовать эту опцию по мере необходимости. -
FakeBasicAuthПри включении этой опции, Субъект Идентификатор (DN) Сертификата Клиента X509 преобразуется в имя пользователя HTTP Basic Authorization. Это означает, что стандартные методы аутентификации Apache могут использоваться для управления доступом. Имя пользователя - это просто Субъект сертификата X.509 клиента (может быть определен, запустив команду 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может использоваться как более общий механизм для имитации аутентификации 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 Corporation. Он является преемником 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 подключения).
Начиная с версии Apache HTTP сервера 2.4.42, скомпилированной/связанной с OpenSSL 1.1.1 или более поздней версии, и при предоставлении клиентом SNI в процессе рукопожатия TLS, SSLProtocol каждого (виртуального хоста на основе имени) виртуального хоста будет учитываться.
Для совместимости с предыдущими версиями, если в виртуальном хосте на основе имени не настроено SSLProtocol, всё ещё применяется значение из базового виртуального хоста, за исключением случаев, когда SSLProtocol настроено глобально, в этом случае применяется глобальное значение (это последнее исключение более обоснованно, чем совместимо).
Директива SSLProxyCACertificateFile
| Описание: | Файл конкатенированных сертификатов CA в формате 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
| Описание: | Директория файлов сертификатов CA в формате PEM для проверки подлинности удаленного сервера |
|---|---|
| Синтаксис: | SSLProxyCACertificatePath directory-path |
| Контекст: | настройки сервера, виртуальный хост, раздел прокси |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Раздел прокси разрешен в httpd 2.4.30 и более поздних версиях |
Данная директива устанавливает директорию, где хранятся сертификаты центров сертификации (CA), с которыми взаимодействуют ваши удаленные серверы. Они используются для проверки подлинности сертификата удалённого сервера в процессе проверки подлинности удалённого сервера.
Файлы в этой директории должны быть в формате PEM и к ним осуществляется доступ по хэшированным именам файлов. Поэтому обычно вы не можете просто поместить файлы сертификатов в эту директорию: вам также необходимо создать символические ссылки с именами hash-value.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 также выполнялась успешно, даже когда CRL не были найдены ни в одном из расположений, настроенных с помощью SSLProxyCARevocationFile или SSLProxyCARevocationPath. С введением этой директивы поведение было изменено: при включённой проверке CRL должны быть присутствовать для успешной проверки, в противном случае она завершится с ошибкой "unable to get certificate CRL".
Пример
SSLProxyCARevocationCheck chain
Директива SSLProxyCARevocationFile
| Описание: | Файл, содержащий конкатенированные PEM-кодированные CRL авторизованных центров сертификации (CA) для аутентификации удаленного сервера |
|---|---|
| Синтаксис: | SSLProxyCARevocationFile file-path |
| Контекст: | конфигурация сервера, виртуальный хост, раздел прокси |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Контекст раздела прокси разрешен в httpd 2.4.30 и более поздних версиях |
Данная директива устанавливает общий файл, в котором можно собрать списки отозванных сертификатов (CRL) центров сертификации (CA), с которыми взаимодействуют удаленные серверы. Они используются для аутентификации удаленных серверов. Такой файл представляет собой просто конкатенацию различных PEM-кодированных файлов CRL в порядке приоритета. Это можно использовать альтернативно и/или дополнительно к SSLProxyCARevocationPath.
Пример
SSLProxyCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle-remote-server.crl"
Директива SSLProxyCARevocationPath
| Описание: | Директория PEM-кодированных CRL авторизованных центров сертификации (CA) для аутентификации удаленного сервера |
|---|---|
| Синтаксис: | 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). SSLProxyCheckPeerCN устарела и заменена на SSLProxyCheckPeerName в релизе 2.4.5 и более поздних версиях.
Во всех релизах с 2.4.5 по 2.4.20 установка SSLProxyCheckPeerName off было достаточно для активации этого поведения (поскольку значение SSLProxyCheckPeerCN по умолчанию было on). В этих релизах обе директивы должны быть установлены в off для полного отключения проверки имени сертификата удалённого сервера. Многие пользователи сообщали, что это очень запутанно.
Начиная с релиза 2.4.21, все конфигурации, которые включают любой из SSLProxyCheckPeerName или SSLProxyCheckPeerCN вариантов, будут использовать новое поведение SSLProxyCheckPeerName, а все конфигурации, которые отключают любой из SSLProxyCheckPeerName или SSLProxyCheckPeerCN вариантов, подавят всю проверку имени сертификата удалённого сервера. Только следующие конфигурации будут вызывать проверку имени сертификата удалённого сервера по старой схеме в 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).
Поддерживается подстановка подстановочных знаков в некоторых случаях: запись типа dNSName в subjectAltName или атрибуты CN, начинающиеся с *., будут соответствовать любому имени хоста с тем же количеством элементов имени и тем же суффиксом. Например, *.example.org будет соответствовать foo.example.org, но не будет соответствовать foo.bar.example.org, так как количество элементов в соответствующих именах хостов отличается.
Эта функция была введена в версии 2.4.5 и заменила поведение директивы SSLProxyCheckPeerCN, которая проверяла только точное значение первого атрибута CN по отношению к имени хоста. Однако многие пользователи были сбиты с толку поведением использования этих директив по отдельности, поэтому взаимное поведение директив SSLProxyCheckPeerName и SSLProxyCheckPeerCN было улучшено в релизе 2.4.21. См. описание директивы 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). SSLProxyEngine не требуется для включения прокси-сервера для перенаправления запросов SSL/TLS.
Пример
<VirtualHost _default_:443>
SSLProxyEngine on
#...
</VirtualHost> Директива SSLProxyMachineCertificateChainFile
| Описание: | Файл, содержащий конкатенированные PEM-кодированные сертификаты CA, которые прокси будет использовать для выбора сертификата |
|---|---|
| Синтаксис: | SSLProxyMachineCertificateChainFile filename |
| Контекст: | конфигурация сервера, виртуальный хост, раздел прокси |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Контекст раздела прокси разрешен в httpd 2.4.30 и более поздних версиях |
Эта директива устанавливает общий файл, в котором хранится цепочка сертификатов для всех используемых клиентских сертификатов. Эта директива потребуется, если удалённый сервер предоставляет список сертификатов CA, которые не являются прямыми подписантами ни одного из настроенных клиентских сертификатов.
Этот указанный файл представляет собой просто конкатенацию различных PEM-кодированных файлов сертификатов. При запуске будет проверено каждый настроенный клиентский сертификат, и будет построена цепочка доверия.
Предупреждение о безопасности
Если эта директива включена, все сертификаты в файле будут считаться надёжными, как если бы они также были в SSLProxyCACertificateFile.
Пример
SSLProxyMachineCertificateChainFile "/usr/local/apache2/conf/ssl.crt/proxyCA.pem"
Директива SSLProxyMachineCertificateFile
| Описание: | Файл, содержащий конкатенированные PEM-закодированные клиентские сертификаты и ключи, используемые прокси-сервером |
|---|---|
| Синтаксис: | SSLProxyMachineCertificateFile filename |
| Контекст: | конфигурация сервера, виртуальный хост, раздел прокси |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Контекст раздела прокси разрешен в httpd 2.4.30 и более поздних версиях |
Данная директива задаёт один файл, в котором хранятся сертификаты и ключи, используемые для аутентификации прокси-сервера по отношению к удалённым серверам.
Указанный файл представляет собой просто конкатенацию различных файлов сертификатов в PEM-кодировке. Используйте эту директиву как альтернативу или дополнение к SSLProxyMachineCertificatePath. Указанный файл может содержать любое количество пар клиентского сертификата и связанного с ним закрытого ключа. Каждая пара может быть указана в порядке (сертификат, ключ) или (ключ, сертификат). Если файл включает в себя сертификат, не являющийся листом, или любую несовпадающую пару ключ-сертификат, при запуске будет выдано сообщение об ошибке конфигурации.
При запросе предоставления клиентского сертификата удалённым сервером, сервер должен предоставить список допустимых имён центров сертификации в запросе. Если такой список не предоставлен, mod_ssl будет использовать первый настроенный клиентский сертификат/ключ. Если список имён ЦС предоставлен, mod_ssl будет перебирать этот список и пытаться найти настроенный клиентский сертификат, выданный либо напрямую этим ЦС, либо косвенно через любое количество промежуточных сертификатов ЦС. Цепочка промежуточных сертификатов ЦС может быть построена из тех, что настроены с SSLProxyMachineCertificateChainFile. Затем первый соответствующий настроенный сертификат будет предоставлен в ответ на запрос.
Если список имён ЦС предоставлен удалённым сервером и не найдено соответствующего клиентского сертификата, mod_ssl не предоставит клиентский сертификат, что, скорее всего, приведёт к сбою рукопожатия 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, ...
Эта директива задаёт общее требование доступа, которое должно быть выполнено для разрешения доступа. Это очень мощная директива, так как спецификация требования — произвольное логическое выражение, содержащее любое количество проверок доступа.
Выражение должно соответствовать следующему синтаксису (представленному в формате BNF):
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
| Описание: | Запретить доступ, когда SSL не используется для HTTP-запроса |
|---|---|
| Синтаксис: | 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 неизвестный пользовательский seed |
|---|---|
| Синтаксис: | SSLSRPUnknownUserSeed secret-string |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Доступно в httpd 2.4.4 и более поздних версиях, если используется OpenSSL 1.0.1 или более поздняя версия |
Эта директива устанавливает seed, используемый для подделки параметров пользователя 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 stapling |
|---|---|
| Синтаксис: | SSLStaplingCache type |
| Контекст: | конфигурация сервера |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Доступно при использовании OpenSSL 0.9.8h или более поздней версии |
Настраивает кеш, используемый для хранения ответов OCSP, которые включаются в TLS рукопожатие, если SSLUseStapling включено. Настройка кеша обязательна для OCSP stapling. За исключением none и nonenotnull, поддерживаются те же типы хранения, что и с SSLSessionCache.
Директива SSLStaplingErrorCacheTimeout
| Описание: | Количество секунд до истечения срока действия недействительных ответов в кеше OCSP stapling |
|---|---|
| По умолчанию: | SSLStaplingErrorCacheTimeout 600 |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Доступно при использовании OpenSSL 0.9.8h или более поздней версии |
Устанавливает время ожидания в секундах до истечения срока действия недействительных ответов в кеше OCSP stapling (настроенном с помощью SSLStaplingCache). Чтобы установить время ожидания кеша для действительных ответов, см. SSLStaplingStandardCacheTimeout.
Директива SSLStaplingFakeTryLater
| Описание: | Сгенерировать ответы «попробуйте позже» для неудачных запросов OCSP stapling |
|---|---|
| По умолчанию: | SSLStaplingFakeTryLater on |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Доступно при использовании OpenSSL 0.9.8h или более поздней версии |
При включении и при неудаче запроса к отвечающему на OCSP для целей stapling, mod_ssl сгенерирует ответ «попробуйте позже» для клиента. Действительно только если 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, связанных со стаплированием (например, ответы с общим статусом, отличным от «успешный», ответы с состоянием сертификата, отличным от «хороший», просроченные ответы и т. д.). Если установлено значение off, в TLS-рукопожатие будут включены только ответы, указывающие на статус сертификата «хороший».
Директива SSLStaplingStandardCacheTimeout
| Описание: | Количество секунд до истечения срока действия ответов в кэше OCSP стаплирования |
|---|---|
| Синтаксис: | SSLStaplingStandardCacheTimeout seconds |
| По умолчанию: | SSLStaplingStandardCacheTimeout 3600 |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Доступно при использовании OpenSSL 0.9.8h или более поздних версий |
Устанавливает таймаут в секундах, прежде чем ответы в кэше OCSP стаплирования (настроенном через SSLStaplingCache) истекут. Эта директива применяется к действительным ответам, в то время как SSLStaplingErrorCacheTimeout используется для управления таймаутом для недопустимых/недоступных ответов.
Директива SSLStrictSNIVHostCheck
| Описание: | Разрешить клиентам без SNI доступ к виртуальному хосту по имени. |
|---|---|
| Синтаксис: | SSLStrictSNIVHostCheck on|off |
| По умолчанию: | SSLStrictSNIVHostCheck off |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_ssl |
| Совместимость: | Доступно в Apache 2.2.12 и более поздних версиях |
Данная директива устанавливает, разрешено ли клиентам без SNI обращаться к виртуальному хосту по имени. Если значение установлено в on в виртуальном хосте по умолчанию, клиентам, не поддерживающим SNI, не будет разрешен доступ к любому виртуальному хосту, относящемуся к данной комбинации IP/порта. Если значение установлено в on в любом другом виртуальном хосте, клиентам, не поддерживающим SNI, не будет разрешен доступ к данному виртуальному хосту.
Этот параметр доступен только если httpd был скомпилирован с поддержкой SNI в версии OpenSSL.
Пример
SSLStrictSNIVHostCheck on
Директива SSLUserName
| Описание: | Имя переменной для определения имени пользователя |
|---|---|
| Синтаксис: | SSLUserName varname |
| Контекст: | конфигурация сервера, каталог, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_ssl |
Эта директива устанавливает поле «пользователь» в объекте запроса 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 стаплирование, как определено расширением «Certificate Status Request» TLS, указанным в RFC 6066. При включении (и запросе клиентом) mod_ssl включит в TLS-рукопожатие ответ OCSP для собственного сертификата. Настройка SSLStaplingCache является необходимым условием для включения OCSP стаплирования.
OCSP стаплирование освобождает клиента от запроса ответчика OCSP самостоятельно, но следует отметить, что согласно спецификации RFC 6066, ответ сервера CertificateStatus может содержать только один ответ OCSP для одного сертификата. Для серверных сертификатов с промежуточными сертификатами CA в цепочке (типичный случай в наши дни) стаплирование в текущей реализации, следовательно, лишь частично достигает заявленной цели «экономии раундов запросов и ресурсов» — см. также RFC 6961 (Расширение TLS Multiple Certificate Status).
Когда OCSP стаплирование включено, используется мьютекс ssl-stapling для управления доступом к кэшу OCSP стаплирования, чтобы предотвратить повреждение, и используется мьютекс 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
| Описание: | Максимальная глубина сертификатов CA при проверке сертификатов клиента |
|---|---|
| Синтаксис: | SSLVerifyDepth number |
| По умолчанию: | SSLVerifyDepth 1 |
| Контекст: | конфигурация сервера, виртуальный хост, директория, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Расширение |
| Модуль: | mod_ssl |
Эта директива задаёт, насколько глубоко mod_ssl должен проверять сертификат, прежде чем принять решение о том, что у клиента недействительный сертификат. Обратите внимание, что эта директива может использоваться как в контексте всего сервера, так и в контексте каждой директории. В контексте сервера она применяется к процессу проверки клиента, используемому в стандартном рукопожатии SSL при установлении соединения. В контексте директории она вынуждает переподключение SSL с переконфигурированной глубиной проверки клиента после обработки запроса HTTP, но перед отправкой ответа HTTP.
Глубина фактически является максимальным количеством промежуточных сертификатов выдачи (т.е. количество сертификатов CA, которое максимально разрешено проверять при проверке сертификата клиента). Глубина 0 означает, что принимаются только самозаверенные сертификаты клиента, глубина 1 по умолчанию означает, что сертификат клиента может быть самозаверенным или должен быть подписан CA, который напрямую известен серверу (т.е. сертификат CA находится в 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