<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_ssl

可用语言:  en  |  fr 

描述使用安全套接字层 (SSL) 和传输层安全 (TLS) 协议进行强加密
状态扩展
模块标识符ssl_module
源文件mod_ssl.c

摘要

此模块为 Apache HTTP 服务器提供 SSL v3 和 TLS v1.x 支持。不再支持 SSL v2。

此模块依赖于 OpenSSL 来提供加密引擎。

更多详细信息、讨论和示例在 SSL 文档 中提供。

Support Apache!

主题

指令

错误修复清单

另请参阅

top

环境变量

此模块可以配置为将 SSL 信息的几个项目作为附加环境变量提供给 SSI 和 CGI 命名空间。除了始终定义的 HTTPSSSL_TLS_SNI 之外,出于性能原因,默认情况下不提供此信息。(请参阅下面的 SSLOptions StdEnvVars)生成的变量列在下面的表格中。为了向后兼容,信息也可以在不同的名称下提供。有关兼容性变量的详细信息,请查看 兼容性 章节。

变量名称 值类型 描述
HTTPS 标志 正在使用 HTTPS。
SSL_PROTOCOL 字符串 SSL 协议版本 (SSLv3, TLSv1, TLSv1.1, TLSv1.2)
SSL_SESSION_ID 字符串 十六进制编码的 SSL 会话 ID
SSL_SESSION_RESUMED 字符串 初始或恢复的 SSL 会话。注意:如果使用 HTTP KeepAlive,则可能在同一个(初始或恢复的)SSL 会话上提供多个请求
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 用户主体名称形式 (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 字符串 证书的序列号和发行者。格式与 RFC4523 中的 CertificateExactAssertion 相匹配
SSL_CLIENT_VERIFY 字符串 NONE, SUCCESS, GENEROUSFAILED: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 指定 X.509 DN 的组件;其中之一是 C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email。在 httpd 2.2.0 及更高版本中,x509 也可能包含数字 _n 后缀。如果所讨论的 DN 包含多个相同名称的属性,则此后缀用作从 0 开始的索引来选择特定属性。例如,如果服务器证书主体 DN 包含两个 OU 属性,则可以使用 SSL_SERVER_S_DN_OU_0SSL_SERVER_S_DN_OU_1 来引用每个属性。没有 _n 后缀的变量名称等效于带有 _0 后缀的名称;第一个(或唯一)属性。当使用 SSLOptions 指令的 StdEnvVars 选项填充环境表时,仅在没有后缀的名称下添加任何 DN 的第一个(或唯一)属性;即不添加 _0 后缀的条目。

在 httpd 2.4.32 及更高版本中,可以在 DN 组件中的 x509 后面添加可选的 _RAW 后缀,以禁止将属性值转换为 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 表达式或自定义日志格式中使用许多其他环境变量。

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 的请求标头的值。
top

自定义日志格式

mod_ssl 构建到 Apache 中或至少加载(在 DSO 情况下)时,自定义日志格式mod_log_config 会存在其他功能。首先,有一个额外的 ``%{varname}x'' eXtension 格式函数,可用于扩展任何模块提供的变量,尤其是 mod_ssl 提供的变量,您可以在上面的表格中找到这些变量。

为了向后兼容,还提供了一个特殊的 ``%{name}c'' 密码格式函数。有关此函数的信息,请参阅 兼容性 章节。

示例

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

即使不设置 SSLOptions 指令的 StdEnvVars 选项,这些格式也能正常工作。

top

请求说明

mod_ssl 为请求设置“说明”,这些说明可以在 mod_log_config 中使用 %{name}n 格式字符串进行日志记录。

支持的说明如下

ssl-access-forbidden
如果由于 SSLRequireSSLRequireSSL 指令而拒绝访问,则此说明设置为值 1
ssl-secure-reneg
如果 mod_ssl 针对支持安全重新协商扩展的 OpenSSL 版本构建,则如果当前连接使用 SSL,并且客户端也支持安全重新协商扩展,则此说明设置为值 1。如果客户端不支持安全重新协商扩展,则说明设置为值 0。如果 mod_ssl 不是针对支持安全重新协商的 OpenSSL 版本构建,或者当前连接未使用 SSL,则不会设置说明。
top

表达式解析器扩展

mod_ssl 构建到 Apache 中或至少加载(在 DSO 情况下)时,mod_ssl 提供的任何 变量 都可以在 ap_expr 表达式解析器 的表达式中使用。可以使用语法 ``%{varname}'' 引用这些变量。从 2.4.18 版本开始,还可以使用 mod_rewrite 风格的语法 ``%{SSL:varname}'' 或函数风格的语法 ``ssl(varname)''。

示例(使用 mod_headers

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

即使不设置 SSLOptions 指令的 StdEnvVars 选项,此功能也能正常工作。

top

与 Require 一起使用的授权提供程序

mod_sslmod_authz_coreRequire 指令提供了一些身份验证提供程序。

Require ssl

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

Require ssl

Require ssl-verify-client

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

以下示例授予访问权限,前提是用户通过客户端证书或用户名和密码进行身份验证。

Require ssl-verify-client
Require valid-user
top

SSLCACertificateFile 指令

描述用于客户端身份验证的连接的 PEM 编码 CA 证书文件
语法SSLCACertificateFile file-path
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

此指令设置 all-in-one 文件,您可以在其中组装您与之交互的证书颁发机构 (CA) 的证书。这些用于客户端身份验证。此类文件只是各种 PEM 编码证书文件的串联,按优先级排序。这可以替代和/或补充 SSLCACertificatePath

示例

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

SSLCACertificatePath 指令

描述用于客户端身份验证的 PEM 编码 CA 证书目录
语法SSLCACertificatePath directory-path
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

此指令设置您保存您与之交互的证书颁发机构 (CA) 的证书的目录。这些用于验证客户端身份验证时的客户端证书。

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

示例

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

SSLCADNRequestFile 指令

描述用于定义可接受的 CA 名称的连接的 PEM 编码 CA 证书文件
语法SSLCADNRequestFile file-path
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

当 mod_ssl 请求客户端证书时,会向客户端发送 可接受的证书颁发机构名称 列表,作为 SSL 握手的一部分。客户端可以使用这些 CA 名称从其可用的证书中选择适当的客户端证书。

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

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

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

示例

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

SSLCADNRequestPath 指令

描述用于定义可接受的 CA 名称的 PEM 编码 CA 证书目录
语法SSLCADNRequestPath directory-path
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

此可选指令可用于指定请求客户端证书时将发送给客户端的 可接受的 CA 名称 集。有关更多详细信息,请参阅 SSLCADNRequestFile 指令。

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

示例

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

SSLCARevocationCheck 指令

描述启用基于 CRL 的吊销检查
语法SSLCARevocationCheck chain|leaf|none [flags ...]
默认值SSLCARevocationCheck none
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性httpd 2.4.21 或更高版本中可用的可选 flags

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

可用的 flags 为

示例

SSLCARevocationCheck chain

与 2.2 版本的兼容性

SSLCARevocationCheck chain no_crl_for_cert_ok
top

SSLCARevocationFile 指令

描述用于客户端身份验证的连接的 PEM 编码 CA CRL 文件
语法SSLCARevocationFile file-path
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

此指令设置 all-in-one 文件,您可以在其中组装您与之交互的证书颁发机构 (CA) 的证书吊销列表 (CRL)。这些用于客户端身份验证。此类文件只是各种 PEM 编码 CRL 文件的串联,按优先级排序。这可以替代和/或补充 SSLCARevocationPath

示例

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

SSLCARevocationPath 指令

描述用于客户端身份验证的 PEM 编码 CA CRL 目录
语法SSLCARevocationPath directory-path
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

此指令设置您保存您与之交互的证书颁发机构 (CA) 的证书吊销列表 (CRL) 的目录。这些用于在客户端身份验证时吊销客户端证书。

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

示例

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

SSLCertificateChainFile 指令

描述PEM 编码的服务器 CA 证书文件
语法SSLCertificateChainFile 文件路径
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

SSLCertificateChainFile 已弃用

SSLCertificateChainFile 在 2.4.8 版本中已过时,当时 SSLCertificateFile 被扩展为还可以从服务器证书文件加载中间 CA 证书。

此指令设置可选的一体化文件,您可以在其中组装构成服务器证书证书链的证书颁发机构 (CA) 证书。这从服务器证书的发行 CA 证书开始,可以一直到根 CA 证书。这样的文件只是各种 PEM 编码的 CA 证书文件的串联,通常按证书链顺序排列。

这应该与 SSLCACertificatePath 作为替代和/或补充使用,以显式构建服务器证书链,该证书链除了服务器证书外还发送到浏览器。它特别有用,可以避免在使用客户端身份验证时与 CA 证书发生冲突。因为虽然将服务器证书链的 CA 证书放入 SSLCACertificatePath 对证书链构建具有相同的效果,但它具有副作用,即由该相同 CA 证书颁发的客户端证书也会在客户端身份验证中被接受。

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

示例

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

SSLCertificateFile 指令

描述服务器 PEM 编码的 X.509 证书数据文件或令牌标识符
语法SSLCertificateFile 文件路径|certid
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性certid 在 2.4.42 及更高版本中可用。

此指令指向包含 PEM 格式证书数据的文件,或通过配置的加密令牌指向证书标识符。如果使用 PEM 文件,则该文件至少必须包含一个最终实体(叶子)证书。该指令可以多次使用(引用不同的文件名)以支持服务器身份验证的多种算法 - 通常是 RSA、DSA 和 ECC。支持的算法数量取决于用于 mod_ssl 的 OpenSSL 版本:对于 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 dhparamopenssl ecparam 命令生成此类参数。这些参数可以按原样添加到第一个证书文件的末尾。只有第一个文件才能用于自定义参数,因为它们是独立于身份验证算法类型应用的。

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

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

DH 参数与大于 1024 位的素数的互操作性

从 2.4.7 版本开始,mod_ssl 使用具有 2048、3072 和 4096 位素数长度的标准化 DH 参数,以及从 2.4.10 版本开始(来自 RFC 3526)的 6144 和 8192 位的附加素数长度,并根据证书的 RSA/DSA 密钥长度将其分发给客户端。特别是对于基于 Java 的客户端(Java 7 或更早版本),这可能会导致握手失败 - 请参阅此 常见问题解答,了解如何解决此类问题。

在使用多个证书和 OpenSSL 1.0.2 之前的版本时,默认 DH 参数

当使用多个证书来支持不同的身份验证算法(如 RSA、DSA,但主要是 ECC)以及 OpenSSL 1.0.2 之前的版本时,建议使用自定义 DH 参数(最好)通过将它们添加到第一个证书文件(如上所述),或者对 SSLCertificateFile 指令进行排序,以便将 RSA/DSA 证书放在 ECC 证书之后

这是由于 OpenSSL 旧版本中的一个限制,该限制不允许 Apache HTTP 服务器在握手时(必须将 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"
top

SSLCertificateKeyFile 指令

描述服务器 PEM 编码的私钥文件
语法SSLCertificateKeyFile 文件路径|keyid
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性keyid 在 2.4.42 及更高版本中可用。

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

该指令可以多次使用(引用不同的文件名)以支持服务器身份验证的多种算法。对于每个 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"
top

SSLCipherSuite 指令

描述在 SSL 握手过程中可用于协商的密码套件
语法SSLCipherSuite [协议] 密码规范
默认值SSLCipherSuite DEFAULT(取决于 OpenSSL 版本)
上下文服务器配置、虚拟主机、目录、.htaccess
覆盖AuthConfig
状态扩展
模块mod_ssl

此复杂指令使用由冒号分隔的密码规范字符串,该字符串由 OpenSSL 密码规范组成,用于配置客户端在 SSL 握手阶段允许协商的密码套件。可选的协议规范可以为特定 SSL 版本配置密码套件。可能的值包括“SSL”,用于所有 SSL 协议,包括 TLSv1.2。

请注意,此指令可以在每个服务器和每个目录上下文中使用。在每个服务器上下文中,它适用于建立连接时的标准 SSL 握手。在每个目录上下文中,它会在读取 HTTP 请求但发送 HTTP 响应之前,使用重新配置的密码套件强制执行 SSL 重新协商。

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

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

密码规范中的 SSL 密码规范由 4 个主要属性和一些额外的次要属性组成

SSL 密码也可以是导出密码。SSLv2 密码不再受支持。要指定要使用的密码,可以逐个指定所有密码,或者使用别名来指定密码的优先级和顺序(请参阅 表 1)。实际可用的密码和别名取决于使用的 openssl 版本。较新的 openssl 版本可能包含其他密码。

标签 描述
密钥交换算法
kRSA RSA 密钥交换
kDHr 使用 RSA 密钥的 Diffie-Hellman 密钥交换
kDHd 使用 DSA 密钥的 Diffie-Hellman 密钥交换
kEDH 临时(临时密钥)Diffie-Hellman 密钥交换(无证书)
kSRP 安全远程密码 (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 所有使用安全远程密码 (SRP) 密钥交换的密码
DSS 所有使用 DSS 身份验证的密码
ECDSA 所有使用 ECDSA 身份验证的密码
aNULL 所有使用无身份验证的密码

有趣的是,这些可以组合在一起以指定您希望使用的顺序和密码。为了加快速度,还有一些别名(SSLv3, TLSv1, EXP, LOW, MEDIUM, HIGH)用于某些密码组。这些标签可以与前缀组合在一起形成密码规范。可用的前缀是

aNULLeNULLEXP 密码始终被禁用

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

查看所有这些内容的更简单方法是使用“openssl ciphers -v”命令,它提供了一种很好的方法来逐步创建正确的密码规范字符串。默认的密码规范字符串取决于所用 OpenSSL 库的版本。假设它是“RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5”,这意味着以下内容:将 RC4-SHAAES128-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

SSL 的所有特定 RSA 和 DH 密码的完整列表在 表 2 中给出。

示例

SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
密码标签 协议 密钥交换 身份验证 加密 MAC 类型
RSA 密码
DES-CBC3-SHA SSLv3 RSA RSA 3DES(168) SHA1
IDEA-CBC-SHA SSLv3 RSA RSA IDEA(128) SHA1
RC4-SHA SSLv3 RSA RSA RC4(128) SHA1
RC4-MD5 SSLv3 RSA RSA RC4(128) MD5
DES-CBC-SHA SSLv3 RSA RSA DES(56) SHA1
EXP-DES-CBC-SHA SSLv3 RSA(512) RSA DES(40) SHA1 导出
EXP-RC2-CBC-MD5 SSLv3 RSA(512) RSA RC2(40) MD5 导出
EXP-RC4-MD5 SSLv3 RSA(512) RSA RC4(40) MD5 导出
NULL-SHA SSLv3 RSA RSA SHA1
NULL-MD5 SSLv3 RSA RSA MD5
Diffie-Hellman 密码
ADH-DES-CBC3-SHA SSLv3 DH 3DES(168) SHA1
ADH-DES-CBC-SHA SSLv3 DH DES(56) SHA1
ADH-RC4-MD5 SSLv3 DH RC4(128) MD5
EDH-RSA-DES-CBC3-SHA SSLv3 DH RSA 3DES(168) SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 DH DSS 3DES(168) SHA1
EDH-RSA-DES-CBC-SHA SSLv3 DH RSA DES(56) SHA1
EDH-DSS-DES-CBC-SHA SSLv3 DH DSS DES(56) SHA1
EXP-EDH-RSA-DES-CBC-SHA SSLv3 DH(512) RSA DES(40) SHA1 导出
EXP-EDH-DSS-DES-CBC-SHA SSLv3 DH(512) DSS DES(40) SHA1 导出
EXP-ADH-DES-CBC-SHA SSLv3 DH(512) DES(40) SHA1 导出
EXP-ADH-RC4-MD5 SSLv3 DH(512) RC4(40) MD5 导出
top

SSLCompression 指令

描述在 SSL 级别启用压缩
语法SSLCompression on|off
默认值SSLCompression off
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.4.3 及更高版本中可用,如果使用 OpenSSL 0.9.8 或更高版本;如果使用 OpenSSL 1.0.0 或更高版本,则虚拟主机范围可用。默认情况下,在版本 2.4.3 中为 on

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

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

top

SSLCryptoDevice 指令

描述启用使用加密硬件加速器
语法SSLCryptoDevice engine
默认值SSLCryptoDevice builtin
上下文服务器配置
状态扩展
模块mod_ssl

此指令启用使用加密硬件加速器板来卸载一些 SSL 处理开销。此指令只能在 SSL 工具包使用“engine”支持的情况下使用;OpenSSL 0.9.7 及更高版本默认情况下具有“engine”支持,必须使用 OpenSSL 0.9.6 的单独“-engine”版本。

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

示例

# For a Broadcom accelerator:
SSLCryptoDevice ubsec

使用 OpenSSL 3.0 或更高版本,如果未指定引擎,但使用 PKCS#11 URI 指定了密钥或证书,则会尝试从 OpenSSL 提供程序加载密钥和证书。要使用的 OpenSSL 提供程序必须在 OpenSSL 配置文件中定义和配置,并且必须支持 STORE 方法 用于 PKCS#11 URI

top

SSLEngine 指令

描述SSL 引擎操作开关
语法SSLEngine on|off|optional
默认值SSLEngine off
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

此指令切换 SSL/TLS 协议引擎的使用。这应该在 <VirtualHost> 部分内使用,以启用该虚拟主机的 SSL/TLS。默认情况下,SSL/TLS 协议引擎对主服务器和所有配置的虚拟主机都处于禁用状态。

示例

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

在 Apache 2.1 及更高版本中,SSLEngine 可以设置为 optional。这启用了对 RFC 2817 的支持,在 HTTP/1.1 中升级到 TLS。目前还没有 Web 浏览器支持 RFC 2817。

top

SSLFIPS 指令

描述SSL FIPS 模式开关
语法SSLFIPS on|off
默认值SSLFIPS off
上下文服务器配置
状态扩展
模块mod_ssl

此指令切换 SSL 库 FIPS_mode 标志的使用。它必须在全局服务器上下文中设置,并且不能使用冲突的设置进行配置(SSLFIPS on 后跟 SSLFIPS off 或类似设置)。该模式适用于所有 SSL 库操作。

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

top

SSLHonorCipherOrder 指令

描述选项,优先考虑服务器的密码优先级顺序
语法SSLHonorCipherOrder on|off
默认值SSLHonorCipherOrder off
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

在 SSLv3 或 TLSv1 握手期间选择密码时,通常使用客户端的优先级。如果启用此指令,则将改为使用服务器的优先级。

示例

SSLHonorCipherOrder on
top

SSLInsecureRenegotiation 指令

描述选项,启用对不安全重新协商的支持
语法SSLInsecureRenegotiation on|off
默认值SSLInsecureRenegotiation off
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.2.15 及更高版本中可用,如果使用 OpenSSL 0.9.8m 或更高版本

根据最初的规范,所有版本的 SSL 和 TLS 协议(包括 TLS/1.2)在重新协商期间都容易受到中间人攻击(CVE-2009-3555)。此漏洞允许攻击者将选定的明文“前缀”添加到 Web 服务器看到的 HTTP 请求中。开发了一种协议扩展,如果客户端和服务器都支持该扩展,则可以修复此漏洞。

如果 mod_ssl 与 OpenSSL 0.9.8m 或更高版本链接,则默认情况下,重新协商仅在支持新协议扩展的客户端的情况下才受支持。如果启用此指令,则将允许与旧(未修补)客户端进行重新协商,尽管不安全。

安全警告

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

示例

SSLInsecureRenegotiation on

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

top

SSLOCSPDefaultResponder 指令

描述设置 OCSP 验证的默认响应程序 URI
语法SSLOCSPDefaultResponder uri
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

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

top

SSLOCSPEnable 指令

描述启用对客户端证书链的 OCSP 验证
语法SSLOCSPEnable on|leaf|off
默认值SSLOCSPEnable off
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性模式 leaf 在 httpd 2.4.34 及更高版本中可用

此选项启用对客户端证书链的 OCSP 验证。如果启用此选项,则在执行正常验证(包括 CRL 检查)后,将针对 OCSP 响应程序验证客户端证书链中的证书。在“leaf”模式下,只会验证客户端证书本身。

使用的 OCSP 响应程序要么从证书本身提取,要么通过配置派生;请参见 SSLOCSPDefaultResponderSSLOCSPOverrideResponder 指令。

示例

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

SSLOCSPNoverify 指令

描述跳过 OCSP 响应程序证书验证
语法SSLOCSPNoverify on|off
默认值SSLOCSPNoverify off
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.4.26 及更高版本中可用,如果使用 OpenSSL 0.9.7 或更高版本

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

top

SSLOCSPOverrideResponder 指令

描述强制使用默认响应程序 URI 进行 OCSP 验证
语法SSLOCSPOverrideResponder on|off
默认值SSLOCSPOverrideResponder off
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

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

top

SSLOCSPProxyURL 指令

描述用于 OCSP 请求的代理 URL
语法SSLOCSPProxyURL url
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.4.19 及更高版本中可用

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

top

SSLOCSPResponderCertificateFile 指令

描述一组受信任的 PEM 编码的 OCSP 响应程序证书
语法SSLOCSPResponderCertificateFile file
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.4.26 及更高版本中可用,如果使用 OpenSSL 0.9.7 或更高版本

这提供了一组受信任的 OCSP 响应程序证书,这些证书将在 OCSP 响应程序证书验证期间使用。提供的证书在没有进一步验证的情况下被隐式信任。这通常用于 OCSP 响应程序证书是自签名的或从 OCSP 响应中省略的情况。

top

SSLOCSPResponderTimeout 指令

描述OCSP 查询的超时时间
语法SSLOCSPResponderTimeout seconds
默认值SSLOCSPResponderTimeout 10
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

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

top

SSLOCSPResponseMaxAge 指令

描述OCSP 响应的最大允许年龄
语法SSLOCSPResponseMaxAge
默认值SSLOCSPResponseMaxAge -1
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

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

top

SSLOCSPResponseTimeSkew 指令

描述OCSP 响应验证的最大允许时间偏差
语法SSLOCSPResponseTimeSkew
默认值SSLOCSPResponseTimeSkew 300
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

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

top

SSLOCSPUseRequestNonce 指令

描述在 OCSP 查询中使用随机数
语法SSLOCSPUseRequestNonce on|off
默认值SSLOCSPUseRequestNonce on
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.4.10 及更高版本中可用

此选项决定对 OCSP 响应者的查询是否应该包含随机数。默认情况下,始终使用查询随机数并将其与响应中的随机数进行比较。当响应者不使用随机数(例如 Microsoft OCSP 响应者)时,应将此选项设置为 off

top

SSLOpenSSLConfCmd 指令

描述通过其 SSL_CONF API 配置 OpenSSL 参数
语法SSLOpenSSLConfCmd 命令名称 命令值
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.4.8 及更高版本中可用,如果使用 OpenSSL 1.0.2 或更高版本

此指令将 OpenSSL 的 SSL_CONF API 公开给 mod_ssl,允许灵活地配置 OpenSSL 参数,而无需在 OpenSSL 添加新功能时实现额外的 mod_ssl 指令。

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

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

示例

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
top

SSLOptions 指令

描述配置各种 SSL 引擎运行时选项
语法SSLOptions [+|-]选项 ...
上下文服务器配置、虚拟主机、目录、.htaccess
覆盖选项
状态扩展
模块mod_ssl

此指令可用于在每个目录的基础上控制各种运行时选项。通常,如果多个 SSLOptions 可以应用于一个目录,则采用最具体的那个;选项不会合并。但是,如果 SSLOptions 指令上的所有选项都以加号 (+) 或减号 (-) 符号开头,则选项将合并。以 + 开头的任何选项都将添加到当前生效的选项中,而以 - 开头的任何选项都将从当前生效的选项中删除。

可用的 选项

示例

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

SSLPassPhraseDialog 指令

描述加密私钥的密码短语对话框类型
语法SSLPassPhraseDialog 类型
默认值SSLPassPhraseDialog builtin
上下文服务器配置
状态扩展
模块mod_ssl

当 Apache 启动时,它必须读取 SSL 启用的虚拟服务器的各种证书(参见 SSLCertificateFile)和私钥(参见 SSLCertificateKeyFile)文件。由于出于安全原因,私钥文件通常是加密的,因此 mod_ssl 需要向管理员查询密码短语才能解密这些文件。此查询可以通过两种方式完成,可以通过 类型 进行配置

示例

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

SSLProtocol 指令

描述配置可用的 SSL/TLS 协议版本
语法SSLProtocol [+|-]协议 ...
默认值SSLProtocol all -SSLv3 (直到 2.4.16:all)
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl

此指令可用于控制在新的连接中将接受 SSL/TLS 协议的哪些版本。

可用的(不区分大小写)协议

示例

SSLProtocol TLSv1

SSLProtocol 用于基于名称的虚拟主机

在 OpenSSL 1.1.1 之前,即使服务器名称指示 (SNI) 允许在 TLS 握手早期确定目标虚拟主机,也不可能在此处切换连接的 TLS 协议版本,因此协商的 SSLProtocol 始终基于基本虚拟主机(在连接的监听 IP:port 上声明的第一个虚拟主机)的协议版本。

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

为了与以前版本兼容,如果在基于名称的虚拟主机中未配置 SSLProtocol,则来自基本虚拟主机的协议版本仍然适用,**除非**在全局范围内配置了 SSLProtocol,在这种情况下,全局值适用(后一种例外情况更合理,而不是兼容)。

top

SSLProxyCACertificateFile 指令

描述用于远程服务器身份验证的连接的 PEM 编码 CA 证书文件
语法SSLProxyCACertificateFile 文件路径
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

此指令设置一体化文件,您可以在其中组装您与之交互的远程服务器的证书颁发机构 (CA) 证书。这些用于远程服务器身份验证。此类文件只是各种 PEM 编码证书文件的连接,按优先级排序。这可以替代和/或补充 SSLProxyCACertificatePath

示例

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

SSLProxyCACertificatePath 指令

描述用于远程服务器身份验证的 PEM 编码 CA 证书目录
语法SSLProxyCACertificatePath 目录路径
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

此指令设置您保存与之交互的证书颁发机构 (CA) 证书的目录。这些用于验证远程服务器身份验证上的远程服务器证书。

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

示例

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

SSLProxyCARevocationCheck 指令

描述启用基于 CRL 的撤销检查以进行远程服务器身份验证
语法SSLProxyCARevocationCheck chain|leaf|none
默认值SSLProxyCARevocationCheck none
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

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

当设置为 chainleaf 时,CRL 必须可用才能成功验证

在版本 2.3.15 之前,mod_ssl 中的 CRL 检查在未在使用 SSLProxyCARevocationFileSSLProxyCARevocationPath 配置的任何位置找到 CRL 时也会成功。随着此指令的引入,行为已更改:当启用检查时,CRL 必须存在才能使验证成功 - 否则将失败并出现 "无法获取证书 CRL" 错误。

示例

SSLProxyCARevocationCheck chain
top

SSLProxyCARevocationFile 指令

描述用于远程服务器身份验证的连接的 PEM 编码 CA CRL 文件
语法SSLProxyCARevocationFile 文件路径
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

此指令设置一体化文件,您可以在其中组装您与之交互的远程服务器的证书颁发机构 (CA) 的证书吊销列表 (CRL)。这些用于远程服务器身份验证。此类文件只是各种 PEM 编码 CRL 文件的连接,按优先级排序。这可以替代和/或补充 SSLProxyCARevocationPath

示例

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

SSLProxyCARevocationPath 指令

描述用于远程服务器身份验证的 PEM 编码 CA CRL 目录
语法SSLProxyCARevocationPath 目录路径
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

此指令设置您保存与之交互的证书颁发机构 (CA) 的证书吊销列表 (CRL) 的目录。这些用于在远程服务器身份验证上吊销远程服务器证书。

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

示例

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

SSLProxyCheckPeerCN 指令

描述是否检查远程服务器证书的 CN 字段
语法SSLProxyCheckPeerCN on|off
默认值SSLProxyCheckPeerCN on
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

此指令设置是否将远程服务器证书的 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 比较;

示例

SSLProxyCheckPeerCN on
SSLProxyCheckPeerName off
top

SSLProxyCheckPeerExpire 指令

描述是否检查远程服务器证书是否已过期
语法SSLProxyCheckPeerExpire on|off
默认值SSLProxyCheckPeerExpire on
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

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

示例

SSLProxyCheckPeerExpire on
top

SSLProxyCheckPeerName 指令

描述配置远程服务器证书的主机名检查
语法SSLProxyCheckPeerName on|off
默认值SSLProxyCheckPeerName on
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性Apache HTTP 服务器 2.4.5 及更高版本
代理部分上下文在 httpd 2.4.30 及更高版本中允许

此指令在 mod_ssl 充当 SSL 客户端时配置服务器证书的主机名检查。如果请求 URI 中的主机名与证书主体的一个或多个 CN 属性匹配,或者与 subjectAltName 扩展匹配,则检查将成功。如果检查失败,SSL 请求将中止,并返回 502 状态代码(错误网关)。

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

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

top

SSLProxyCipherSuite 指令

描述在 SSL 代理握手过程中可用于协商的密码套件
语法SSLProxyCipherSuite [协议] 密码规范
默认值SSLProxyCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

等效于 SSLCipherSuite,但用于代理连接。有关更多信息,请参阅 SSLCipherSuite

top

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>
top

SSLProxyMachineCertificateChainFile 指令

描述代理用于选择证书的连接的 PEM 编码 CA 证书文件
语法SSLProxyMachineCertificateChainFile 文件名
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

此指令设置您保存所有使用中的客户端证书的证书链的一体化文件。如果远程服务器提供了一系列不是配置的客户端证书的直接签署者的 CA 证书,则需要此指令。

此引用的文件只是各种 PEM 编码证书文件的连接。启动时,将检查每个配置的客户端证书,并构建信任链。

安全警告

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

示例

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

SSLProxyMachineCertificateFile 指令

描述代理使用的连接的 PEM 编码客户端证书和密钥文件
语法SSLProxyMachineCertificateFile 文件名
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许
仅在 httpd 2.4.59 及更高版本中允许包含非叶子 (CA) 证书。

此指令设置您保存用于代理服务器向远程服务器身份验证的证书和密钥的一体化文件。

此引用的文件只是各种 PEM 编码证书文件的连接。使用此指令替代或补充 SSLProxyMachineCertificatePath。引用的文件可以包含任意数量的客户端证书和关联私钥对。每对可以按 (证书,密钥) 或 (密钥,证书) 顺序指定。非叶子 (CA) 证书也可以包含在文件中,并且被视为使用 SSLProxyMachineCertificateChainFile 配置一样。

当远程服务器要求提供客户端证书时,服务器应该在挑战中提供一个可接受的证书颁发机构名称列表。如果没有提供这样的列表,mod_ssl将使用第一个配置的客户端证书/密钥。如果提供了 CA 名称列表,mod_ssl将遍历该列表,并尝试找到一个配置的客户端证书,该证书是由该 CA 直接颁发的,或者是由任何数量的中间 CA 证书间接颁发的。中间 CA 证书链可以从文件中包含的证书构建,也可以使用SSLProxyMachineCertificateChainFile配置。第一个配置的匹配证书将被提供以响应挑战。

如果远程服务器提供了 CA 名称列表,并且没有找到匹配的客户端证书,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"
top

SSLProxyMachineCertificatePath 指令

描述代理使用的 PEM 编码的客户端证书和密钥的目录
语法SSLProxyMachineCertificatePath 目录
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块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/"
top

SSLProxyProtocol 指令

描述配置可用于代理的 SSL 协议类型
语法SSLProxyProtocol [+|-]协议 ...
默认值SSLProxyProtocol all -SSLv3 (直到 2.4.16: all)
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

此指令可用于控制 mod_ssl 在为代理建立其服务器环境时应使用的 SSL 协议类型。它只连接使用提供的协议之一的服务器。

有关更多信息,请参阅SSLProtocol

top

SSLProxyVerify 指令

描述远程服务器证书验证的类型
语法SSLProxyVerify 级别
默认值SSLProxyVerify none
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

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

以下级别可用于级别

实际上,只有nonerequire级别真正有趣,因为optional级别不适用于所有服务器,而optional_no_ca级别实际上违背了身份验证的理念(但可以用于建立 SSL 测试页面等)。

示例

SSLProxyVerify require
top

SSLProxyVerifyDepth 指令

描述远程服务器证书验证中 CA 证书的最大深度
语法SSLProxyVerifyDepth 数字
默认值SSLProxyVerifyDepth 1
上下文服务器配置、虚拟主机、代理部分
状态扩展
模块mod_ssl
兼容性代理部分上下文在 httpd 2.4.30 及更高版本中允许

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

深度实际上是中间证书颁发机构的最大数量,即在验证远程服务器证书时允许的最大中间 CA 证书数量。深度为 0 表示只接受自签名的远程服务器证书,默认深度为 1 表示远程服务器证书可以是自签名的,也可以由服务器直接知道的 CA 签署(即 CA 的证书在SSLProxyCACertificatePath下),等等。

示例

SSLProxyVerifyDepth 10
top

SSLRandomSeed 指令

描述伪随机数生成器 (PRNG) 种子源
语法SSLRandomSeed 上下文 [字节]
上下文服务器配置
状态扩展
模块mod_ssl

这配置了一个或多个源,用于在 OpenSSL 启动时(上下文startup)和/或在建立新的 SSL 连接之前(上下文connect)对伪随机数生成器 (PRNG) 进行播种。此指令只能在全局服务器上下文中使用,因为 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
top

SSLRenegBufferSize 指令

描述设置 SSL 重新协商缓冲区的大小
语法SSLRenegBufferSize 字节
默认值SSLRenegBufferSize 131072
上下文目录,.htaccess
覆盖AuthConfig
状态扩展
模块mod_ssl

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

请注意,在许多配置中,发送请求主体的客户端将不可信,因此在更改此配置设置时,必须考虑通过消耗内存进行的拒绝服务攻击。

示例

SSLRenegBufferSize 262144
top

SSLRequire 指令

描述仅当任意复杂的布尔表达式为真时才允许访问
语法SSLRequire 表达式
上下文目录,.htaccess
覆盖AuthConfig
状态扩展
模块mod_ssl

SSLRequire 已弃用

SSLRequire已弃用,通常应替换为Require expr。所谓的ap_expr语法Require exprSSLRequire语法的超集,但以下例外

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

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

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

示例

SSLRequire "foobar" in PeerExtList("1.2.3.4.5.6")

关于 PeerExtList 函数的说明

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

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

另请参阅

top

SSLRequireSSL 指令

描述当 HTTP 请求未使用 SSL 时拒绝访问
语法SSLRequireSSL
上下文目录,.htaccess
覆盖AuthConfig
状态扩展
模块mod_ssl

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

示例

SSLRequireSSL
top

SSLSessionCache 指令

描述全局/进程间 SSL 会话缓存的类型
语法SSLSessionCache 类型
默认值SSLSessionCache none
上下文服务器配置
状态扩展
模块mod_ssl

此配置项用于设置全局/进程间 SSL 会话缓存的存储类型。此缓存是一个可选的功能,可以加速并行请求处理。对于同一个服务器进程的请求(通过 HTTP 保持连接),OpenSSL 已经在本地缓存了 SSL 会话信息。但是,由于现代客户端通过并行请求请求内联图像和其他数据(通常最多四个并行请求很常见),这些请求由不同的预先派生的服务器进程处理。这里,进程间缓存有助于避免不必要的会话握手。

目前支持以下五种存储类型

示例

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

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

top

SSLSessionCacheTimeout 指令

描述SSL 会话在会话缓存中过期之前的时间(秒)
语法SSLSessionCacheTimeout
默认值SSLSessionCacheTimeout 300
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性也适用于 Apache 2.4.10 及更高版本中的 RFC 5077 TLS 会话恢复

此指令设置全局/进程间 SSL 会话缓存、OpenSSL 内部内存缓存以及通过 TLS 会话恢复(RFC 5077)恢复的会话中存储的信息的超时时间(以秒为单位)。它可以设置为低至 15 用于测试,但在实际应用中应设置为更高的值,例如 300。

示例

SSLSessionCacheTimeout 600
top

SSLSessionTicketKeyFile 指令

描述TLS 会话票证的持久加密/解密密钥
语法SSLSessionTicketKeyFile 文件路径
上下文服务器配置,虚拟主机
状态扩展
模块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 目前不允许指定票证生命周期的限制。新的票证密钥只有在重新启动 Web 服务器后才会使用。所有现有的会话票证在重新启动后将失效。

票证密钥文件包含敏感的密钥材料,应使用与 SSLCertificateKeyFile 相似的文件权限进行保护。

top

SSLSessionTickets 指令

描述启用或禁用 TLS 会话票证的使用
语法SSLSessionTickets on|off
默认值SSLSessionTickets on
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.4.11 及更高版本中可用,如果使用 OpenSSL 0.9.8f 或更高版本。

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

TLS 会话票证默认情况下是启用的。在没有以适当的频率(例如每天)重新启动 Web 服务器的情况下使用它们会损害完全前向保密。

top

SSLSRPUnknownUserSeed 指令

描述SRP 未知用户种子
语法SSLSRPUnknownUserSeed 秘密字符串
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.4.4 及更高版本中可用,如果使用 OpenSSL 1.0.1 或更高版本

此指令设置用于为未知用户伪造 SRP 用户参数的种子,以避免泄露某个用户是否存在。指定一个秘密字符串。如果未使用此指令,则 Apache 将向指定未知用户名 的客户端返回 UNKNOWN_PSK_IDENTITY 警报。

示例

SSLSRPUnknownUserSeed "secret"

top

SSLSRPVerifierFile 指令

描述SRP 验证器文件的路径
语法SSLSRPVerifierFile 文件路径
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 httpd 2.4.4 及更高版本中可用,如果使用 OpenSSL 1.0.1 或更高版本

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

示例

SSLSRPVerifierFile "/path/to/file.srpv"

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

创建 SRP 验证器文件

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

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

top

SSLStaplingCache 指令

描述配置 OCSP 装订缓存
语法SSLStaplingCache 类型
上下文服务器配置
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

top

SSLStaplingErrorCacheTimeout 指令

描述OCSP 装订缓存中无效响应过期之前的时间(秒)
语法SSLStaplingErrorCacheTimeout
默认值SSLStaplingErrorCacheTimeout 600
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

top

SSLStaplingFakeTryLater 指令

描述为失败的 OCSP 装订查询合成 "tryLater" 响应
语法SSLStaplingFakeTryLater on|off
默认值SSLStaplingFakeTryLater on
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

启用此功能后,如果对 OCSP 响应程序的装订查询失败,mod_ssl 将为客户端合成 "tryLater" 响应。只有在也启用了 SSLStaplingReturnResponderErrors 时才有效。

top

SSLStaplingForceURL 指令

描述覆盖证书的 AIA 扩展中指定的 OCSP 响应程序 URI
语法SSLStaplingForceURL uri
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

top

SSLStaplingResponderTimeout 指令

描述OCSP 装订查询的超时时间
语法SSLStaplingResponderTimeout
默认值SSLStaplingResponderTimeout 10
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

此选项设置对 OCSP 响应程序的查询的超时时间,当启用了 SSLUseStapling 并且 mod_ssl 正在为 OCSP 装订目的查询响应程序时。

top

SSLStaplingResponseMaxAge 指令

描述OCSP 装订响应的最大允许年龄
语法SSLStaplingResponseMaxAge
默认值SSLStaplingResponseMaxAge -1
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

此选项设置在考虑 OCSP 响应用于装订目的时的最大允许年龄(“新鲜度”),即当启用了 SSLUseStapling 时。默认值 (-1) 不强制执行最大年龄,这意味着只要 OCSP 响应的 nextUpdate 字段在将来,这些响应就被认为是有效的。

top

SSLStaplingResponseTimeSkew 指令

描述OCSP 装订响应验证的最大允许时间偏差
语法SSLStaplingResponseTimeSkew
默认值SSLStaplingResponseTimeSkew 300
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

top

SSLStaplingReturnResponderErrors 指令

描述将与装订相关的 OCSP 错误传递给客户端
语法SSLStaplingReturnResponderErrors on|off
默认值SSLStaplingReturnResponderErrors on
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

启用此功能后,mod_ssl 将将来自不成功的装订相关 OCSP 查询的响应(例如,总体状态不是“成功”的响应、证书状态不是“良好”的响应、过期的响应等)传递给客户端。如果设置为 off,则只有指示证书状态为“良好”的响应才会包含在 TLS 握手过程中。

top

SSLStaplingStandardCacheTimeout 指令

描述OCSP 装订缓存中响应过期之前的时间(秒)
语法SSLStaplingStandardCacheTimeout
默认值SSLStaplingStandardCacheTimeout 3600
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

top

SSLStrictSNIVHostCheck 指令

描述是否允许非 SNI 客户端访问基于名称的虚拟主机。
语法SSLStrictSNIVHostCheck on|off
默认值SSLStrictSNIVHostCheck off
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性在 Apache 2.2.12 及更高版本中可用

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

此选项仅在 httpd 针对支持 SNI 的 OpenSSL 版本编译时才可用。

示例

SSLStrictSNIVHostCheck on
top

SSLUserName 指令

描述确定用户名变量名称
语法SSLUserName varname
上下文服务器配置、目录、.htaccess
覆盖AuthConfig
状态扩展
模块mod_ssl

此指令设置 Apache 请求对象中的“用户”字段。较低级别的模块使用此字段来使用字符字符串标识用户。特别是,这可能会导致设置环境变量 REMOTE_USERvarname 可以是任何 SSL 环境变量

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

示例

SSLUserName SSL_CLIENT_S_DN_CN
top

SSLUseStapling 指令

描述在 TLS 握手过程中启用 OCSP 响应的装订
语法SSLUseStapling on|off
默认值SSLUseStapling off
上下文服务器配置,虚拟主机
状态扩展
模块mod_ssl
兼容性如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

OCSP 装订使客户端无需自行查询 OCSP 响应者,但应注意,根据 RFC 6066 规范,服务器的 CertificateStatus 响应可能只包含单个证书的 OCSP 响应。对于在其链中包含中间 CA 证书的服务器证书(如今的典型情况),因此,当前实现中的装订仅部分实现了“节省往返行程和资源”的目标 - 另请参阅 RFC 6961(TLS 多证书状态扩展)。

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

top

SSLVerifyClient 指令

描述客户端证书验证类型
语法SSLVerifyClient level
默认值SSLVerifyClient none
上下文服务器配置、虚拟主机、目录、.htaccess
覆盖AuthConfig
状态扩展
模块mod_ssl

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

以下级别可用于级别

示例

SSLVerifyClient require
top

SSLVerifyDepth 指令

描述客户端证书验证中 CA 证书的最大深度
语法SSLVerifyDepth number
默认值SSLVerifyDepth 1
上下文服务器配置、虚拟主机、目录、.htaccess
覆盖AuthConfig
状态扩展
模块mod_ssl

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

深度实际上是中间证书颁发机构的最大数量,即在验证客户端证书时允许的最大 CA 证书数量。深度为 0 表示仅接受自签名客户端证书,默认深度为 1 表示客户端证书可以自签名,也可以由服务器直接知道的 CA 签名(即 CA 的证书位于 SSLCACertificatePath 下),等等。

示例

SSLVerifyDepth 10

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果这些评论已实施或被认为无效/主题无关,则我们的版主可能会将其删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表