Apache 模块 mod_ssl

Description: 使用安全套接字层(SSL)和传输层安全性(TLS)协议的强大加密
Status: Extension
Module Identifier: ssl_module
Source File: mod_ssl.c

Summary

该模块为 Apache HTTP Server 提供 SSL v3 和 TLS v1.x 支持。不再支持 SSL v2.

该模块依靠OpenSSL提供加密引擎。

SSL documentation中提供了更多详细信息,讨论和示例。

Environment Variables

可以配置该模块以提供几项 SSL 信息,作为 SSI 和 CGI 命名空间的附加环境变量。由于性能原因,默认情况下不提供此信息。 (请参见下面的SSLOptions StdEnvVars.)下表列出了生成的变量。为了向后兼容,也可以使用其他名称提供该信息。在Compatibility章中查找有关兼容性变量的详细信息。

Variable Name: Value Type: Description:
HTTPS flag 正在使用 HTTPS。
SSL_PROTOCOL string SSL 协议版本(SSLv3,TLSv1,TLSv1.1,TLSv1.2)
SSL_SESSION_ID string 十六进制编码的 SSL 会话 ID
SSL_SESSION_RESUMED string 初始或恢复的 SSL 会话。注意:如果正在使用 HTTP KeepAlive,则可以通过同一(初始或恢复)SSL 会话处理多个请求
SSL_SECURE_RENEG string true(如果支持安全重新协商),否则false
SSL_CIPHER string 密码规范名称
SSL_CIPHER_EXPORT string true如果密码是导出密码
SSL_CIPHER_USEKEYSIZE number 密码位数(实际使用)
SSL_CIPHER_ALGKEYSIZE number 密码位数(可能)
SSL_COMPRESS_METHOD string 协商 SSL 压缩方法
SSL_VERSION_INTERFACE string mod_ssl 程序版本
SSL_VERSION_LIBRARY string OpenSSL 程序版本
SSL_CLIENT_M_VERSION string Client 端证书的版本
SSL_CLIENT_M_SERIAL string Client 端证书的序列号
SSL_CLIENT_S_DN string Client 证书中的主题 DN
SSL_CLIENT_S_DN_ * x509 * string Client 的主题 DN 的组成部分
SSL_CLIENT_SAN_Email_ * n * string Client 端证书的 subjectAltName 扩展条目,类型为 rfc822Name
SSL_CLIENT_SAN_DNS_ * n * string Client 端证书的 dNSName 类型的 subjectAltName 扩展条目
SSL_CLIENT_SAN_OTHER_msUPN_ * n * string Client 端证书的 subjectAltName 扩展条目,其类型为 otherName,Microsoft 用户主体名称形式(OID 1.3.6.1.4.1.311.20.2.3)
SSL_CLIENT_I_DN string Client 证书的发行人 DN
SSL_CLIENT_I_DN_ * x509 * string Client 发行人 DN 的组成部分
SSL_CLIENT_V_START string Client 证书的有效期(开始时间)
SSL_CLIENT_V_END string Client 证书的有效期(结束时间)
SSL_CLIENT_V_REMAIN string 直到 Client 的证书过期的天数
SSL_CLIENT_A_SIG string 用于 Client 证书签名的算法
SSL_CLIENT_A_KEY string 用于 Client 证书公钥的算法
SSL_CLIENT_CERT string PEM 编码的 Client 证书
SSL_CLIENT_CERT_CHAIN_ * n * string Client 端证书链中的 PEM 编码证书
SSL_CLIENT_CERT_RFC4523_CEA string 证书的序列号和颁发者。格式与 RFC4523 中的 CertificateExactAssertion 的格式匹配
SSL_CLIENT_VERIFY string NONESUCCESSGENEROUSFAILED: 原因
SSL_SERVER_M_VERSION string 服务器证书的版本
SSL_SERVER_M_SERIAL string 服务器证书的序列号
SSL_SERVER_S_DN string 服务器证书中的主题 DN
SSL_SERVER_SAN_Email_ * n * string 服务器证书的 subjectAltName 扩展条目,类型为 rfc822Name
SSL_SERVER_SAN_DNS_ * n * string 服务器证书的 dNSName 类型的 subjectAltName 扩展条目
SSL_SERVER_SAN_OTHER_dnsSRV_ * n * string 服务器证书的 subjectAltName 扩展条目,其类型为 otherName,SRVName 形式(OID 1.3.6.1.5.5.7.8.7,RFC 4985)
SSL_SERVER_S_DN_ * x509 * string 服务器的主题 DN 的组件
SSL_SERVER_I_DN string 服务器证书的颁发者 DN
SSL_SERVER_I_DN_ * x509 * string 服务器的发行者 DN 的组件
SSL_SERVER_V_START string 服务器证书的有效性(开始时间)
SSL_SERVER_V_END string 服务器证书的有效期(结束时间)
SSL_SERVER_A_SIG string 用于服务器证书签名的算法
SSL_SERVER_A_KEY string 用于服务器证书公钥的算法
SSL_SERVER_CERT string PEM 编码的服务器证书
SSL_SRP_USER string SRP username
SSL_SRP_USERINFO string SRP 用户信息
SSL_TLS_SNI string SNI TLS 扩展的内容(如果 ClientHello 提供)

在 httpd 2.4.32 和更高版本中,可以将可选的* _RAW 后缀添加到 DN 组件的 x509 *中,以禁止将属性值转换为 UTF-8.必须将其放置在索引后缀(如果有)之后。例如,可以使用SSL_SERVER_S_DN_OU_RAWSSL_SERVER_S_DN_OU_0_RAW

** _ DN *变量的格式在 Apache HTTPD 2.3.11 中已更改。有关详情,请参见SSLOptionsLegacyDNStringFormat选项。

SSL_CLIENT_V_REMAIN仅在 2.1 版和更高版本中可用。

SSLRequire表达式或自定义日志格式中也可以使用许多其他环境变量:

Note

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

在这些情况下,也可以使用两种特殊格式:

自定义日志格式

mod_ssl内置到 Apache 或至少已加载(在 DSO 情况下)时,mod_log_config自定义日志格式存在附加功能。首先有一个额外的```+100+``+101+`''eXtension 格式函数,可用于扩展任何模块提供的任何变量,尤其是上表中可以找到的 mod_ssl 提供的变量。

为了向后兼容,还提供了一个特殊的```+102+``+103+`''加密格式功能。 Compatibility章提供了有关此功能的信息。

Example

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

这些格式甚至可以在不设置SSLOptions指令的StdEnvVars选项的情况下工作。

Request Notes

mod_ssl为请求设置“Comments”,可在mod_log_config中使用%{name}n格式字符串在日志中使用。

支持的 Comments 如下:

表达式解析器扩展

mod_ssl内置到 Apache 中或至少已加载(在 DSO 情况下)时,mod_ssl提供的任何variables都可以用于ap_expr 表达式解析器的表达式中。可以使用语法``````+139++140+ * varname * )''。

示例(使用 mod_headers)

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

此功能甚至无需设置SSLOptions指令的StdEnvVars选项就可以使用。

与 Require 一起使用的授权提供者

mod_ssl提供了一些身份验证提供程序,可与mod_authz_coreRequire指令一起使用。

Require ssl

如果未使用 SSL 加密连接,则ssl提供程序将拒绝访问。这类似于SSLRequireSSL指令。

Require ssl

Require ssl-verify-client

如果使用有效的 Client 端证书对用户进行身份验证,则ssl提供程序将允许访问。仅在SSLVerifyClient optional有效时才有用。

如果用户通过 Client 端证书或用户名和密码进行了身份验证,则以下示例授予访问权限。

Require ssl-verify-client
Require valid-user

SSLCACertificateFile Directive

Description: 用于 Client 端身份验证的串联 PEM 编码的 CA 证书的文件
Syntax: SSLCACertificateFile file-path
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

该伪指令设置“多合一”文件,您可以在其中汇编与您的“Client”进行 Transaction 的证书颁发机构的证书(CA)。这些用于 Client 端身份验证。按照优先 Sequences,此文件只是各种 PEM 编码的证书文件的串联。可以替代和/或附加使用SSLCACertificatePath

Example

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

SSLCACertificatePath Directive

Description: 用于 Client 端身份验证的 PEM 编码的 CA 证书目录
Syntax: SSLCACertificatePath directory-path
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

该伪指令设置目录,在该目录中保留与您打交道的 Client 的证书颁发机构证书(CA)。这些用于验证 Client 端身份验证上的 Client 端证书。

此目录中的文件必须经过 PEM 编码,并可以通过哈希文件名进行访问。因此,通常不能只将证书文件放在此处:还必须创建名为* hash-value * .N的符号链接。并且您应该始终确保该目录包含适当的符号链接。

Example

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

SSLCADNRequestFile Directive

Description: 连接的 PEM 编码的 CA 证书文件,用于定义可接受的 CA 名称
Syntax: SSLCADNRequestFile file-path
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

当 mod_ssl 请求 Client 端证书时,“可接受的证书颁发机构名称”列表将通过 SSL 握手发送给 Client 端。Client 端可以使用这些 CA 名称从可用的证书中选择适当的 Client 端证书。

如果没有给出指令SSLCADNRequestPathSSLCADNRequestFile,则发送给 Client 端的可接受的 CA 名称的集合是SSLCACertificateFileSSLCACertificatePath指令给出的所有 CA 证书的名称;换句话说,实际上将用于验证 Client 端证书的 CA 的名称。

在某些情况下,能够发送一组与用于验证 Client 端证书的实际 CA 不同的可接受的 CA 名称很有用-例如,如果 Client 端证书是由中间 CA 签名的。在这种情况下,可以使用SSLCADNRequestPath和/或SSLCADNRequestFile。然后,从这对指令指定的目录和/或文件中的完整证书集中获取可接受的 CA 名称。

SSLCADNRequestFile必须指定一个* all-in-one *文件,其中包含一系列 PEM 编码的 CA 证书。

Example

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

SSLCADNRequestPath Directive

Description: 用于定义可接受的 CA 名称的 PEM 编码的 CA 证书目录
Syntax: SSLCADNRequestPath directory-path
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

此可选指令可用于指定一组可接受的 CA 名称,这些名称将在请求 Client 端证书时发送给 Client 端。有关更多详细信息,请参见SSLCADNRequestFile指令。

此目录中的文件必须经过 PEM 编码,并可以通过哈希文件名进行访问。因此,通常不能只将证书文件放在此处:还必须创建名为* hash-value * .N的符号链接。并且您应该始终确保该目录包含适当的符号链接。

Example

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

SSLCARevocationCheck Directive

Description: 启用基于 CRL 的吊销检查
Syntax: SSLCARevocationCheck chain|leaf|none [flags ...]
Default: SSLCARevocationCheck none
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 可选* flag *在 httpd 2.4.21 或更高版本中可用

启用证书吊销列表(CRL)检查。必须配置SSLCARevocationFileSSLCARevocationPath中的至少一个。设置为chain(推荐设置)时,CRL 检查将应用于链中的所有证书,而将其设置为leaf则将检查限制为最终实体证书。

可用的* flag *是:

在版本 2.3.15 之前,如果在用SSLCARevocationFileSSLCARevocationPath配置的任何位置都未找到已检查证书的 CRL,则 mod_ssl 中的 CRL 检查也成功。

随着SSLCARevocationFile的引入,行为已更改:默认情况下使用chainleaf,必须存在 CRL **才能成功进行验证-否则它将失败,并出现"unable to get certificate CRL"错误。

Example

SSLCARevocationCheck chain

与 2.2 版的兼容性

SSLCARevocationCheck chain no_crl_for_cert_ok

SSLCARevocationFile Directive

Description: 用于 Client 端身份验证的串联 PEM 编码的 CA CRL 文件
Syntax: SSLCARevocationFile file-path
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

该指令设置“多合一”文件,您可以在其中汇编要处理其“Client”的证书颁发机构(CA)的证书吊销列表(CRL)。这些用于 Client 端身份验证。按照优先 Sequences,此类文件只是各种 PEM 编码的 CRL 文件的串联。可以替代和/或附加使用SSLCARevocationPath

Example

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

SSLCARevocationPath Directive

Description: 用于 Client 端身份验证的 PEM 编码的 CA CRL 目录
Syntax: SSLCARevocationPath directory-path
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

此伪指令设置目录,在该目录中保留与您处理其 Client 的证书颁发机构(CA)的证书吊销列表(CRL)。这些用于撤销 Client 端身份验证上的 Client 端证书。

此目录中的文件必须经过 PEM 编码,并可以通过哈希文件名进行访问。因此,通常您不仅要将 CRL 文件放在此处。另外,您必须创建名为* hash-value * .rN的符号链接。并且您应该始终确保该目录包含适当的符号链接。

Example

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

SSLCertificateChainFile Directive

Description: PEM 编码的服务器 CA 证书文件
Syntax: SSLCertificateChainFile file-path
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

SSLCertificateChainFile is deprecated

SSLCertificateChainFile扩展为也从服务器证书文件加载中间 CA 证书时,SSLCertificateChainFile在版本 2.4.8 中已过时。

此伪指令设置可选的* all-in-one *文件,您可以在其中组装构成服务器证书的证书链的证书颁发机构(CA)的证书。这从服务器证书的颁发 CA 证书开始,并且可以扩展到根 CA 证书。这样的文件只是各种 PEM 编码的 CA 证书文件的串联,通常以证书链 Sequences 排列。

应当与SSLCACertificatePath交替使用和/或附加使用SSLCACertificatePath来显式构建除服务器证书之外还发送到浏览器的服务器证书链。使用 Client 端身份验证时,避免与 CA 证书冲突特别有用。因为尽管将服务器证书链的 CA 证书放入SSLCACertificatePath对证书链结构具有相同的作用,但是它具有副作用,即在 Client 端身份验证中也接受由同一 CA 证书颁发的 Client 端证书。

但请注意:仅在使用基于单个 RSA DSA 的服务器证书时,提供证书链才有效。如果您使用的是耦合的 RSA DSA 证书对,则只有在两个证书实际上都使用相同*证书链的情况下,此方法才有效。在这种情况下,其他浏览器会感到困惑。

Example

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

SSLCertificateFile Directive

Description: 服务器 PEM 编码的 X.509 证书数据文件或令牌标识符
Syntax: SSLCertificateFile file-path|certid
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: certid 在 2.4.42 及更高版本中可用。

该指令指向带有 PEM 格式的证书数据的文件,或指向通过配置的加密令牌的证书标识符的文件。如果使用的是 PEM 文件,则该文件至少必须包含最终实体(叶子)证书。该指令可以多次使用(引用不同的文件名)以支持服务器认证的多种算法-通常为 RSA,DSA 和 ECC。支持的算法数量取决于用于 mod_ssl 的 OpenSSL 版本:在 1.0.0 或更高版本中,openssl list-public-key-algorithms将输出支持的算法列表,另请参阅以下有关 1.0.2 之前的 OpenSSL 版本的局限性以及方法的说明。在他们周围工作。

这些文件还可以包括从叶到根排序的中间 CA 证书。版本 2.4.8 和更高版本支持此功能,并且已淘汰SSLCertificateChainFile。与 OpenSSL 1.0.2 或更高版本一起运行时,这允许在每个证书的基础上配置中间 CA 链。

还可以将自定义 DH 参数和临时键的 EC 曲线名称添加到使用SSLCertificateFile配置的第一个文件的末尾。 2.4.7 版或更高版本支持此功能。可以使用命令openssl dhparamopenssl ecparam生成此类参数。可以按原样将参数添加到第一个证书文件的末尾。由于第一个文件与身份验证算法类型无关,因此只能将第一个文件用于自定义参数。

最后,最终实体证书的私钥也可以添加到证书文件中,而不必使用单独的SSLCertificateKeyFile指令。不鼓励这种做法。如果使用它,则必须在使用单独密钥文件的证书之后配置使用这种嵌入式密钥的证书文件。如果私钥已加密,则在启动时会强制 Importing 密码对话框。

作为将证书和私钥存储在文件中的替代方法,可以使用证书标识符来标识存储在令牌中的证书。当前,只有PKCS#11 URIs被识别为证书标识符,并且可以与 OpenSSL pkcs11引擎一起使用。如果省略SSLCertificateKeyFile,则可以通过SSLCertificateFile指定的单个标识符加载证书和私钥。

DH parameter interoperability with primes > 1024 bit

从版本 2.4.7 开始,mod_ssl 使用标准 DH 参数,其素数长度为 2048、3072 和 4096 位,附加素数长度为 6144 和 8192 位,从版本 2.4.10 开始(从RFC 3526开始),并将其分发给 Client 端基于证书的 RSA/DSA 密钥的长度。特别是对于基于 Java 的 Client 端(Java 7 或更早版本),这可能会导致握手失败-有关解决此类问题的信息,请参见FAQ answer

Default DH parameters when using multiple certificates and OpenSSL versions prior to 1.0.2

当使用多个证书来支持不同的身份验证算法(例如 RSA,DSA,但主要是 ECC)和 1.0.2 之前的 OpenSSL 时,建议使用自定义 DH 参数(最好),方法是将它们添加到第一个证书文件中(如所述)以上),或 OrderSSLCertificateFile指令,以便将 RSA/DSA 证书“放在” ECC **之后。

这是由于旧版本的 OpenSSL 的限制所致,该限制不允许 Apache HTTP Server 在握手时(必须将 DH 参数发送给对等方)确定当前选择的证书,而始终提供最后配置的证书。因此,服务器可能会基于错误证书密钥的长度来选择默认的 DH 参数(ECC 密钥比 RSA/DSA 密钥小得多,并且它们的长度与选择 DH 素数无关)。

由于自定义 DH 参数始终优先于默认参数,因此可以通过创建和配置它们(如上所述)并使用自定义/合适的长度来避免此问题。

Example

# 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 Directive

Description: 服务器 PEM 编码的私钥文件
Syntax: SSLCertificateKeyFile file-path|keyid
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: keyid 在 2.4.42 及更高版本中可用。

该指令指向服务器的 PEM 编码的私钥文件,或指向通过配置的加密令牌的密钥 ID。如果包含的私钥已加密,则在启动时会强制 Importing 密码对话框。

该指令可以多次使用(引用不同的文件名)以支持服务器认证的多种算法。对于每个SSLCertificateKeyFile指令,必须有一个匹配的SSLCertificateFile指令。

私钥也可以与SSLCertificateFile给出的文件中的证书结合使用,但是强烈建议不要这样做。如果使用它,则必须在使用单独密钥文件的证书之后配置使用这种嵌入式密钥的证书文件。

作为将私钥存储在文件中的替代方法,可以使用密钥标识符来标识存储在令牌中的私钥。当前,只有PKCS#11 URIs被识别为私钥标识符,并且可以与 OpenSSL pkcs11引擎一起使用。

Example

# 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 Directive

Description: 密码套件可用于 SSL 握手中的协商
Syntax: SSLCipherSuite [protocol] cipher-spec
Default: SSLCipherSuite DEFAULT (depends on OpenSSL version)
Context: 服务器配置,虚拟主机,目录,.htaccess
Override: AuthConfig
Status: Extension
Module: mod_ssl

此复杂指令使用冒号分隔的* cipher-spec *字符串(由 OpenSSL 密码规范组成)来配置允许 Client 端在 SSL 握手阶段进行协商的 Cipher Suite。可选的协议说明符可以将 Cipher Suite 配置为特定的 SSL 版本。可能的值包括所有 SSL 协议(包括 TLSv1.2)及以下的“ SSL”。

注意,此伪指令可以在每个服务器和每个目录上下文中使用。在每服务器上下文中,当构建连接时,它适用于标准 SSL 握手。在按目录的上下文中,它会在读取 HTTP 请求之后但在发送 HTTP 响应之前,通过重新配置的 Cipher Suite 强制进行 SSL 重新协商。

如果 SSL 库支持 TLSv1.3(OpenSSL 1.1.1 和更高版本),则可以使用协议说明符“ TLSv1.3”为该协议配置密码套件。由于 TLSv1.3 不提供重新协商,因此不允许在目录上下文中为其指定密码。

有关 TLSv1.3 密码名称的列表,请参见OpenSSL 文档

SSL 密码也可以是导出密码。不再支持 SSLv2 密码。要指定要使用的密码,可以一次指定所有密码,也可以使用别名指定密码的首选项和 Sequences(请参阅Table 1)。实际可用的密码和别名取决于所使用的 openssl 版本。较新的 openssl 版本可能包含其他密码。

Tag Description
密钥交换算法:
kRSA RSA 密钥交换
kDHr Diffie-Hellman 与 RSA 密钥的密钥交换
kDHd Diffie-Hellman 与 DSA 密钥的密钥交换
kEDH 临时(临时密钥)Diffie-Hellman 密钥交换(无证书)
kSRP 安全远程密码(SRP)密钥交换
Authentication Algorithm:
aNULL No authentication
aRSA RSA authentication
aDSS DSS authentication
aDH Diffie-Hellman authentication
密码编码算法:
eNULL No encryption
NULL eNULL 的别名
AES AES encryption
DES DES encryption
3DES Triple-DES encryption
RC4 RC4 encryption
RC2 RC2 encryption
IDEA IDEA encryption
* MAC 摘要算法*:
MD5 MD5 哈希函数
SHA1 SHA1 哈希函数
SHA SHA1 的别名
SHA256 SHA256 哈希函数
SHA384 SHA384 哈希函数
Aliases:
SSLv3 所有 SSL 3.0 版密码
TLSv1 所有 TLS 版本 1.0 密码
EXP 所有 Export 密码
EXPORT40 仅所有 40 位导出密码
EXPORT56 仅所有 56 位导出密码
LOW 所有低强度密码(无 Export,单个 DES)
MEDIUM 所有具有 128 位加密的密码
HIGH 所有使用三重 DES 的密码
RSA 所有使用 RSA 密钥交换的密码
DH 所有使用 Diffie-Hellman 密钥交换的密码
EDH 所有使用临时 Diffie-Hellman 密钥交换的密码
ECDH 椭圆曲线 Diffie-Hellman 密钥交换
ADH 所有使用匿名 Diffie-Hellman 密钥交换的密码
AECDH 所有使用匿名椭圆曲线 Diffie-Hellman 密钥交换的密码
SRP 使用安全远程密码(SRP)密钥交换的所有密码
DSS 所有使用 DSS 身份验证的密码
ECDSA 所有使用 ECDSA 身份验证的密码
aNULL 所有不使用身份验证的密码

现在变得有趣的是,可以将它们组合在一起以指定要使用的 Sequences 和密码。为了加快速度,某些密码组还具有别名(SSLv3, TLSv1, EXP, LOW, MEDIUM, HIGH)。这些标签可以与前缀结合在一起形成* cipher-spec *。可用的前缀是:

aNULL, eNULL and EXP ciphers are always disabled

从版本 2.4.7 开始,始终禁用 null 和 Export 级密码,因为 mod_ssl 在初始化时无条件地将!aNULL:!eNULL:!EXP添加到任何密码字符串。

一种更简单的方法是使用``````+450++451++452+``+453+`作为哈希算法的密码,因为已被证明是不够的。

$ 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

Table 2中提供了用于 SSL 的特定 RSA 和 DH 密码的完整列表。

Example

SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
Cipher-Tag Protocol Key Ex. Auth. Enc. MAC Type
RSA Ciphers:
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 export
EXP-RC2-CBC-MD5 SSLv3 RSA(512) RSA RC2(40) MD5 export
EXP-RC4-MD5 SSLv3 RSA(512) RSA RC4(40) MD5 export
NULL-SHA SSLv3 RSA RSA None SHA1
NULL-MD5 SSLv3 RSA RSA None MD5
Diffie-Hellman Ciphers:
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 export
EXP-EDH-DSS-DES-CBC-SHA SSLv3 DH(512) DSS DES(40) SHA1 export
EXP-ADH-DES-CBC-SHA SSLv3 DH(512) None DES(40) SHA1 export
EXP-ADH-RC4-MD5 SSLv3 DH(512) None RC4(40) MD5 export

SSLCompression Directive

Description: 在 SSL 级别启用压缩
Syntax: SSLCompression on|off
Default: SSLCompression off
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8 或更高版本,则在 httpd 2.4.3 和更高版本中可用;如果使用 OpenSSL 1.0.0 或更高版本,则虚拟主机范围可用。默认值在版本 2.4.3 中为on

该指令允许在 SSL 级别启用压缩。

Warning

启用压缩会在大多数设置中引起安全问题(所谓的 CRIME 攻击)。

SSLCryptoDevice Directive

Description: 启用加密硬件加速器的使用
Syntax: SSLCryptoDevice engine
Default: SSLCryptoDevice builtin
Context: server config
Status: Extension
Module: mod_ssl

该指令允许使用加密硬件加速器板来减轻某些 SSL 处理开销。仅当 SSL 工具箱是通过“引擎”支持构建的时,才可以使用此伪指令。 OpenSSL 0.9.7 和更高版本默认情况下具有“引擎”支持,必须使用 OpenSSL 0.9.6 的单独的“ -engine”版本。

要发现支持哪些引擎名称,请运行命令“ openssl engine”。

Example

# For a Broadcom accelerator:
SSLCryptoDevice ubsec

SSLEngine Directive

Description: SSL 引擎操作开关
Syntax: SSLEngine on|off|optional
Default: SSLEngine off
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

该指令切换 SSL/TLS 协议引擎的用法。应该在<VirtualHost>部分中使用此功能,以为该虚拟主机启用 SSL/TLS。默认情况下,主服务器和所有已配置的虚拟主机均禁用 SSL/TLS 协议引擎。

Example

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

在 Apache 2.1 和更高版本中,SSLEngine可以设置为optional。这样可以支持RFC 2817,并在 HTTP/1.1 中升级到 TLS。目前,没有网络浏览器支持 RFC 2817.

SSLFIPS Directive

Description: SSL FIPS 模式切换
Syntax: SSLFIPS on|off
Default: SSLFIPS off
Context: server config
Status: Extension
Module: mod_ssl

此伪指令切换 SSL 库 FIPS_mode 标志的用法。它必须在全局服务器上下文中设置,并且不能配置有冲突的设置(先打开 SSLFIPS,然后关闭 SSLFIPS 或类似的设置)。该模式适用于所有 SSL 库操作。

如果 httpd 是针对不支持 FIPS_mode 标志的 SSL 库编译的,则SSLFIPS on将失败。有关在 FIPS 140-2 批准的操作模式下使用 mod_ssl 的特定要求,请参阅 SSL 提供程序库的 FIPS 140-2 安全策略文档。请注意,当所有组件均在适用的安全策略规定的指导下组装和操作时,mod_ssl 本身未经验证,但可以描述为使用 FIPS 140-2 验证的加密模块。

SSLHonorCipherOrder Directive

Description: 偏好服务器密码优先 Sequences 的选项
Syntax: SSLHonorCipherOrder on|off
Default: SSLHonorCipherOrder off
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

在 SSLv3 或 TLSv1 握手期间选择密码时,通常使用 Client 端的首选项。如果启用此指令,则将使用服务器的首选项。

Example

SSLHonorCipherOrder on

SSLInsecureRenegotiation Directive

Description: 支持不安全重新协商的选项
Syntax: SSLInsecureRenegotiation on|off
Default: SSLInsecureRenegotiation off
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8m 或更高版本,则在 httpd 2.2.15 和更高版本中可用

如最初指定的那样,所有版本的 SSL 和 TLS 协议(不超过 TLS/1.2,包括 TLS/1.2)在重新协商期间都容易受到中间人攻击(CVE-2009-3555)。此漏洞使攻击者可以将选定的纯文本“前缀”到 HTTP 请求,如 Web 服务器所看到的。如果 Client 端和服务器均支持,则开发了协议扩展来修复此漏洞。

如果mod_ssl与 OpenSSL 版本 0.9.8m 或更高版本链接,则默认情况下仅支持新协议扩展的 Client 端支持重新协商。如果启用此伪指令,则将允许与旧的(未打补丁的)Client 端进行重新协商,尽管这种方法不安全。

Security warning

如果启用此指令,则 SSL 连接将容易受到CVE-2009-3555中所述的中间人前缀攻击。

Example

SSLInsecureRenegotiation on

可以从 SSI 或 CGI 脚本中使用SSL_SECURE_RENEG环境变量来确定给定的 SSL 连接是否支持安全重新协商。

SSLOCSPDefaultResponder Directive

Description: 设置用于 OCSP 验证的默认响应者 URI
Syntax: SSLOCSPDefaultResponder uri
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

此选项设置要使用的默认 OCSP 响应器。如果未启用SSLOCSPOverrideResponder,则仅当正在验证的证书中未指定响应者 URI 时,才会使用给定的 URI。

SSLOCSPEnable Directive

Description: 启用 Client 端证书链的 OCSP 验证
Syntax: SSLOCSPEnable on|leaf|off
Default: SSLOCSPEnable off
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 模式在 httpd 2.4.34 及更高版本中可用

此选项启用 Client 端证书链的 OCSP 验证。如果启用此选项,则在进行常规验证(包括 CRL 检查)之后,将针对 OCSP 响应者验证 Client 端证书链中的证书。在“叶”模式下,仅 Client 端证书本身将被验证。

所使用的 OCSP 响应程序是从证书本身提取的,或者是通过配置派生的。请参阅SSLOCSPDefaultResponderSSLOCSPOverrideResponder指令。

Example

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

SSLOCSPNoverify Directive

Description: 跳过 OCSP 响应者证书验证
Syntax: SSLOCSPNoverify On/Off
Default: SSLOCSPNoverify Off
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.7 或更高版本,则在 httpd 2.4.26 和更高版本中可用

跳过 OCSP 响应者证书验证,这在测试 OCSP 服务器时非常有用。

SSLOCSPOverrideResponder Directive

Description: 强制使用默认响应者 URI 进行 OCSP 验证
Syntax: SSLOCSPOverrideResponder on|off
Default: SSLOCSPOverrideResponder off
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

此选项强制在 OCSP 证书验证期间使用已配置的默认 OCSP 响应程序,而不管被验证的证书是否引用 OCSP 响应程序。

SSLOCSPProxyURL Directive

Description: 用于 OCSP 请求的代理 URL
Syntax: SSLOCSPProxyURL url
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 在 httpd 2.4.19 及更高版本中可用

此选项允许设置 HTTP 代理的 URL,该 HTTP 代理应用于对 OCSP 响应者的所有查询。

SSLOCSPResponderCertificateFile Directive

Description: 一组受信任的 PEM 编码的 OCSP 响应者证书
Syntax: SSLOCSPResponderCertificateFile file
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.7 或更高版本,则在 httpd 2.4.26 和更高版本中可用

这提供了在 OCSP 响应者证书验证期间要使用的受信任 OCSP 响应者证书的列表。所提供的证书是隐式信任的,无需进一步验证。通常在 OCSP 响应者证书是自签名的或从 OCSP 响应中省略的情况下使用。

SSLOCSPResponderTimeout Directive

Description: OCSP 查询超时
Syntax: SSLOCSPResponderTimeout seconds
Default: SSLOCSPResponderTimeout 10
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

启用SSLOCSPEnable时,此选项设置对 OCSP 响应者的查询超时。

SSLOCSPResponseMaxAge Directive

Description: OCSP 响应的最大允许年龄
Syntax: SSLOCSPResponseMaxAge seconds
Default: SSLOCSPResponseMaxAge -1
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

此选项设置 OCSP 响应的最大允许使用期限(“新鲜度”)。默认值(-1)不强制使用最长期限,这意味着 OCSP 响应只要它们的nextUpdate字段在将来就被视为有效。

SSLOCSPResponseTimeSkew Directive

Description: OCSP 响应验证的最大允许时间偏差
Syntax: SSLOCSPResponseTimeSkew seconds
Default: SSLOCSPResponseTimeSkew 300
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

此选项设置 OCSP 响应的最大允许时间偏斜(在检查其thisUpdatenextUpdate字段时)。

SSLOCSPUseRequestNonce Directive

Description: 在 OCSP 查询中使用随机数
Syntax: SSLOCSPUseRequestNonce on|off
Default: SSLOCSPUseRequestNonce on
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 在 httpd 2.4.10 及更高版本中可用

此选项确定对 OCSP 响应者的查询是否应包含随机数。默认情况下,始终使用查询随机数,并对照响应的随机数进行检查。如果响应者不使用随机数(例如 Microsoft OCSP Responder),则应将此选项设置为off

SSLOpenSSLConfCmd Directive

Description: 通过其* SSL_CONF * API 配置 OpenSSL 参数
Syntax: SSLOpenSSLConfCmd command-name command-value
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 1.0.2 或更高版本,则在 httpd 2.4.8 和更高版本中可用

该指令将 OpenSSL 的* SSL_CONF * API 暴露给 mod_ssl,从而在向 OpenSSL 添加新功能时无需配置其他mod_ssl指令即可灵活配置 OpenSSL 参数。

可用的SSLOpenSSLConfCmd命令集取决于用于mod_ssl的 OpenSSL 版本(至少需要版本 1.0.2)。有关受支持的命令名称的列表,请参见SSL_CONF_cmd(3)手册页中针对 OpenSSL 的受支持的配置文件命令部分。

某些SSLOpenSSLConfCmd命令可以用作现有指令的替代项(例如SSLCipherSuiteSSLProtocol),但是应注意,参数的语法/允许值有时可能会有所不同。

Examples

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 Directive

Description: 配置各种 SSL 引擎运行时选项
Syntax: SSLOptions [+|-]option ...
Context: 服务器配置,虚拟主机,目录,.htaccess
Override: Options
Status: Extension
Module: mod_ssl

此伪指令可用于按目录控制各种运行时选项。通常,如果一个目录可以使用多个SSLOptions,则完全采用最具体的一个。选项不会合并。但是,如果SSLOptions指令上的* all *选项前面带有加号(+)或减号(-),则这些选项将合并。 +之前的所有选项都将添加到当前有效的选项中,并且-之前的所有选项都将从当前有效的选项中删除。

可用的* option *是:

启用此选项后,将创建与 SSL 相关的 CGI/SSI 环境变量的标准集合。由于性能原因,默认情况下禁用此默认设置,因为信息提取步骤是一项相当昂贵的操作。因此,通常只对 CGI 和 SSI 请求启用此选项。

启用此选项后,将创建其他 CGI/SSI 环境变量:SSL_SERVER_CERTSSL_CLIENT_CERTSSL_CLIENT_CERT_CHAIN_ * n ( n * = 0,1,2,..)。它们包含用于当前 HTTPS 连接的服务器和 Client 端的 PEM 编码的 X.509 证书,并且 CGI 脚本可以使用它们对证书进行更深入的检查。此外,还提供了 Client 端证书链的所有其他证书。这会使环境有点膨胀,这就是为什么您必须使用此选项才能按需启用它的原因。

启用此选项后,Client 端 X509 证书的主题专有名称(DN)将转换为 HTTP 基本授权用户名。这意味着可以将标准 Apache 身份验证方法用于访问控制。用户名只是 Client 端 X509 证书的主题(可以通过运行 OpenSSL 的openssl x509命令:openssl x509 -noout -subject -in * certificate * .crt来确定)。请注意,没有从用户那里获得密码。用户文件中的每个条目都需要使用以下密码:``````+809+``''。

请注意,mod_auth_basic中的AuthBasicFake伪指令可以用作伪造基本身份验证的更通用机制,从而可以控制用户名和密码的结构。

SSLRequireSSLSSLRequire成功确定应禁止访问时,这将强制禁止访问。通常默认设置是在使用``````+824+``''的机会了。

当在每个目录上下文中使用 SSL 指令时,这可以优化 SSL 连接重新协商处理。默认情况下,启用严格的方案,其中每目录 SSL 参数的重新配置会导致完全 SSL 重新协商握手。使用此选项时,mod_ssl 会通过进行更精细(但仍很安全)的参数检查来避免不必要的握手。但是,有时这些粒度检查可能不是用户期望的,因此,请仅基于每个目录启用此检查。

此选项影响SSL_{CLIENT,SERVER}_{I,S}_DN变量的值的格式。从 2.3.11 版本开始,Apache HTTPD 默认使用 RFC 2253 兼容格式。这使用逗号作为属性之间的分隔符,允许使用非 ASCII 字符(已转换为 UTF8),使用反斜杠转义各种特殊字符,最后对属性进行排序,并带有“ C”属性。

如果设置了LegacyDNStringFormat,将使用旧格式,该格式首先对“ C”属性进行排序,使用斜杠作为分隔符,并且不以任何一致的方式处理非 ASCII 和特殊字符。

Example

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

SSLPassPhraseDialog Directive

Description: 加密私钥的密码对话框类型
Syntax: SSLPassPhraseDialog type
Default: SSLPassPhraseDialog builtin
Context: server config
Status: Extension
Module: mod_ssl

Apache 启动时,必须读取启用 SSL 的虚拟服务器的各种证书(请参阅SSLCertificateFile)和私钥(请参见SSLCertificateKeyFile)文件。因为出于安全原因,通常会对私钥文件进行加密,所以 mod_ssl 需要向 Management 员查询通行短语以解密这些文件。该查询可以通过两种可以通过* type *配置的方式来完成:

这是默认的情况,在启动时,在 Apache 从终端分离之前,交互式终端对话框会出现。在这里,Management 员必须为每个加密的私钥文件手动 Importing 密码短语。因为可以配置许多启用 SSL 的虚拟主机,所以使用以下重用方案来最小化对话框:加密私钥文件时,将尝试所有已知的通行短语(当然一开始都不存在)。 。如果这些已知的通行短语之一成功,则不会弹出该特定私钥文件的对话框。如果没有成功,则在终端上查询另一个“通行短语”,并记住下一轮(可能可以重复使用)。

这种方案使 mod_ssl 具有最大的灵 Active(因为您可以使用 N 个不同的通行短语来加密 N 个加密的私钥文件-但是,您必须 Importing 所有的通行短语),同时最小化终端对话框(例如,当您使用所有 N 个私钥文件都使用一次通行短语.此通行短语仅被查询一次)。

此模式允许使用外部程序,该程序充当通向特定 Importing 设备的管道。系统会在stdin上向程序发送用于builtin模式的标准提示文本,并期望在stdout上写入密码字符串。如果需要多个密码(或 Importing 了错误的密码),则在返回第一个密码之后将写入其他提示文本,然后必须回写更多密码。

此处配置了一个外部程序,该程序在启动时会为每个加密的私钥文件调用。它由两个参数调用(第一个参数的形式为``````+857++858+''或以 3 开头的整数索引(如果大于(配置了三个键),表示必须将相应的通行短语打印到stdout的服务器和算法。在版本 2.4.8(未发布)和 2.4.9 中,使用一个参数调用它,该字符串的形式为```+861+``+862+`是从零开始的整数),表示服务器,TCP 端口和证书编号。目的是使此外部程序首先运行安全检查,以确保系统不受攻击者的侵害,只有在成功通过这些检查后,它才会提供“通过短语”。

这些安全检查以及通行短语的确定方式都可以随您所愿而复杂。 Mod_ssl 只是定义了接口:一个可执行程序,它在stdout上提供通过短语。或多或少!因此,如果您真的对安全性抱有偏执,那么这里就是您的界面。剩下的任何事情都留给 Management 员练习,因为本地安全要求是如此不同。

上面的重用算法也在这里使用。换句话说:每个唯一的通行短语仅调用一次外部程序。

Example

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

SSLProtocol Directive

Description: 配置可用的 SSL/TLS 协议版本
Syntax: SSLProtocol [+|-]protocol ...
Default: SSLProtocol all -SSLv3 (up to 2.4.16: all)
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl

此伪指令可用于控制新 Connecting 将接受哪个版本的 SSL/TLS 协议。

可用的(不区分大小写)* protocol *是:

这是 Netscape Corporation 的安全套接字层(SSL)协议版本 3.0. 它是 SSLv2 的继承者和 TLSv1 的继承者,但在RFC 7568中已弃用。

这是传输层安全性(TLS)协议,版本 1.0. 它是 SSLv3 的继承者,在RFC 2246中定义。几乎每个 Client 都支持它。

RFC 4346中定义的 TLS 1.0 协议的修订版。

RFC 5246中定义的 TLS 1.1 协议的修订版。

RFC 8446中定义的 TLS 协议的新版本。

这是``````+897++898++899+`)。

Example

SSLProtocol TLSv1

SSLProtocol for name-based virtual hosts

在 OpenSSL 1.1.1 之前,即使服务器名称指示(SNI)允许在 TLS 握手中尽早确定目标虚拟主机,但此时无法切换连接的 TLS 协议版本,因此SSLProtocol已协商始终基于“基本虚拟主机”(基于连接的侦听IP:port上声明的第一个虚拟主机)之一。

从 Apache HTTP 服务器 2.4.42 版开始,在针对 OpenSSL 1.1.1 或更高版本构建/链接时,以及当 Client 端在 TLS 握手中提供 SNI 时,每个(基于名称的)虚拟主机的SSLProtocol可以并且将感到荣幸。

为了与以前的版本兼容,如果在基于名称的虚拟主机中未配置任何SSLProtocol,则仍将应用基本虚拟主机中的SSLProtocol,除非全局配置SSLProtocol,除非在这种情况下应用全局值(后一种情况是比兼容更明智)。

SSLProxyCACertificateFile Directive

Description: 用于远程服务器身份验证的串联 PEM 编码的 CA 证书文件
Syntax: SSLProxyCACertificateFile file-path
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

该指令设置“多合一”文件,您可以在其中汇编要处理其“远程服务器”的证书颁发机构(CA)的证书。这些用于远程服务器身份验证。按照优先 Sequences,此文件只是各种 PEM 编码的证书文件的串联。可以替代和/或附加使用SSLProxyCACertificatePath

Example

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

SSLProxyCACertificatePath Directive

Description: 用于远程服务器身份验证的 PEM 编码的 CA 证书目录
Syntax: SSLProxyCACertificatePath directory-path
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

此伪指令设置目录,在该目录中保留要处理其远程服务器的证书颁发机构证书(CA)。这些用于验证“远程服务器身份验证”上的远程服务器证书。

此目录中的文件必须经过 PEM 编码,并可以通过哈希文件名进行访问。因此,通常不能只将证书文件放在此处:还必须创建名为* hash-value * .N的符号链接。并且您应该始终确保该目录包含适当的符号链接。

Example

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

SSLProxyCARevocationCheck Directive

Description: 为远程服务器身份验证启用基于 CRL 的吊销检查
Syntax: SSLProxyCARevocationCheck chain|leaf|none
Default: SSLProxyCARevocationCheck none
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

启用证书吊销列表(CRL),以检查您处理的远程服务器。必须配置SSLProxyCARevocationFileSSLProxyCARevocationPath中的至少一个。设置为chain(推荐设置)时,CRL 检查将应用于链中的所有证书,而将其设置为leaf则将检查限制为最终实体证书。

When set to chain or leaf, CRLs must be available for successful validation

在 2.3.15 版之前,如果在用SSLProxyCARevocationFileSSLProxyCARevocationPath配置的任何位置都未找到 CRL,则 mod_ssl 中的 CRL 检查也成功。引入此指令后,行为已更改:启用检查后,必须提供 CRL *才能使验证成功-否则它将因"unable to get certificate CRL"错误而失败。

Example

SSLProxyCARevocationCheck chain

SSLProxyCARevocationFile Directive

Description: 用于远程服务器身份验证的串联 PEM 编码的 CA CRL 文件
Syntax: SSLProxyCARevocationFile file-path
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

此伪指令设置“多合一”文件,您可以在其中组装要处理其“远程服务器”的证书颁发机构(CA)的证书吊销列表(CRL)。这些用于远程服务器身份验证。按照优先 Sequences,此类文件只是各种 PEM 编码的 CRL 文件的串联。可以替代和/或附加使用SSLProxyCARevocationPath

Example

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

SSLProxyCARevocationPath Directive

Description: 用于远程服务器身份验证的 PEM 编码的 CA CRL 目录
Syntax: SSLProxyCARevocationPath directory-path
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

此伪指令设置目录,在该目录中保留要处理其远程服务器的证书颁发机构(CA)的证书吊销列表(CRL)。这些用于吊销“远程服务器身份验证”上的远程服务器证书。

此目录中的文件必须经过 PEM 编码,并可以通过哈希文件名进行访问。因此,通常您不仅要将 CRL 文件放在此处。另外,您必须创建名为* hash-value * .rN的符号链接。并且您应该始终确保该目录包含适当的符号链接。

Example

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

SSLProxyCheckPeerCN Directive

Description: 是否检查远程服务器证书的 CN 字段
Syntax: SSLProxyCheckPeerCN on|off
Default: SSLProxyCheckPeerCN on
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

该指令设置是否将远程服务器证书的 CN 字段与请求 URL 的主机名进行比较。如果两者不相等,则会发送 502 状态代码(错误网关)。在版本 2.4.5 和更高版本中,SSLProxyCheckPeerCNSSLProxyCheckPeerName取代。

在所有版本 2.4.5 至 2.4.20 中,设置SSLProxyCheckPeerName off足以启用此行为(因为SSLProxyCheckPeerCN的默认值为on.)在这些版本中,两个指令都必须设置为off才能完全避免远程服务器证书名称验证。许多用户报告这非常令人困惑。

从版本 2.4.21 开始,启用SSLProxyCheckPeerNameSSLProxyCheckPeerCN选项之一的所有配置都将使用新的SSLProxyCheckPeerName行为,而禁用SSLProxyCheckPeerNameSSLProxyCheckPeerCN选项之一的所有配置将禁止所有远程服务器证书名称验证。只有以下配置将触发 2.4.21 及更高版本中的旧证书 CN 比较;

Example

SSLProxyCheckPeerCN on
SSLProxyCheckPeerName off

SSLProxyCheckPeerExpire Directive

Description: 是否检查远程服务器证书是否过期
Syntax: SSLProxyCheckPeerExpire on|off
Default: SSLProxyCheckPeerExpire on
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

该伪指令设置是否检查远程服务器证书是否过期。如果检查失败,则发送 502 状态代码(错误网关)。

Example

SSLProxyCheckPeerExpire on

SSLProxyCheckPeerName Directive

Description: 为远程服务器证书配置主机名检查
Syntax: SSLProxyCheckPeerName on|off
Default: SSLProxyCheckPeerName on
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: Apache HTTP Server 2.4.5 和更高版本<_ 1069> httpd 2.4.30 和更高版本中允许代理部分上下文

当 mod_ssl 充当 SSL Client 端时,此伪指令为服务器证书配置主机名检查。如果来自请求 URI 的主机名与证书主题的 CN 属性之一匹配,或者与 subjectAltName extensions 匹配,则检查将成功。如果检查失败,则 SSL 请求将中止,并返回 502 状态代码(错误网关)。

在特定情况下支持通配符匹配:dNSName 类型的 subjectAltName 条目或以*.开头的 CN 属性将与具有相同数量的名称元素和相同后缀的任何主机名匹配。例如。 *.example.org将匹配foo.example.org,但是将不匹配foo.bar.example.org,因为各个主机名中的元素数量不同。

此功能在 2.4.5 中引入,并取代了SSLProxyCheckPeerCN指令的行为,该指令仅针对主机名测试了第一个 CN 属性中的确切值。但是,许多用户对单独使用这些指令的行为感到困惑,因此SSLProxyCheckPeerNameSSLProxyCheckPeerCN指令的相互行为在版本 2.4.21 中得到了改进。有关原始行为和这些改进的详细信息,请参见SSLProxyCheckPeerCN指令说明。

SSLProxyCipherSuite Directive

Description: 密码套件可用于 SSL 代理握手中的协商
Syntax: SSLProxyCipherSuite [protocol] cipher-spec
Default: SSLProxyCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

等效于SSLCipherSuite,但用于代理连接。请参考SSLCipherSuite以获取更多信息。

SSLProxyEngine Directive

Description: SSL 代理引擎操作开关
Syntax: SSLProxyEngine on|off
Default: SSLProxyEngine off
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

该指令切换 SSL/TLS 协议引擎对代理的使用。通常在<VirtualHost>部分中使用此选项,以启用 SSL/TLS 以在特定虚拟主机中使用代理。默认情况下,禁用 SSL/TLS 协议引擎作为主服务器和所有已配置虚拟主机的代理。

请注意,SSLProxyEngine指令通常不应包含在充当转发代理的虚拟主机中(使用<Proxy>ProxyRequests指令)。 SSLProxyEngine不需要启用转发代理服务器来代理 SSL/TLS 请求。

Example

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

SSLProxyMachineCertificateChainFile Directive

Description: 代理用来选择证书的级联 PEM 编码 CA 证书的文件
Syntax: SSLProxyMachineCertificateChainFile filename
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

此伪指令设置多合一文件,您可以在其中保留所有正在使用的 Client 端证书的证书链。如果远程服务器显示不是配置的 Client 端证书之一的直接签名者的 CA 证书的列表,则需要此伪指令。

引用的文件只是各种 PEM 编码的证书文件的串联。启动后,将检查配置的每个 Client 端证书,并构建信任链。

Security warning

如果启用此伪指令,则文件中的所有证书都将受到信任,就像它们在SSLProxyCACertificateFile中一样。

Example

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

SSLProxyMachineCertificateFile Directive

Description: 代理要使用的级联 PEM 编码的 Client 端证书和密钥的文件
Syntax: SSLProxyMachineCertificateFile filename
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

此伪指令设置多合一文件,您可以在其中保存用于向远程服务器认证代理服务器的证书和密钥。

按照优先 Sequences,此引用文件只是各种 PEM 编码的证书文件的串联。替代SSLProxyMachineCertificatePath或附加使用此伪指令。

Warning

当前不支持加密的私钥

Example

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

SSLProxyMachineCertificatePath Directive

Description: 代理要使用的 PEM 编码的 Client 端证书和密钥的目录
Syntax: SSLProxyMachineCertificatePath directory
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

此伪指令设置目录,您在其中保留用于对远程服务器进行代理服务器身份验证的证书和密钥。

此目录中的文件必须经过 PEM 编码,并且可以通过哈希文件名进行访问。此外,您必须创建名为hash-value.N的符号链接。并且您应该始终确保该目录包含适当的符号链接。

Warning

当前不支持加密的私钥

Example

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

SSLProxyProtocol Directive

Description: 为代理使用配置可用的 SSL 协议版本
Syntax: SSLProxyProtocol [+|-]protocol ...
Default: SSLProxyProtocol all -SSLv3 (up to 2.4.16: all)
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

此伪指令可用于控制 mod_ssl 在构建其代理服务器环境时应使用的 SSL 协议版本。它只会使用提供的协议之一连接到服务器。

有关更多信息,请参阅SSLProtocol

SSLProxyVerify Directive

Description: 远程服务器的类型证书验证
Syntax: SSLProxyVerify level
Default: SSLProxyVerify none
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

当代理配置为将请求转发到远程 SSL 服务器时,此伪指令可用于配置远程服务器的证书验证。

以下级别可用于* level *:

在实践中,只有 nonerequire 级别是非常有趣的,因为 optional 级别不适用于所有服务器,并且 optional_no_ca 级别实际上与认证的想法相反(但是可以用于构建 SSL 测试页等)

Example

SSLProxyVerify require

SSLProxyVerifyDepth Directive

Description: 远程服务器证书验证中 CA 证书的最大深度
Syntax: SSLProxyVerifyDepth number
Default: SSLProxyVerifyDepth 1
Context: 服务器配置,虚拟主机,代理部分
Status: Extension
Module: mod_ssl
Compatibility: httpd 2.4.30 及更高版本中允许使用 proxy 节上下文

该指令设置了 mod_ssl 在确定远程服务器没有有效证书之前应验证的深度。

深度实际上是中间证书颁发者的最大数量,即在验证远程服务器证书时允许遵循的最大 CA 证书数量。深度为 0 表示仅接受自签名的远程服务器证书,默认深度为 1 表示远程服务器证书可以是自签名的,或者必须由服务器直接已知的 CA 签名(即 CA 的证书在SSLProxyCACertificatePath)下,等等。

Example

SSLProxyVerifyDepth 10

SSLRandomSeed Directive

Description: 伪随机数生成器(PRNG)种子源
Syntax: SSLRandomSeed context source [bytes]
Context: server config
Status: Extension
Module: mod_ssl

这将配置一个或多个源,以在启动时(* context startup)和/或在构建新的 SSL 连接之前( context *为connect)在 OpenSSL 中播种伪随机数生成器(PRNG)。由于 PRNG 是全局工具,因此只能在全局服务器上下文中使用此伪指令。

以下* source *变体可用:

这是始终可用的内置种子源。它的使用在运行时消耗最少的 CPU 周期,因此可以始终使用而没有缺点。 PRNG 的种子源包含当前时间,当前进程 ID 和堆栈的随机选择的 128 字节提取。缺点是,这并不是 true 的强大资源,并且在启动时(记分板仍然不可用),该资源只会产生几个字节的熵。因此,至少应在启动时始终使用其他种子源。

此变体使用外部文件/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更好,因为它永远不会阻塞并且实际上会提供请求的数据量。缺点是接收到的数据质量可能不是最好的。

此变体使用外部可执行文件/path/to/program作为 PRNG 种子的源。指定* bytes 时,仅其stdout内容的前 bytes 个字节形成熵。如果未指定 bytes *,则在stdout上生成的全部数据将形成熵。仅在需要外部程序的帮助时,才在启动时使用此功能(例如,如上例中的truerandUtil,您可以在基于 AT&T * truerand *库的 mod_ssl 发行版中找到) 。当然,在连接上下文中使用它会极大地降低服务器的速度。因此,通常应避免在这种情况下使用外部程序。

此变体使用外部熵收集守护程序(EGD)(请参见http://www.lothar.com/tech /crypto/)的 Unix 域套接字来植入 PRNG。如果您的平台上不存在随机设备,请使用此选项。

Example

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 Directive

Description: 设置 SSL 重新协商缓冲区的大小
Syntax: SSLRenegBufferSize bytes
Default: SSLRenegBufferSize 131072
Context: directory, .htaccess
Override: AuthConfig
Status: Extension
Module: mod_ssl

如果在每个位置的上下文中要求进行 SSL 重新协商,例如,在 Directory 或 Location 块中使用SSLVerifyClient,则mod_ssl必须将任何 HTTP 请求正文缓冲到内存中,直到可以执行新的 SSL 握手。此伪指令可用于设置将用于此缓冲区的内存量。

Warning

请注意,在许多配置中,发送请求正文的 Client 端将不受信任,因此在更改此配置设置时,必须考虑通过消耗内存来拒绝服务攻击。

Example

SSLRenegBufferSize 262144

SSLRequire Directive

Description: 仅在任意复杂的布尔表达式为 true 时才允许访问
Syntax: SSLRequire expression
Context: directory, .htaccess
Override: AuthConfig
Status: Extension
Module: mod_ssl

SSLRequire is deprecated

SSLRequire已弃用,通常应由Require expr代替。所谓的Require exprap_expr语法是SSLRequire的语法的超集,但以下情况除外:

SSLRequire中,比较运算符<<=,...完全等同于运算符ltle,...,并且以某种特殊的方式工作,首先比较两个字符串的长度,然后比较词汇 Sequences。另一方面,ap_expr有两组比较运算符:<<=,...进行词法字符串比较,而-lt-le,...则进行整数比较。对于后者,别名也没有前导破折号:ltle,...

该指令指定了一般访问要求,为了允许访问,必须满足该要求。这是一个非常强大的指令,因为需求规范是一个任意复杂的布尔表达式,包含任意数量的访问检查。

Note

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,可以使用Environment Variables中描述的任何变量。对于funcname,可用功能在ap_expr documentation中列出。

加载配置时,* expression 被解析为内部机器表示,然后在请求处理期间进行评估。在.htaccess 上下文中,每次在请求处理期间遇到.htaccess 文件时,都会解析并执行 expression *。

Example

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)函数期望在 Client 端证书中找到零个或多个 X.509 证书扩展实例,这些实例由给定的*对象 ID *(OID)标识。如果左侧字符串与与此 OID 标识的 extensions 的值完全匹配,则该表达式的计算结果为 true。 (如果存在多个具有相同 OID 的 extensions,则至少一个 extensions 必须匹配)。

Example

SSLRequire "foobar" in PeerExtList("1.2.3.4.5.6")

Notes on the PeerExtList function

  • 可以将对象 ID 指定为 SSL 库识别的描述性名称(例如"nsComment"),也可以将其指定为数字 OID(例如"1.2.3.4.5.6")。

  • 比较之前,具有 SSL 库已知类型的表达式将呈现为字符串。对于具有 SSL 库无法识别的类型的扩展,如果 mod_ssl 是原始 ASN.1 类型 UTF8String,IA5String,VisibleString 或 BMPString 之一,则它将解析该值。对于这些类型之一的扩展,如有必要,字符串值将转换为 UTF-8,然后与左侧表达式进行比较。

See also

SSLRequireSSL Directive

Description: 未将 SSL 用于 HTTP 请求时拒绝访问
Syntax: SSLRequireSSL
Context: directory, .htaccess
Override: AuthConfig
Status: Extension
Module: mod_ssl

除非为当前连接启用了 SSL 上的 HTTP(即 HTTPS),否则该指令禁止访问。这在启用 SSL 的虚拟主机或目录中非常方便,可防止配置错误暴露应受保护的内容。使用此指令时,将拒绝所有未使用 SSL 的请求。

Example

SSLRequireSSL

SSLSessionCache Directive

Description: 全局/进程间 SSL 会话缓存的类型
Syntax: SSLSessionCache type
Default: SSLSessionCache none
Context: server config
Status: Extension
Module: mod_ssl

这将配置全局/进程间 SSL 会话缓存的存储类型。此缓存是可选功能,可加快并行请求处理。对于对同一服务器进程的请求(通过 HTTP 保持活动),OpenSSL 已在本地缓存 SSL 会话信息。但是,由于现代 Client 端通过并行请求(通常多达四个并行请求)请求内联图像和其他数据,因此这些请求由“不同”的预分支服务器进程处理。在此,进程间缓存有助于避免不必要的会话握手。

当前支持以下五个存储* type *:

这将禁用全局/进程间会话缓存。如果使用某些浏览器,尤其是启用了 Client 端证书,这将导致明显的速度损失,并可能导致问题。不建议使用此设置。

这将禁用所有全局/进程间会话缓存。但是,它确实强制 OpenSSL 发送非空会话 ID,以容纳需要一个的错误 Client 端。

这将利用本地磁盘上的 DBM 哈希文件来同步服务器进程的本地 OpenSSL 内存缓存。在高负载下,此会话缓存可能会遇到可靠性问题。要使用此功能,请确保已加载mod_socache_dbm

这将利用 RAM 中的共享内存段(通过/path/to/datafile构建)中的高性能循环缓冲区(大约* size *个字节)来同步服务器进程的本地 OpenSSL 内存缓存。这是推荐的会话缓存。要使用此功能,请确保已加载mod_socache_shmcb

这利用了distcache分布式会话缓存库。该参数应使用 distcache 地址语法指定要使用的服务器或代理的位置。例如,UNIX:/path/to/socket指定 UNIX 域套接字(通常是本地 dc_client 代理); IP:server.example.com:9001指定 IP 地址。要使用此功能,请确保已加载mod_socache_dc

Examples

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

ssl-cache互斥锁用于序列化对会话缓存的访问,以防止损坏。可以使用Mutex指令配置此互斥锁。

SSLSessionCacheTimeout Directive

Description: 会话高速缓存中 SSL 会话过期之前的秒数
Syntax: SSLSessionCacheTimeout seconds
Default: SSLSessionCacheTimeout 300
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 还适用于 Apache 2.4.10 和更高版本中的 RFC 5077 TLS 会话恢复

该指令为存储在全局/进程间 SSL 会话高速缓存,OpenSSL 内部内存高速缓存中以及通过 TLS 会话恢复(RFC 5077)恢复的会话设置超时(以秒为单位)。可以将其设置为 15 以进行测试,但在现实生活中应将其设置为较高的值,例如 300.

Example

SSLSessionCacheTimeout 600

SSLSessionTicketKeyFile Directive

Description: TLS 会话票据的持久加密/解密密钥
Syntax: SSLSessionTicketKeyFile file-path
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则在 httpd 2.4.0 和更高版本中可用

(可选)配置一个用于加密和解密 TLS 会话票证的密钥,如RFC 5077所定义。主要适用于在多个节点之间共享 TLS 会话信息的群集环境。对于单实例 httpd 设置,建议不要配置票证密钥文件,而要在启动时依靠 mod_ssl 生成的(随机)密钥。

票证密钥文件必须包含 48 个字节的随机数据,最好从高熵源创建。在基于 Unix 的系统上,可以如下创建票证密钥文件:

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

工单密钥应经常旋转(替换),因为这是使现有会话工单失效的唯一方法-OpenSSL 当前不允许为工单寿命指定限制。仅在重新启动 Web 服务器后才能使用新的票证密钥。重新启动后,所有现有的会话票证都将变为无效。

Warning

工单密钥文件包含敏感的密钥材料,并应使用类似于SSLCertificateKeyFile的文件许可权进行保护。

SSLSessionTickets Directive

Description: 启用或禁用 TLS 会话票证
Syntax: SSLSessionTickets on|off
Default: SSLSessionTickets on
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8f 或更高版本,则在 httpd 2.4.11 和更高版本中可用。

该指令允许启用或禁用 TLS 会话票证(RFC 5077)。

Warning

TLS 会话票证默认情况下处于启用状态。使用它们而不以适当的频率(例如每天)重新启动 Web 服务器会损害完美的前向保密性。

SSLSRPUnknownUserSeed Directive

Description: SRP 未知用户种子
Syntax: SSLSRPUnknownUserSeed secret-string
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 1.0.1 或更高版本,则在 httpd 2.4.4 和更高版本中可用

该指令设置用于为未知用户伪造 SRP 用户参数的种子,以避免泄漏给定用户是否存在。指定一个 Secret 字符串。如果不使用此指令,那么 Apache 将向指定未知用户名的 Client 端返回 UNKNOWN_PSK_IDENTITY 警报。

Example

SSLSRPUnknownUserSeed "secret"

SSLSRPVerifierFile Directive

Description: SRP 验证程序文件的路径
Syntax: SSLSRPVerifierFile file-path
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 1.0.1 或更高版本,则在 httpd 2.4.4 和更高版本中可用

此伪指令启用 TLS-SRP,并将路径设置为包含 TLS-SRP 用户名,验证者,盐和组参数的 OpenSSL SRP(安全远程密码)验证者文件。

Example

SSLSRPVerifierFile "/path/to/file.srpv"

验证程序文件可以使用openssl命令行 Util 创建:

创建 SRP 验证程序文件

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

可选的-userinfo参数给定的值在SSL_SRP_USERINFO请求环境变量中可用。

SSLStaplingCache Directive

Description: 配置 OCSP 装订缓存
Syntax: SSLStaplingCache type
Context: server config
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

配置用于存储 OCSP 响应的缓存,如果启用了SSLUseStapling,该缓存将包含在 TLS 握手中。对于 OCSP 装订,必须配置缓存。除了nonenonenotnull之外,支持与SSLSessionCache相同的存储类型。

SSLStaplingErrorCacheTimeout Directive

Description: OCSP 装订缓存中的无效响应到期前的秒数
Syntax: SSLStaplingErrorCacheTimeout seconds
Default: SSLStaplingErrorCacheTimeout 600
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

设置超时(以秒为单位),该超时在 OCSP 装订缓存(通过SSLStaplingCache配置)中的* invalid *响应到期之前。要为有效响应设置缓存超时,请参见SSLStaplingStandardCacheTimeout

SSLStaplingFakeTryLater Directive

Description: 合成失败的 OCSP 装订查询的“ tryLater”响应
Syntax: SSLStaplingFakeTryLater on|off
Default: SSLStaplingFakeTryLater on
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

启用后,对用于装订目的的 OCSP 响应器的查询失败时,mod_ssl 将为 Client 端合成“ tryLater”响应。只有同时启用了SSLStaplingReturnResponderErrors才有效。

SSLStaplingForceURL Directive

Description: 覆盖证书的 AIA extensions 中指定的 OCSP 响应者 URI
Syntax: SSLStaplingForceURL uri
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

此伪指令将覆盖从证书的 authorityInfoAccess(AIA)扩展获得的 OCSP 响应者的 URI。一种潜在的用途是当使用代理检索 OCSP 查询时。

SSLStaplingResponderTimeout Directive

Description: OCSP 装订查询超时
Syntax: SSLStaplingResponderTimeout seconds
Default: SSLStaplingResponderTimeout 10
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

启用SSLUseStapling并且 mod_ssl 正在为 OCSP 装订查询查询响应者时,此选项设置对 OCSP 响应者的查询超时。

SSLStaplingResponseMaxAge Directive

Description: OCSP 装订响应的最大允许年龄
Syntax: SSLStaplingResponseMaxAge seconds
Default: SSLStaplingResponseMaxAge -1
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

在考虑出于装订目的的 OCSP 响应时,即在打开SSLUseStapling时,此选项设置最大允许使用期限(“新鲜度”)。默认值(-1)不强制使用最长期限,这意味着只要 OCSP 响应的nextUpdate字段在将来,它就被视为有效。

SSLStaplingResponseTimeSkew Directive

Description: OCSP 装订响应验证的最大允许时间偏差
Syntax: SSLStaplingResponseTimeSkew seconds
Default: SSLStaplingResponseTimeSkew 300
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

当 mod_ssl 检查 TLS 握手(OCSP 装订)中包含的 OCSP 响应的thisUpdatenextUpdate字段时,此选项设置最大允许时间偏斜。仅在SSLUseStapling已打开时适用。

SSLStaplingReturnResponderErrors Directive

Description: 将与装订相关的 OCSP 错误传递给 Client 端
Syntax: SSLStaplingReturnResponderErrors on|off
Default: SSLStaplingReturnResponderErrors on
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

启用后,mod_ssl 会将来自未完成订钉相关 OCSP 查询的响应(例如,总体状态为“成功”以外的响应,证书状态为“良好”以外的响应,过期的响应等)传递给 Client 端。如果设置为off,则仅表示证书状态为“良好”的响应将包含在 TLS 握手中。

SSLStaplingStandardCacheTimeout Directive

Description: OCSP 装订缓存中的响应到期之前的秒数
Syntax: SSLStaplingStandardCacheTimeout seconds
Default: SSLStaplingStandardCacheTimeout 3600
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

设置超时(以秒为单位),该超时在 OCSP 装订缓存(通过SSLStaplingCache配置)中的响应到期之前。该指令适用于* valid *响应,而SSLStaplingErrorCacheTimeout用于控制无效/不可用响应的超时。

SSLStrictSNIVHostCheck Directive

Description: 是否允许非 SNI Client 端访问基于名称的虚拟主机。
Syntax: SSLStrictSNIVHostCheck on|off
Default: SSLStrictSNIVHostCheck off
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 在 Apache 2.2.12 及更高版本中可用

该指令设置是否允许非 SNI Client 端访问基于名称的虚拟主机。如果在默认的基于名称的虚拟主机中设置为on,则 SNI 不知道的 Client 端将不允许访问属于该特定 IP /端口组合的任何虚拟主机。如果在任何其他虚拟主机中将其设置为on,则不支持 SNI 的 Client 端将无法访问此特定虚拟主机。

Warning

仅当 httpd 是针对具有 SNI 功能的 OpenSSL 版本编译的时,此选项才可用。

Example

SSLStrictSNIVHostCheck on

SSLUserName Directive

Description: 变量名确定用户名
Syntax: SSLUserName varname
Context: 服务器配置,目录,.htaccess
Override: AuthConfig
Status: Extension
Module: mod_ssl

此伪指令在 Apache 请求对象中设置“用户”字段。下级模块使用它来识别带有字符串的用户。特别是,这可能导致设置环境变量REMOTE_USER。 * varname *可以是任何SSL 环境变量

请注意,如果使用FakeBasicAuth选项,则此伪指令无效(请参阅SSLOptions)。

Example

SSLUserName SSL_CLIENT_S_DN_CN

SSLUseStapling Directive

Description: 在 TLS 握手中启用 OCSP 响应的装订
Syntax: SSLUseStapling on|off
Default: SSLUseStapling off
Context: 服务器配置,虚拟主机
Status: Extension
Module: mod_ssl
Compatibility: 如果使用 OpenSSL 0.9.8h 或更高版本,则可用

此选项将启用 OCSP 装订,这是由 RFC 6066 中指定的“证书状态请求” TLS 扩展定义的。如果启用(并由 Client 端请求),则 mod_ssl 将在 TLS 握手中包含其自身证书的 OCSP 响应。配置SSLStaplingCache是启用 OCSP 装订的先决条件。

OCSP 装订减轻了 Client 端自己查询 OCSP 响应程序的负担,但应注意,使用 RFC 6066 规范,服务器的CertificateStatus响应可能仅包含针对单个证书的 OCSP 响应。对于在其链中具有中间 CA 证书的服务器证书(当今的典型情况),因此在其当前实现中进行装订只能部分实现“节省往返次数和资源”的既定目标-另请参见RFC 6961(TLS 多个证书状态扩展)。

启用 OCSP 装订后,ssl-stapling互斥锁用于控制对 OCSP 装订缓存的访问,以防止损坏,而sss-stapling-refresh互斥锁用于控制 OCSP 响应的刷新。可以使用Mutex指令配置这些互斥锁。

SSLVerifyClient Directive

Description: Client 证书验证的类型
Syntax: SSLVerifyClient level
Default: SSLVerifyClient none
Context: 服务器配置,虚拟主机,目录,.htaccess
Override: AuthConfig
Status: Extension
Module: mod_ssl

该指令为 Client 端身份验证设置证书验证级别。注意,此伪指令可以在每个服务器和每个目录上下文中使用。在每服务器上下文中,它适用于构建连接时在标准 SSL 握手中使用的 Client 端身份验证过程。在按目录的上下文中,它会在读取 HTTP 请求之后但在发送 HTTP 响应之前,以重新配置的 Client 端验证级别强制进行 SSL 重新协商。

以下级别可用于* level *:

Example

SSLVerifyClient require

SSLVerifyDepth Directive

Description: Client 证书验证中 CA 证书的最大深度
Syntax: SSLVerifyDepth number
Default: SSLVerifyDepth 1
Context: 服务器配置,虚拟主机,目录,.htaccess
Override: AuthConfig
Status: Extension
Module: mod_ssl

该指令设置了 mod_ssl 在确定 Client 端没有有效证书之前应验证的深度。注意,此伪指令可以在每个服务器和每个目录上下文中使用。在每服务器上下文中,它适用于构建连接时在标准 SSL 握手中使用的 Client 端身份验证过程。在每个目录的上下文中,它会在读取 HTTP 请求之后但在发送 HTTP 响应之前,以重新配置的 Client 端验证深度强制进行 SSL 重新协商。

深度实际上是中间证书颁发者的最大数量,即在验证 Client 端证书时允许遵循的最大 CA 证书数量。深度为 0 表示仅接受自签名 Client 端证书,默认深度为 1 表示 Client 端证书可以是自签名的,或者必须由服务器直接知道的 CA 签名(即 CA 的证书为在SSLCACertificatePath)下,等等。

Example

SSLVerifyDepth 10
首页