• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mod_ssl

    描述:使用安全套接字层(SSL)和传输层安全性(TLS)协议的强加密技术
    状态:延期
    模块标识符:ssl_module
    源文件:mod_ssl.c

    摘要

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

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

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

    环境变量

    可以将此模块配置为向 SSI 和 CGI 命名空间提供若干 SSL 信息项作为附加环境变量。出于性能原因,默认情况下不提供此信息。(参见SSLOptions StdEnvVars,below.)生成的变量列在下面的 table 中。为了向后兼容,可以使用不同的名称提供信息。请查看兼容性章节以获取有关兼容性变量的详细信息。

    变量名:值类型:描述:
    HTTPS正在使用 HTTPS。
    SSL_PROTOCOLstringSSL 协议 version(SSLv3,TLSv1,TLSv1.1,TLSv1.2)
    SSL_SESSION_IDstringhex-encoded SSL session id
    SSL_SESSION_RESUMEDstring初始或恢复 SSL Session。注意:如果正在使用 HTTP KeepAlive,则可以在相同(初始或已恢复)SSL session 上提供多个请求
    SSL_SECURE_RENEGstringtrue如果支持安全重新协商,否则false
    SSL_CIPHERstring密码规范 name
    SSL_CIPHER_EXPORTstringtrue如果密码是 export 密码
    SSL_CIPHER_USEKEYSIZE密码位数(实际使用)
    SSL_CIPHER_ALGKEYSIZE密码位数(可能)
    SSL_COMPRESS_METHODstring协商的 SSL 压缩方法
    SSL_VERSION_INTERFACEstringmod_ssl 程序 version
    SSL_VERSION_LIBRARYstringOpenSSL 程序 version
    SSL_CLIENT_M_VERSIONstringclient 证书的 version
    SSL_CLIENT_M_SERIALstringclient 证书的序列号
    SSL_CLIENT_S_DNstringclient 证书中的主题 DN
    SSL_CLIENT_S_DN_ x509stringclient 的主题 DN 的 Component
    SSL_CLIENT_SAN_Email_ nstringClient 证书的 subjectAltName 类型为 rfc822Name 的扩展条目
    SSL_CLIENT_SAN_DNS_ nstringClient 证书的 subjectAltName 类型为 dNSName 的扩展条目
    SSL_CLIENT_SAN_OTHER_msUPN_ nstringClient 证书的 subjectAltName 类型为 otherName 的扩展条目,Microsoft User Principal Name 表单(OID 1.3.6.1.4.1.311.20.2.3)
    SSL_CLIENT_I_DNstring颁发者 client 证书的 DN
    SSL_CLIENT_I_DN_ x509stringclient 的 Issuer DN 的 Component
    SSL_CLIENT_V_STARTstringclient 证书的有效期(start time)
    SSL_CLIENT_V_ENDstringclient 证书的有效期(结束 time)
    SSL_CLIENT_V_REMAINstringclient 证书过期前的天数
    SSL_CLIENT_A_SIGstring用于签署 client 证书的算法
    SSL_CLIENT_A_KEYstring用于 client 证书的 public key 的算法
    SSL_CLIENT_CERTstringPEM-encoded client 证书
    SSL_CLIENT_CERT_CHAIN_ nstringclient 证书链中的 PEM-encoded 证书
    SSL_CLIENT_CERT_RFC4523_CEAstring证书的序列号和颁发者。格式与 RFC4523 中的 CertificateExactAssertion 格式相匹配
    SSL_CLIENT_VERIFYstringNONESUCCESSGENEROUSFAILED:原因
    SSL_SERVER_M_VERSIONstringversion 服务器证书
    SSL_SERVER_M_SERIALstring服务器证书的序列号
    SSL_SERVER_S_DNstring服务器证书中的主题 DN
    SSL_SERVER_SAN_Email_ nstring服务器证书的 subjectAltName 扩展条目类型为 rfc822Name
    SSL_SERVER_SAN_DNS_ nstring服务器证书的 subjectAltName 类型为 dNSName 的扩展条目
    SSL_SERVER_SAN_OTHER_dnsSRV_ nstring服务器证书的 subjectAltName 扩展条目类型为 otherName,SRVName 形式(OID 1.3.6.1.5.5.7.8.7,RFC 4985)
    SSL_SERVER_S_DN_ x509string服务器主题 DN 的组件
    SSL_SERVER_I_DNstring服务器证书的颁发者 DN
    SSL_SERVER_I_DN_ x509string服务器的 Issuer DN 的组件
    SSL_SERVER_V_STARTstring服务器证书的有效性(start time)
    SSL_SERVER_V_ENDstring服务器证书的有效期(结束 time)
    SSL_SERVER_A_SIGstring用于签名服务器证书的算法
    SSL_SERVER_A_KEYstring用于服务器证书的 public key 的算法
    SSL_SERVER_CERTstringPEM-encoded 服务器证书
    SSL_SRP_USERstringSRP 用户名
    SSL_SRP_USERINFOstringSRP 用户信息
    SSL_TLS_SNIstringSNI TLS 扩展的内容(如果随 ClientHello 提供)

    x509 指定 X.509 DN 的 component;C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email之一。在 httpd 2.2.0 和更高版本中,x509 还可能包含数字_n后缀。如果相关 DN 包含相同 name 的多个属性,则此后缀将用作 zero-based 索引以选择特定属性。对于 example,服务器证书主题 DN 包含两个 OU 属性,SSL_SERVER_S_DN_OU_0SSL_SERVER_S_DN_OU_1可用于 reference 每个。没有_n后缀的变量 name 等同于具有_0后缀的 name;第一个(或唯一的)属性。当使用SSLOptions指令的StdEnvVars选项填充环境 table 时,任何 DN 的第一个(或唯一)属性仅在 non-suffixed name 下添加; i.e。没有添加_0后缀条目。

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

    Apache HTTPD 2.3.11 中* _DN 变量的格式已更改。有关详细信息,请参阅SSLOptions选项以获取SSLOptions。

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

    许多其他环境变量也可用于SSLRequire表达式或自定义 log 格式:

    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
      这将使用 name headername 扩展到请求标头的 value。

    自定义 Log 格式

    当mod_ssl内置到 Apache 或至少加载时(在 DSO 情况下),mod_log_config的自定义 Log 格式存在其他函数。首先还有一个额外的```+101+``+102+`''eXtension 格式 function,它可用于扩展任何模块提供的任何变量,尤其是 mod_ssl 提供的变量,你可以在上面的 table 中找到它们。

    为了向后兼容,还提供了一个特殊的```+103+``+104+`''加密格式 function。有关此 function 的信息在兼容性章节中提供。

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

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

    请求备注

    mod_ssl sets“注释”可以在 log中使用%{name}n格式 string 的 log中使用的请求。

    支持的说明如下:

    • ssl-access-forbidden
      如果由于 SSLRequire 或 SSLRequireSSL 指令而拒绝访问,则此注释将设置为 value 1。
    • ssl-secure-reneg
      如果 mod_ssl 是针对支持安全重新协商扩展的 OpenSSL 的 version 构建的,则如果 SSL 用于当前连接,则此注释将设置为 value 1,client 也支持安全重新协商扩展。如果 client 不支持安全重新协商扩展,则将注释设置为 value 0.如果 mod_ssl 不是针对支持安全重新协商的 OpenSSL 的 version 构建的,或者如果当前连接未使用 SSL,则说明为没有设置。

    表达式解析器扩展

    当mod_ssl内置到 Apache 或至少加载时(在 DSO 情况下)mod_ssl提供的任何变量都可以在ap_expr Expression Parser的表达式中使用。可以使用语法`%{` varname `}`''. Starting with version 2.4.18 one can also use the[mod_rewrite](mod-mod_rewrite.html)style syntax%{SSL: varname }''或 function 样式语法+130++131+`'来引用变量。

    Example(使用 modheaders)

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

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

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

    mod_ssl提供了一些身份验证提供程序,用于mod_authz_core的要求指令。

    需要 ssl

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

    Require ssl
    

    要求 ssl-verify-client

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

    如果用户使用 client 证书或用户名和密码对用户进行身份验证,则以下 example 将授予访问权限。

    Require ssl-verify-client
    Require valid-user
    

    SSLCACertificateFile 指令

    描述:Client Auth 的串联 PEM-encoded CA 证书文件
    句法:SSLCACertificateFile file-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    该指令设置 all-in-one 文件,您可以在其中汇编您处理的客户端的证书证书 Authorities(CA)。这些用于 Client 身份验证。这样的文件只是各种 PEM-encoded Certificate files 的串联,按优先顺序排列。除了SSLCACertificatePath之外,这可以另外 and/or 使用。

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

    SSLCACertificatePath 指令

    描述:Client Auth 的 PEM-encoded CA 证书目录
    句法:SSLCACertificatePath directory-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    此指令设置保存您所处理的客户端的认证证书 Authorities(CA)的目录。这些用于验证 Client 身份验证上的 client 证书。

    此目录中的 files 必须为 PEM-encoded,并通过哈希文件名进行访问。所以通常你不能只将 Certificate files 放在那里:你还必须创建名为 hash-value .N的符号链接。并且您应始终确保此目录包含相应的符号链接。

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

    SSLCADNRequestFile 指令

    描述:用于定义可接受的 CA 名称的串联 PEM-encoded CA 证书的文件
    句法:SSLCADNRequestFile file-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    当 mod_ssl 请求 client 证书时,可以在 SSL 握手中向 client 发送可接受的 Certificate Authority 名称列表。 client 可以使用这些 CA 名称从适当的 client 证书中选择适当的 client 证书。

    如果没有给出指令SSLCADNRequestPath或SSLCADNRequestFile,则发送给 client 的可接受 CA 名称集合是SSLCACertificateFile和SSLCACertificatePath指令给出的所有 CA 证书的名称;换句话说,实际用于验证 client 证书的 CA 的名称。

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

    SSLCADNRequestFile必须指定包含 PEM-encoded CA 证书串联的 all-in-one 文件。

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

    SSLCADNRequestPath 指令

    描述:用于定义可接受的 CA 名称的 PEM-encoded CA 证书目录
    句法:SSLCADNRequestPath directory-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

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

    此目录中的 files 必须为 PEM-encoded,并通过哈希文件名进行访问。所以通常你不能只将 Certificate files 放在那里:你还必须创建名为 hash-value .N的符号链接。并且您应始终确保此目录包含相应的符号链接。

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

    SSLCARevocationCheck 指令

    描述:启用 CRL-based 吊销检查
    句法:SSLCARevocationCheck chain\|leaf\|none[flags ...]
    默认:SSLCARevocationCheck none
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.21 或更高版本中可用的可选标志

    启用证书吊销列表(CRL)检查。必须至少配置SSLCARevocationFile或SSLCARevocationPath中的一个。设置为chain(推荐设置)时,CRL 检查将应用于链中的所有证书,而将其设置为leaf会将检查限制为 end-entity 证书。

    可用的标志是:

    • no_crl_for_cert_ok
      在 version 2.3.15 之前,当在SSLCARevocationFile或SSLCARevocationPath配置的任何位置中找不到已检查 certificate(s 的 CRL(s 时,mod_ssl 中的 CRL 检查也成功。

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

    flag no_crl_for_cert_ok允许恢复以前的行为。

    SSLCARevocationCheck chain
    

    兼容版本 2.2

    SSLCARevocationCheck chain no_crl_for_cert_ok
    

    SSLCARevocationFile 指令

    描述:Client Auth 的串联 PEM-encoded CA CRL 文件
    句法:SSLCARevocationFile file-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    此指令设置 all-in-one 文件,您可以在其中汇编认证 Authorities(CA)的证书撤销 Lists(CRL),其中您处理的是 clients。这些用于 Client 身份验证。这样的文件只是各种 PEM-encoded CRL files 的串联,按优先顺序排列。除了SSLCARevocationPath之外,这可以另外 and/or 使用。

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

    SSLCARevocationPath 指令

    描述:Client Auth 的 PEM-encoded CA CRL 目录
    句法:SSLCARevocationPath directory-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    此指令设置保存证书撤销_Cists(CRL)的目录,该证书撤销 Lists(CRL)是您处理的客户端的证书 Authorities(CA)。这些用于撤消 Client 身份验证上的 client 证书。

    此目录中的 files 必须为 PEM-encoded,并通过哈希文件名进行访问。所以通常你不仅要将 CRL files 放在那里。此外,您必须创建名为 hash-value .rN的符号链接。并且您应始终确保此目录包含相应的符号链接。

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

    SSLCertificateChainFile 指令

    描述:PEM-encoded 服务器 CA 证书的文件
    句法:SSLCertificateChainFile file-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    SSLCertificateChainFile 已弃用

    当了 SSLCertificateFile被扩展为从服务器证书文件加载中间 CA 证书时与 version 2.4.8 一起变得过时了。

    此指令设置可选的 all-in-one 文件,您可以在其中汇编构成服务器证书的证书链的 Certification Authorities(CA)证书。这从颁发服务器证书的 CA 证书开始,可以达到根 CA 证书。这样的文件只是各种 PEM-encoded CA 证书文件的串联,通常在证书链 order 中。

    除了服务器证书之外,还应该使用 and/or 或SSLCACertificatePath来显式构建除了服务器证书之外发送到浏览器的服务器证书链。使用 client 身份验证时,避免与 CA 证书冲突特别有用。因为虽然将服务器证书链的 CA 证书放入SSLCACertificatePath对证书链构造具有相同的效果,但它具有 side-effect,client 身份验证也接受由此相同 CA 证书颁发的 client 证书。

    但要小心:只有在使用单个基于 RSA 或 DSA 的服务器证书时,才能提供证书链。如果您使用的是耦合 RSA DSA 证书对,则仅当两个证书实际使用相同的证书链时才会起作用。否则浏览器会在这种情况下混淆。

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

    SSLCertificateFile 指令

    描述:服务器 PEM-encoded X.509 证书数据文件
    句法:SSLCertificateFile file-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    该指令指向具有 PEM 格式的证书数据的文件。该文件至少必须包含 end-entity(叶子)证书。该指令可以多次使用(引用不同的文件名)以支持多种服务器身份验证算法-通常是 RSA,DSA 和 ECC。支持的算法数量取决于用于 mod_ssl 的 OpenSSL version:使用 version 1.0.0 或更高版本,openssl list-public-key-algorithms将输出支持的算法列表,另请参阅下面关于 1.0.2 之前的 OpenSSL 版本限制的说明以及解决这些问题的方法。

    files 还可以包括从叶到根排序的中间 CA 证书。 version 2.4.8 及更高版本支持此功能,并废弃SSLCertificateChainFile。当 running 与 OpenSSL 1.0.2 或更高版本时,这允许在 per-certificate 基础上配置中间 CA 链。

    自定义 DH 参数和临时密钥的 EC 曲线 name 也可以添加到使用了 SSLCertificateFile配置的第一个文件的末尾。 version 2.4.7 或更高版本支持此功能。可以使用命令openssl dhparamopenssl ecparam生成这些参数。可以将参数 as-is 添加到第一个证书文件的末尾。只有第一个文件可用于自定义参数,因为它们独立于身份验证算法类型应用。

    最后,end-entity 证书的私有 key 也可以添加到证书文件中,而不是使用单独的了 SSLCertificateKeyFile指令。这种做法非常沮丧。如果使用它,则必须使用单独的 key 文件在证书之后配置使用此类嵌入 key 的证书 files。如果私有 key 被加密,则在启动 time 时强制使用密码对话框。

    DH 参数互操作性与质数> 1024 位

    从 version 2.4.7 开始,mod_ssl 使用标准化的 DH 参数,其主要长度为 2048,3072 和 4096 位,并且具有 6144 和 8192 位的额外素数长度,以 version 2.4.10(来自RFC 3526)开头,并根据它们将它们移交给 clients 证书长度为 RSA/DSA key。特别是使用 Java-based clients(Java 7 或更早版本),这可能会导致握手失败-请参阅此FAQ 答案以解决此类问题。

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

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

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

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

    SSLCertificateFile "/usr/local/apache2/conf/ssl.crt/server.crt"
    

    SSLCertificateKeyFile 指令

    描述:服务器 PEM-encoded private key 文件
    句法:SSLCertificateKeyFile file-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    该指令指向服务器的 PEM-encoded private key 文件。如果包含的私有 key 已加密,则在启动 time 时强制使用密码短语对话框。

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

    私有 key 也可以与了 SSLCertificateFile给出的文件中的证书组合,但是这种做法非常不鼓励。如果使用它,则必须使用单独的 key 文件在证书之后配置使用此类嵌入 key 的证书 files。

    SSLCertificateKeyFile "/usr/local/apache2/conf/ssl.key/server.key"
    

    SSLCipherSuite 指令

    描述:密码套件可用于 SSL 握手中的 negotiation
    句法:SSLCipherSuite[protocol] cipher-spec
    默认:SSLCipherSuite DEFAULT(depends on OpenSSL version)
    Context:server config,virtual host,directory,.htaccess
    覆盖:AuthConfig
    状态:延期
    模块:mod_ssl

    此复杂指令使用由 OpenSSL 密码规范组成的 colon-separated cipher-spec string 来配置允许 client 在 SSL 握手阶段协商的密码套件。可选的协议说明符可以为特定的 SSL version 配置密码套件。可能的值包括所有 SSL 协议的“SSL”,包括 TLSv1.2.

    请注意,此指令可以在 per-server 和 per-directory context 中使用。在 per-server context 中,它在建立连接时应用于标准 SSL 握手。在 per-directory context 中,它会在读取 HTTP 请求之后但在发送 HTTP 响应之前强制与重新配置的密码套件进行 SSL 重新协商。

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

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

    cipher-spec 中的 SSL 密码规范由 4 个主要属性和一些额外的小属性组成:

    • Key 交换算法:
      RSA,Diffie-Hellman,Elliptic Curve Diffie-Hellman,Secure Remote Password
    • 验证算法:
      RSA,Diffie-Hellman,DSS,ECDSA 或 none。
    • Cipher/Encryption 算法:
      AES,DES,Triple-DES,RC4,RC2,IDEA 等
    • MAC 摘要算法:
      MD5,SHA 或 SHA1,SHA256,SHA384。

    SSL 密码也可以是 export 密码。不再支持 SSLv2 密码。要指定要使用的密码,可以指定所有密码,一个在 time,或使用别名指定密码的首选项和 order(请参阅表格 1)。实际可用的密码和别名取决于使用的 openssl version。较新的 openssl 版本可能包含其他密码。

    标签描述
    Key 交换算法:
    kRSARSA key 交换
    kDHrDiffie-Hellman key 与 RSA key 交换
    kDHdDiffie-Hellman key 与 DSA key 交换
    kEDH短暂的(temp.key)Diffie-Hellman key 交换(无证书)
    kSRP安全的 Remote 密码(SRP)key 交换
    验证算法:
    aNULL没有身份验证
    aRSARSA 身份验证
    aDSSDSS 身份验证
    aDHDiffie-Hellman 认证
    密码编码算法:
    eNULL没有加密
    NULLeNULL 的别名
    AESAES 加密
    DESDES 加密
    3DESTriple-DES 加密
    RC4RC4 加密
    RC2RC2 加密
    IDEAIDEA 加密
    MAC 摘要算法:
    MD5MD5 哈希功能
    SHA1SHA1 哈希 function
    SHASHA1 的别名
    SHA256SHA256 哈希功能
    SHA384SHA384 哈希功能
    别名:
    SSLv3所有 SSL version 3.0 密码
    TLSv1所有 TLS version 1.0 密码
    EXP所有 export 密码
    EXPORT40只有 40-bit export 密码
    EXPORT56只有 56-bit export 密码
    LOW所有低强度密码(无 export,单 DES)
    MEDIUM所有具有 128 位加密的密码
    HIGH所有使用 Triple-DES 的密码
    RSA所有使用 RSA key 交换的密码
    DH所有密码都使用 Diffie-Hellman key 交换
    EDH所有密码都使用 Ephemeral Diffie-Hellman key 交换
    ECDH椭圆曲线 Diffie-Hellman key 交换
    ADH所有密码都使用匿名 Diffie-Hellman key 交换
    AECDH所有密码都使用 Anonymous Elliptic Curve Diffie-Hellman key exchange
    SRP所有密码都使用安全远程密码(SRP)key 交换
    DSS所有使用 DSS 身份验证的密码
    ECDSA所有使用 ECDSA 身份验证的密码
    aNULL所有密码都不使用身份验证

    现在,这变得有趣的是,这些可以放在一起,以指定您希望使用的 order 和密码。为了加快速度,某些密码组也有别名(SSLv3, TLSv1, EXP, LOW, MEDIUM, HIGH)。这些标签可以与前缀连接在一起以形成 cipher-spec。可用的前缀是:

    • none:将密码添加到列表中
    • +:将匹配的密码移动到列表中的当前位置
    • -:从列表中删除密码(可以在以后添加)
    • !:完全从列表中删除密码(不能**以后再添加)

    aNULL,eNULL 和 EXP 密码始终被禁用

    从 version 2.4.7 开始,始终禁用 null 和 export-grade 密码,因为 mod_ssl 无条件地在初始化时将!aNULL:!eNULL:!EXP添加到任何密码 string。

    查看所有这些的更简单方法是使用`openssl ciphers -v`'' command which provides a nice way to successively create the correct cipher-spec string. The default cipher-spec string depends on the version of the OpenSSL libraries used. Let's suppose it isRC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5''表示以下内容:将RC4-SHAAES128-SHA放在开头。我们这样做,因为这些密码在速度和安全性之间提供了良好的折衷。接下来,包括高中安全密码。最后,删除所有未经过身份验证的密码,i.e。对于 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
    
    Cipher-Tag协议Key Ex。验证。ENC。苹果电脑类型
    RSA 密码:
    DES-CBC3-SHA在 SSLv3RSARSA3DES(168)SHA1
    IDEA-CBC-SHA在 SSLv3RSARSAIDEA(128)SHA1
    RC4-SHA在 SSLv3RSARSARC4(128)SHA1
    RC4-MD5在 SSLv3RSARSARC4(128)MD5
    DES-CBC-SHA在 SSLv3RSARSADES(56)SHA1
    EXP-DES-CBC-SHA在 SSLv3RSA(512)RSADES(40)SHA1出口
    EXP-RC2-CBC-MD5在 SSLv3RSA(512)RSARC2(40)MD5出口
    EXP-RC4-MD5在 SSLv3RSA(512)RSARC4(40)MD5出口
    NULL-SHA在 SSLv3RSARSA没有SHA1
    NULL-MD5在 SSLv3RSARSA没有MD5
    Diffie-Hellman 密码:
    ADH-DES-CBC3-SHA在 SSLv3DH没有3DES(168)SHA1
    ADH-DES-CBC-SHA在 SSLv3DH没有DES(56)SHA1
    ADH-RC4-MD5在 SSLv3DH没有RC4(128)MD5
    EDH-RSA-DES-CBC3-SHA在 SSLv3DHRSA3DES(168)SHA1
    EDH-DSS-DES-CBC3-SHA在 SSLv3DHDSS3DES(168)SHA1
    EDH-RSA-DES-CBC-SHA在 SSLv3DHRSADES(56)SHA1
    EDH-DSS-DES-CBC-SHA在 SSLv3DHDSSDES(56)SHA1
    EXP-EDH-RSA-DES-CBC-SHA在 SSLv3DH(512)RSADES(40)SHA1出口
    EXP-EDH-DSS-DES-CBC-SHA在 SSLv3DH(512)DSSDES(40)SHA1出口
    EXP-ADH-DES-CBC-SHA在 SSLv3DH(512)没有DES(40)SHA1出口
    EXP-ADH-RC4-MD5在 SSLv3DH(512)没有RC4(40)MD5出口

    SSLC 压缩指令

    描述:在 SSL level 上启用压缩
    句法:SSLCompression on\|off
    默认:SSLCompression off
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8 或更高版本,则在 httpd 2.4.3 及更高版本中可用;如果使用 OpenSSL 1.0.0 或更高版本,则可以使用虚拟 host 作用域。在 version 2.4.3 中,默认值为on

    该指令允许在 SSL level 上启用压缩。

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

    SSLCryptoDevice 指令

    描述:允许使用加密硬件加速器
    句法:SSLCryptoDevice engine
    默认:SSLCryptoDevice builtin
    Context:服务器配置
    状态:延期
    模块:mod_ssl

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

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

    # For a Broadcom accelerator:
    SSLCryptoDevice ubsec
    

    SSLEngine 指令

    描述:SSL 引擎操作开关
    句法:SSLEngine on\|off\|optional
    默认:SSLEngine off
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

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

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

    在 Apache 2.1 及更高版本中,SSLEngine可以设置为optional。这样可以支持RFC 2817,在 HTTP/1.1 内升级到 TLS。在此 time,没有 web 浏览器支持 RFC 2817。

    SSLFIPS 指令

    描述:SSL FIPS 模式切换
    句法:SSLFIPS on\|off
    默认:SSLFIPS off
    Context:服务器配置
    状态:延期
    模块:mod_ssl

    该指令切换 SSL library FIPS_mode flag 的用法。它必须在 global 服务器 context 中设置,并且不能配置冲突的设置(SSLFIPS on 后跟 SSLFIPS off 或类似)。该模式适用于所有 SSL library 操作。

    如果 httpd 是针对不支持 FIPS_mode flag 的 SSL library 编译的,则SSLFIPS on将失败。有关在 FIPS 140-2 批准操作模式下使用 mod_ssl 的特定要求,请参阅 SSL 提供程序 library 的 FIPS 140-2 Security Policy 文档;请注意,mod_ssl 本身未经过验证,但可以使用 FIPS 140-2 验证的加密模块进行验证,当所有组件按照适用的 Security Policy 规定的指导进行组装和操作时。

    SSLHonorCipherOrder 指令

    描述:选择优先选择服务器的密码首选项 order
    句法:SSLHonorCipherOrder on\|off
    默认:SSLHonorCipherOrder off
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

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

    SSLHonorCipherOrder on
    

    SSLInsecureRenegotiation 指令

    描述:选项以支持不安全的重新协商
    句法:SSLInsecureRenegotiation on\|off
    默认:SSLInsecureRenegotiation off
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8m 或更高版本,则在 httpd 2.2.15 及更高版本中可用

    如最初指定的那样,所有版本的 SSL 和 TLS 协议(最多包括 TLS/1.2)在重新协商期间都容易受到 Man-in-the-Middle 攻击(CVE-2009-3555)的攻击。此漏洞允许攻击者将选定的明文“前缀”到 HTTP 请求,如 web 服务器所示。如果 client 和服务器都支持,则会开发一个协议扩展来修复此漏洞。

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

    安全警告

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

    SSLInsecureRenegotiation on
    

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

    SSLOCSPDefaultResponder 指令

    描述:设置 OCSP 验证的默认响应器 URI
    句法:SSLOCSPDefaultResponder uri
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

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

    SSLOCSPEnable 指令

    描述:启用 client 证书链的 OCSP 验证
    句法:SSLOCSPEnable on\|leaf\|off
    默认:SSLOCSPEnable off
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:模式叶在 httpd 2.4.34 和更高版本中可用

    此选项启用 client 证书链的 OCSP 验证。如果启用此选项,则在正常验证(包括 CRL 检查)发生后,将针对 OCSP 响应程序验证 client 证书链中的证书。在'leaf'模式下,只验证 client 证书本身。

    使用的 OCSP 响应器要么从证书本身提取,要么由 configuration 派生;请参阅SSLOCSPDefaultResponder和SSLOCSPOverrideResponder指令。

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

    SSLOCSPNoverify 指令

    描述:跳过 OCSP 响应者证书验证
    句法:SSLOCSPNoverify On/Off
    默认:SSLOCSPNoverify Off
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.7 或更高版本,则在 httpd 2.4.26 及更高版本中可用

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

    SSLOCSPOverrideResponder 指令

    描述:强制使用默认响应器 URI 进行 OCSP 验证
    句法:SSLOCSPOverrideResponder on\|off
    默认:SSLOCSPOverrideResponder off
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    此选项强制在 OCSP 证书验证期间使用配置的默认 OCSP 响应程序,无论证书是否经过验证引用 OCSP 响应程序。

    SSLOCSPProxyURL 指令

    描述:用于 OCSP 请求的代理 URL
    句法:SSLOCSPProxyURL url
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:可在 httpd 2.4.19 及更高版本中使用

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

    SSLOCSPResponderCertificateFile 指令

    描述:一组受信任的 PEM 编码的 OCSP 响应器证书
    句法:SSLOCSPResponderCertificateFile file
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.7 或更高版本,则在 httpd 2.4.26 及更高版本中可用

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

    SSLOCSPResponderTimeout 指令

    描述:OCSP 查询超时
    句法:SSLOCSPResponderTimeout seconds
    默认:SSLOCSPResponderTimeout 10
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    当SSLOCSPEnable打开时,此选项设置查询到 OCSP 响应程序的超时。

    SSLOCSPResponseMaxAge 指令

    描述:OCSP 响应的最大允许年龄
    句法:SSLOCSPResponseMaxAge seconds
    默认:SSLOCSPResponseMaxAge -1
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

    此选项设置 OCSP 响应的最大允许年龄(“新鲜度”)。默认的 value(-1)不会强制执行最大年龄,这意味着 OCSP 响应被视为 long,因为它们的nextUpdate字段是将来的。

    SSLOCSPResponseTimeSkew 指令

    描述:OCSP 响应验证的最大允许 time 偏差
    句法:SSLOCSPResponseTimeSkew seconds
    默认:SSLOCSPResponseTimeSkew 300
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

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

    SSLOCSPUseRequestNonce 指令

    描述:在 OCSP 查询中使用随机数
    句法:SSLOCSPUseRequestNonce on\|off
    默认:SSLOCSPUseRequestNonce on
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:可在 httpd 2.4.10 及更高版本中使用

    此选项确定对 OCSP 响应程序的查询是否应包含 nonce。默认情况下,始终使用查询现时并根据响应的一个进行检查。当响应者不使用随机数(e.g. Microsoft OCSP Responder)时,应该将此选项设置为off

    SSLOpenSSLConfCmd 指令

    描述:通过 SSL_CONF API 配置 OpenSSL 参数
    句法:SSLOpenSSLConfCmd command-name command-value
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 1.0.2 或更高版本,则在 httpd 2.4.8 及更高版本中可用

    该指令将 OpenSSL 的 SSL_CONF API 暴露给 mod_ssl,允许灵活地配置 OpenSSL 参数,而无需在将新的 features 添加到 OpenSSL 时实现额外的mod_ssl指令。

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

    一些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 引擎 run-time 选项
    句法:SSLOptions[+\|-]option ...
    Context:server config,virtual host,directory,.htaccess
    覆盖:选项
    状态:延期
    模块:mod_ssl

    该指令可用于在 per-directory 基础上控制各种 run-time 选项。通常,如果多个SSLOptions可以应用于目录,则完全采用最具体的一个;选项未合并。但是,如果SSLOptions指令上的所有选项都以加号(+)或减号(-)开头,则合并选项。任何以+开头的选项都会添加到当前有效的选项中,并且从当前有效的选项中删除任何前面带有-的选项。

    可用选项包括:

    • StdEnvVars
      启用此选项后,将创建标准的 SSL 相关 CGI/SSI 环境变量集。由于 performance 原因,默认情况下禁用此默认值,因为信息提取 step 是一项相当昂贵的操作。因此,通常只为 CGI 和 SSI 请求启用此选项。
    • ExportCertData
      启用此选项后,将创建其他 CGI/SSI 环境变量:SSL_SERVER_CERTSSL_CLIENT_CERTSSL_CLIENT_CERT_CHAIN_ n(n = 0,1,2,..)。这些变量包含当前 HTTPS 连接的 PEM-encoded X.509 服务器证书和 client,可以使用通过 CGI 脚本进行更深入的证书检查。此外,还提供了 client 证书链的所有其他证书。这会使环境膨胀一点,这就是为什么你必须使用这个选项来按需启用它。
    • FakeBasicAuth
      启用此选项后,Client X509 证书的主题可分辨 Name(DN)将转换为 HTTP 基本授权用户名。这意味着标准 Apache 身份验证方法可用于访问控制。用户 name 只是 Client 的 X509 证书的主题(可以通过 running OpenSSL 的openssl x509命令确定:openssl x509 -noout -subject -in certificate .crt)。请注意,没有从用户获得密码。用户文件中的每个条目都需要此密码:`xxj31ZMTZzkVA`'', which is the DES-encrypted version of the word ``password`''. Those who live under MD5-based encryption(for instance under FreeBSD or BSD/OS, etc.)should use the following MD5 hash of the same word:$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/''。

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

    • StrictRequire
      SSLRequireSSLSSLRequire成功决定禁止访问时,这会强制禁止访问。通常默认情况下是`Satisfy any`'' directive is used, and other access restrictions are passed, denial of access due to `SSLRequireSSL` or `SSLRequire` is overridden(because that's how the Apache `Satisfy` mechanism should work.)But for strict access restriction you can use `SSLRequireSSL` and/or `SSLRequire` in combination with anSSLOptions +StrictRequire''。一旦 mod_ssl 决定拒绝访问,那么额外的“Satisfy Any”就没有机会了。
    • OptRenegotiate当在 per-directory context 中使用 SSL 指令时,这可以实现优化的 SSL 连接重新协商处理。默认情况下,启用严格 scheme,其中每次 per-directory 重新配置 SSL 参数都会导致完整的 SSL 重新协商握手。当使用此选项时,mod_ssl 尝试通过执行更细粒度(但仍然安全)的参数检查来避免不必要的握手。然而,这些细粒度检查有时可能不是用户期望的,所以请仅在 per-directory 基础上启用它。
    • LegacyDNStringFormat
      此选项会影响SSL_{CLIENT,SERVER}_{I,S}_DN变量的值的格式。自 version 2.3.11 以来,Apache HTTPD 默认使用 RFC 2253 兼容格式。这使用逗号作为属性之间的分隔符,允许使用 non-ASCII 字符(转换为 UTF8),使用反斜杠转义各种特殊字符,最后使用“C”属性对属性进行排序。

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

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

    SSLPassPhraseDialog 指令

    描述:加密私钥的密码对话框类型
    句法:SSLPassPhraseDialog type
    默认:SSLPassPhraseDialog builtin
    Context:服务器配置
    状态:延期
    模块:mod_ssl

    当 Apache 启动时,它必须读取 SSL-enabled 虚拟服务器的各种证书(请参阅了 SSLCertificateFile)和私有 Key(请参阅了 SSLCertificateKeyFile)files。因为出于安全原因,Private Key files 通常是加密的,mod_ssl 需要向管理员查询 order 中的 Pass Phrase 来解密那些 files。此查询可以通过两种方式完成,可以按类型配置:

    • builtin
      这是在 Apache 从终端分离之前启动 time 时发生交互式终端对话的默认设置。管理员必须在此处为每个加密的 Private Key 文件手动输入 Pass Phrase。由于可以配置许多 SSL-enabled 虚拟主机,因此使用以下 reuse-scheme 来最小化对话框:当加密私有 Key 文件时,尝试所有已知的密码短语(在开头有 none)。如果其中一个已知的 Pass Phrases 成功,则不会弹出此特定 Private Key 文件的对话框。如果 none 成功,则在终端上查询另一个 Pass Phrase 并记住下一轮(也许可以重复使用)。

    这个 scheme 允许 mod_ssl 最大限度地灵活(因为对于 N 加密的 Private Key files,你可以使用 N 个不同的 Pass Phrases -但是当然你必须输入所有这些),同时最小化终端对话框(i.e.当你使用单个时所有 N 个私人 Key files 的密码短语此密码短语只被查询一次)。

    • |/path/to/program[args...]
      该模式允许使用外部程序,该程序充当特定输入设备的管道;程序在stdin上发送用于builtin模式的标准提示文本,并且应该在stdout上写入密码 strings。如果需要多个密码(或输入的密码不正确),则在返回第一个密码之后将写入其他提示文本,然后必须写回更多密码。
    • exec:/path/to/program
      这里配置了一个外部程序,在启动时为每个加密的 Private Key 文件调用该程序。它被调用两个 arguments(第一个是`servername:portnumber`'', the second is eitherRSA'',`DSA`'',ECC''或 integer 索引从 3 开始,如果配置了三个以上的键),这表明它是哪个服务器和算法必须打印相应的密码短语到stdout。在版本 2.4.8(未发布)和 2.4.9 中,使用一个参数调用它,形式为```+824+``+825+`为 zero-based integer 编号),表示服务器,TCP port 和证书编号。目的是该外部程序首先运行安全检查,以确保系统不会被攻击者破坏,并且只有当这些检查成功通过时,它才会提供 Pass Phrase。

    这些安全检查以及确定 Pass Phrase 的方式都可以像您一样复杂。 Mod_ssl 只定义了接口:一个可执行程序,它在stdout上提供 Pass Phrase。没有更多或更少!所以,如果你对安全性真的很偏执,那么这就是你的界面。其他任何东西都必须留给管理员,因为本地安全要求是如此不同。

    上面的 reuse-algorithm 也在这里使用。换句话说:每个唯一的 Pass Phrase 只调用一次外部程序。

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

    SSLProtocol 指令

    描述:配置可用的 SSL/TLS 协议版本
    句法:SSLProtocol[+\|-]protocol ...
    默认:SSLProtocol all -SSLv3(up to 2.4.16: all)
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl

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

    可用的(case-insensitive)协议是:

    • SSLv3
      这是来自 Netscape Corporation 的安全套接字层(SSL)协议 version 3.0.它是 SSLv2 的继承者,也是 TLSv1 的前身,但在RFC 7568中已弃用。
    • TLSv1这是传输层安全性(TLS)协议,version 1.0.它是 SSLv3 的后继者,在RFC 2246中定义。几乎每个 client 都支持它。
    • 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 协议 version,如RFC 8446中所定义。
    • all
      这是`+SSLv3 +TLSv1`'' or - when using OpenSSL 1.0.1 and later -+SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2''的快捷方式(除了使用+861++862+`)。

    SSLProtocol TLSv1
    

    SSLProxyCACertificateFile 指令

    描述:Remote Server Auth。的连锁 PEM-encoded CA 证书文件
    句法:SSLProxyCACertificateFile file-path
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    此指令设置 all-in-one 文件,您可以在其中汇编您处理 remote 服务器的证书证书 Authorities(CA)。这些用于 Remote 服务器身份验证。这样的文件只是各种 PEM-encoded Certificate files 的串联,按优先顺序排列。除了SSLProxyCACertificatePath之外,这可以另外 and/or 使用。

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

    SSLProxyCACertificatePath 指令

    描述:Remote Server Auth 的 PEM-encoded CA 证书目录
    句法:SSLProxyCACertificatePath directory-path
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    此指令设置保存您处理其 remote 服务器的证书证书 Authorities(CA)的目录。这些用于验证 Remote 服务器身份验证上的 remote 服务器证书。

    此目录中的 files 必须为 PEM-encoded,并通过哈希文件名进行访问。所以通常你不能只将 Certificate files 放在那里:你还必须创建名为 hash-value .N的符号链接。并且您应始终确保此目录包含相应的符号链接。

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

    SSLProxyCARevocationCheck 指令

    描述:为 Remote Server Auth 启用 CRL-based 吊销检查
    句法:SSLProxyCARevocationCheck chain\|leaf\|none
    默认:SSLProxyCARevocationCheck none
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    为您处理的 remote 服务器启用证书吊销列表(CRL)检查。必须至少配置SSLProxyCARevocationFile或SSLProxyCARevocationPath中的一个。设置为chain(推荐设置)时,CRL 检查将应用于链中的所有证书,而将其设置为leaf会将检查限制为 end-entity 证书。

    设置为 chain 或 leaf 时,CRL 必须可用于成功验证

    在 version 2.3.15 之前,当在配置了SSLProxyCARevocationFile或SSLProxyCARevocationPath的任何位置中找不到 CRL(s 时,mod_ssl 中的 CRL 检查也成功。通过引入此指令,行为已更改:启用检查时,必须存在 CRL 才能使验证成功-否则将失败并显示"unable to get certificate CRL"错误。

    SSLProxyCARevocationCheck chain
    

    SSLProxyCARevocationFile 指令

    描述:Remote Server Auth 的串联 PEM-encoded CA CRL 文件
    句法:SSLProxyCARevocationFile file-path
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    此指令设置 all-in-one 文件,您可以在其中组装您处理 remote 服务器的 Certification Authorities(CA)的证书吊销 Lists(CRL)。这些用于 Remote 服务器身份验证。这样的文件只是各种 PEM-encoded CRL files 的串联,按优先顺序排列。除了SSLProxyCARevocationPath之外,这可以另外 and/or 使用。

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

    SSLProxyCARevocationPath 指令

    描述:Remote Server Auth 的 PEM-encoded CA CRL 目录
    句法:SSLProxyCARevocationPath directory-path
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    此指令设置保存您处理 remote 服务器的 Certification Authorities(CA)的证书吊销 Lists(CRL)的目录。这些用于在 Remote 服务器身份验证上撤消 remote 服务器证书。

    此目录中的 files 必须为 PEM-encoded,并通过哈希文件名进行访问。所以通常你不仅要将 CRL files 放在那里。此外,您必须创建名为 hash-value .rN的符号链接。并且您应始终确保此目录包含相应的符号链接。

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

    SSLProxyCheckPeerCN 指令

    描述:是否检查 remote 服务器证书的 CN 字段
    句法:SSLProxyCheckPeerCN on\|off
    默认:SSLProxyCheckPeerCN on
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    此指令设置是否将 remote 服务器证书的 CN 字段与请求 URL 的主机名进行比较。如果两者不相等,则发送 502 状态 code(Bad Gateway)。SSLProxyCheckPeerCN在发布 2.4.5 及更高版本中被SSLProxyCheckPeerName取代。

    在 2.4.5 到 2.4.20 的所有版本中,设置SSLProxyCheckPeerName off足以启用此行为(因为SSLProxyCheckPeerCN默认为on.)在这些版本中,两个指令必须设置为off以完全避免 remote 服务器证书 name 验证。许多用户报告这非常混乱。

    从版本 2.4.21 开始,所有启用SSLProxyCheckPeerNameSSLProxyCheckPeerCN选项之一的配置都将使用新的SSLProxyCheckPeerName行为,并且禁用SSLProxyCheckPeerNameSSLProxyCheckPeerCN选项之一的所有配置都将禁止所有 remote 服务器证书 name 验证。只有以下 configuration 将在 2.4.21 及更高版本中触发 legacy 证书 CN 比较;

    SSLProxyCheckPeerCN on
    SSLProxyCheckPeerName off
    

    SSLProxyCheckPeerExpire 指令

    描述:是否检查 remote 服务器证书是否已过期
    句法:SSLProxyCheckPeerExpire on\|off
    默认:SSLProxyCheckPeerExpire on
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    此指令设置是否检查 remote 服务器证书是否已过期。如果检查失败,则发送 502 状态 code(Bad Gateway)。

    SSLProxyCheckPeerExpire on
    

    SSLProxyCheckPeerName 指令

    描述:配置 host name 检查 remote 服务器证书
    句法:SSLProxyCheckPeerName on\|off
    默认:SSLProxyCheckPeerName on
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:Apache HTTP Server 2.4.5 及更高版本
    httpd 2.4.30 及更高版本中允许使用代理部分 context

    当 mod_ssl 充当 SSL client 时,此指令配置 host name 检查服务器证书。如果请求 URI 中的 host name 与证书主题的 CN attribute(s 之一匹配,或者与 subjectAltName 扩展名匹配,则检查将成功。如果检查失败,则中止 SSL 请求并返回 502 状态 code(错误网关)。

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

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

    SSLProxyCipherSuite 指令

    描述:密码套件可用于 SSL 代理握手中的 negotiation
    句法:SSLProxyCipherSuite[protocol] cipher-spec
    默认:SSLProxyCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    相当于SSLCipherSuite,但用于代理连接。有关其他信息,请参阅SSLCipherSuite。

    SSLProxyEngine 指令

    描述:SSL 代理引擎操作开关
    句法:SSLProxyEngine on\|off
    默认:SSLProxyEngine off
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    该指令切换了 SSL/TLS Protocol Engine for proxy 的用法。这通常在<VirtualHost>部分内使用,以便在特定的虚拟 host 中启用 SSL/TLS 以进行代理使用。默认情况下,为主服务器和所有已配置的虚拟主机的代理禁用 SSL/TLS 协议引擎。

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

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

    SSLProxyMachineCertificateChainFile 指令

    描述:代理用于选择证书的串联 PEM-encoded CA 证书的文件
    句法:SSLProxyMachineCertificateChainFile filename
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    此指令设置 all-in-one 文件,在该文件中保留所有正在使用的 client 证书的证书链。如果 remote 服务器提供的 CA 证书列表不是其中一个已配置的 client 证书的直接签名者,则需要此指令。

    此引用的文件只是各种 PEM-encoded certificate files 的串联。启动时,将检查配置的每个 client 证书,并构建信任链。

    安全警告

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

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

    SSLProxyMachineCertificateFile 指令

    描述:连接的 PEM-encoded client 证书文件和代理使用的密钥
    句法:SSLProxyMachineCertificateFile filename
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    此指令设置 all-in-one 文件,您可以将用于验证代理服务器的证书和密钥保存到 remote 服务器。

    这个引用的文件只是各种 PEM-encoded 证书 files 的串联,按优先顺序排列。在SSLProxyMachineCertificatePath之外或另外使用此指令。

    目前,不支持加密的私钥

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

    SSLProxyMachineCertificatePath 指令

    描述:代理使用的 PEM-encoded client 证书和密钥的目录
    句法:SSLProxyMachineCertificatePath directory
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

    此指令设置将用于验证代理服务器的证书和密钥保存到 remote 服务器的目录。

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

    目前,不支持加密的私钥

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

    SSLProxyProtocol 指令

    描述:为代理使用配置可用的 SSL 协议风格
    句法:SSLProxyProtocol[+\|-]protocol ...
    默认:SSLProxyProtocol all -SSLv3(up to 2.4.16: all)
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

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

    有关其他信息,请参阅SSLProtocol。

    SSLProxyVerify 指令

    描述:remote 服务器证书验证的类型
    句法:SSLProxyVerify level
    默认:SSLProxyVerify none
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

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

    以下级别可用于 level:

    • :没有 remote 服务器证书是完全必需
    • 可选:remote 服务器可能会提供有效的证书
    • require:remote 服务器必须提供有效证书
    • optional_no_ca:remote 服务器可能会提供有效的证书
      但它不需要(成功)可验证。

    实际上只有级别nonerequire真的很有趣,因为 level 可选不适用于所有服务器而 level**optional_no_ca **实际上是针对身份验证的 idea(但是可以用于建立 SSL 测试页,etc.)

    SSLProxyVerify require
    

    SSLProxyVerifyDepth 指令

    描述:Remote 服务器证书验证中 CA 证书的最大深度
    句法:SSLProxyVerifyDepth number
    默认:SSLProxyVerifyDepth 1
    Context:server config,virtual host,proxy section
    状态:延期
    模块:mod_ssl
    兼容性:httpd 2.4.30 及更高版本中允许使用代理部分 context

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

    深度实际上是中间证书颁发者的最大数量 i.e。验证 remote 服务器证书时允许遵循的最大 CA 证书数。深度为 0 表示仅接受 self-signed remote 服务器证书,默认深度为 1 表示 remote 服务器证书可以是 self-signed,或者必须由服务器直接知道的 CA 签名(i.e.CA 的证书在SSLProxyCACertificatePath)等

    SSLProxyVerifyDepth 10
    

    SSLRandomSeed 指令

    描述:伪随机数 Generator(PRNG)播种源
    句法:SSLRandomSeed context source[bytes]
    Context:服务器配置
    状态:延期
    模块:mod_ssl

    这将在启动 time(context 为startup)and/or 之前配置一个或多个源用于在 OpenSSL 中播种伪随机数 Generator(PRNG),直到建立新的 SSL 连接(context 为connect)。该指令只能在 global 服务器 context 中使用,因为 PRNG 是 global 工具。

    可以使用以下源变体:

    • builtin
      这是始终可用的内置播种源。它的使用在运行时消耗最少的 CPU 周期,因此可以始终使用而没有缺点。用于播种 PRNG 的源包含当前 time,当前 process id 和随机选择的 128 字节的栈提取。缺点是这不是一个强大的源,并且在启动 time(记分板仍然不可用)时,这个源只产生几个字节的熵。所以你应该总是,至少对于初创公司来说,使用额外的播种源。
    • file:/path/to/source
      此变体使用外部文件/path/to/source作为播种 PRNG 的源。指定字节时,只有文件的第一个字节数字节形成熵(并且字节被赋予/path/to/source作为第一个参数)。当未指定字节时,整个文件形成熵(并且0被赋予/path/to/source作为第一个参数)。特别是在启动 time 时使用它,例如使用可用的/dev/random and/or /dev/urandom设备(通常存在于 FreeBSD 和 Linux 等现代 Unix 衍生产品上)。

    但要小心:通常/dev/random只提供与实际拥有的熵数据一样多的 i.e。当您请求 512 字节的熵时,但设备当前只有 100 个字节可用,可能会发生两件事:在某些平台上,您只接收 100 个字节,而在其他平台上,读取阻塞直到有足够的字节可用(可能需要 long time)。这里使用现有的/dev/urandom更好,因为它永远不会阻塞并实际提供所请求数据的数量。缺点是接收数据的质量可能不是最好的。

    • exec:/path/to/program此变体使用外部可执行文件/path/to/program作为播种 PRNG 的源。指定字节时,只有其stdout内容的第一个字节数字节形成熵。如果未指定字节,则stdout上生成的全部数据将形成熵。只有在启动 time 时才需要在外部程序的帮助下进行非常强大的播种(例如,在_示例中使用truerand实用程序,您可以在基于 AT&T truerand library 的 mod_ssl 发行版中找到)。当然,在连接 context 中使用它会大大减慢服务器的速度。所以通常你应该避免在 context 中使用外部程序。
    • egd:/path/to/egd-socket(仅限 Unix)
      此变体使用外部 Entropy Gathering Daemon(EGD)的 Unix 域 socket(请参阅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
    Context:目录,.htaccess
    覆盖:AuthConfig
    状态:延期
    模块:mod_ssl

    如果在 per-location context 中需要 SSL 重新协商,对于 example,在 Directory 或 Location 块中使用SSLVerifyClient,则mod_ssl必须将任何 HTTP 请求主体缓冲到 memory,直到可以执行新的 SSL 握手。该指令可用于设置将用于此缓冲区的 memory 数量。

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

    SSLRenegBufferSize 262144
    

    SSLRequire 指令

    描述:仅当任意复杂的 boolean 表达式为 true 时才允许访问
    句法:SSLRequire expression
    Context:目录,.htaccess
    覆盖:AuthConfig
    状态:延期
    模块:mod_ssl

    不推荐使用 SSLRequire

    SSLRequire已弃用,通常应替换为要求 expr。Require expr的所谓ap_expr语法是SSLRequire的语法的超集,具有以下 exception:

    SSLRequire中,比较 operators <<=,...完全等同于 operators ltle,...并且以某种特殊的方式工作,首先比较两个 strings 的长度然后比较词法 order。另一方面,ap_expr有两组比较 operators:operators <<=,...做词法 string 比较,而 operators -lt-le,...做 integer 比较。对于后者,还有没有前导破折号的别名:ltle,...

    该指令指定了必须在 order 中实现以允许访问的一般访问要求。它是一个非常强大的指令,因为需求规范是一个包含任意数量访问检查的任意复杂的 boolean 表达式。

    表达式必须 match 以下语法(以 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 文件中。

    加载 configuration 时,表达式被解析为内部机器表示,然后在请求处理期间进行评估。在.htaccess context 中,表达式在请求处理期间每次文件遇到时都被解析和执行。

    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) function 期望在 client 证书中找到由给定 object ID(OID)标识的 X.509 证书扩展的零个或多个实例。如果 left-hand side string 与使用此 OID 标识的扩展的 value 完全匹配,则表达式求值为 true。(如果存在多个具有相同 OID 的 extensions,则至少有一个扩展必须 match)。

    SSLRequire "foobar" in PeerExtList("1.2.3.4.5.6")
    

    关于 PeerExtList function 的注释

    • object ID 既可以指定为 SSL library 识别的描述性 name,例如"nsComment",也可以指定为数字 OID,例如"1.2.3.4.5.6"
    • 具有 SSL library 已知类型的表达式在比较之前呈现为 string。对于 SSL library 无法识别的类型的扩展,mod_ssl 将解析 value,如果它是原始 ASN.1 类型 UTF8String,IA5String,VisibleString 或 BMPString 之一。对于其中一种类型的扩展,string value 将在必要时转换为 UTF-8,然后与 left-hand-side 表达式进行比较。

    参见

    • Apache HTTP Server 中的环境变量,有关其他示例。
    • 要求 expr
    • Apache HTTP Server 中的通用表达式语法

    SSLRequireSSL 指令

    描述:当 SSL 未用于 HTTP 请求时拒绝访问
    句法:SSLRequireSSL
    Context:目录,.htaccess
    覆盖:AuthConfig
    状态:延期
    模块:mod_ssl

    除非为当前连接启用 HTTP over SSL(i.e.HTTPS),否则此指令禁止访问。这在 SSL-enabled 虚拟 host 或目录中非常方便,用于防止暴露应该受保护的内容的 configuration 错误。如果存在此指令,则拒绝所有未使用 SSL 的请求。

    SSLRequireSSL
    

    SSLSessionCache 指令

    描述:global/inter-process SSL Session 缓存的类型
    句法:SSLSessionCache type
    默认:SSLSessionCache none
    Context:服务器配置
    状态:延期
    模块:mod_ssl

    这会配置 global/inter-process SSL Session Cache 的存储类型。此缓存是一个可选工具,可加速并行请求处理。对于同一服务器 process(通过 HTTP keep-alive)的请求,OpenSSL 已在本地缓存 SSL session 信息。但是因为现代 clients 通过 parallel 请求(通常最多四个 parallel 请求是 common)请求内联图像和其他数据,这些请求由不同的 pre-forked 服务器进程提供服务。这里 inter-process 缓存有助于避免不必要的 session 握手。

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

    • none
      这会禁用 global/inter-process Session 缓存。这将导致明显的速度损失,并且如果使用某些浏览器可能会导致问题,特别是如果启用了 client 证书。建议不要使用此设置。
    • nonenotnull
      这会禁用任何 global/inter-process Session 缓存。然而,它确实强制 OpenSSL 发送 non-null session ID 以容纳需要一个的 buggy clients。
    • dbm:/path/to/datafile
      这使用本地磁盘上的 DBM 哈希文件来同步服务器进程的本地 OpenSSL memory 缓存。在高负载下,此 session 缓存可能会遇到可靠性问题。要使用它,请确保已加载mod_socache_dbm。
    • shmcb:/path/to/datafile[1331]
      这使得在 RAM 中的共享 memory 段(通过/path/to/datafile建立)内使用 high-performance 循环缓冲区(大小为大小字节)来同步服务器进程的本地 OpenSSL memory 缓存。这是推荐的 session 缓存。要使用它,请确保已加载mod_socache_shmcb。
    • dc:UNIX:/path/to/socket
      这使用了distcache distributed session 缓存 libraries。参数应使用 distcache 地址语法指定要使用的服务器或代理的位置;对于 example,UNIX:/path/to/socket指定 UNIX 域 socket(通常是本地 dcclient 代理);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 用于序列化对 session 缓存的访问以防止损坏。可以使用Mutex指令配置此 mutex。

    SSLSessionCacheTimeout 指令

    描述:在 Session 缓存中 SSL session 到期之前的秒数
    句法:SSLSessionCacheTimeout seconds
    默认:SSLSessionCacheTimeout 300
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:也适用于 Apache 2.4.10 及更高版本中的 RFC 5077 TLS session 恢复

    此指令设置 global/inter-process SSL Session 缓存,OpenSSL 内部 memory 缓存中存储的信息以及 TLS session 恢复(RFC 5077)恢复的会话的超时秒数。它可以设置为低至 15 用于测试,但应设置为更高的值,如现实生活中的 300。

    SSLSessionCacheTimeout 600
    

    SSLSessionTicketKeyFile 指令

    描述:TLS session 票证持久 encryption/decryption key
    句法:SSLSessionTicketKeyFile file-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则在 httpd 2.4.0 及更高版本中可用

    (可选)配置 secret key 以加密和解密 TLS session 票证,如RFC 5077中所定义。主要适用于应在多个节点之间共享 TLS 会话信息的集群环境。对于 single-instance httpd 设置,建议不要配置票证 key 文件,而是依赖于 mod_ssl 在启动时生成的(随机)键。

    ticket key 文件必须包含 48 个字节的随机数据,最好是从 high-entropy 源创建。在 Unix-based 系统上,可以按如下方式创建 ticket key 文件:

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

    应该频繁地轮换(替换)故障单密钥,因为这是使现有的 session 故障单无效的唯一方法- OpenSSL 目前不允许指定故障单生命周期的限制。只有在重新启动 web 服务器后才会使用新的票证 key。重启后,所有现有的 session 票证都将失效。

    ticket key 文件包含敏感的密钥材料,应使用类似于了 SSLCertificateKeyFile的文件权限进行保护。

    SSLSessionTickets 指令

    描述:启用或禁用 TLS session 票证的使用
    句法:SSLSessionTickets on\|off
    默认:SSLSessionTickets on
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8f 或更高版本,则在 httpd 2.4.11 及更高版本中可用。

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

    默认情况下启用 TLS session 票证。使用它们而不以适当的频率(每天 e.g.)重新启动 web 服务器会损害完美的前向保密性。

    SSLSRPUnknownUserSeed 指令

    描述:SRP 未知用户种子
    句法:SSLSRPUnknownUserSeed secret-string
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 1.0.1 或更高版本,则在 httpd 2.4.4 及更高版本中可用

    该指令设置用于伪造未知用户的 SRP 用户参数的种子,以避免泄漏给定用户是否存在。指定 secret string。如果未使用此指令,则 Apache 将警报返回给指定未知用户名的 clients。

    SSLSRPUnknownUserSeed "secret"

    SSLSRPVerifierFile 指令

    描述:SRP 验证程序文件的路径
    句法:SSLSRPVerifierFile file-path
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 1.0.1 或更高版本,则在 httpd 2.4.4 及更高版本中可用

    该指令允许 TLS-SRP 和 sets 指向包含 TLS-SRP 用户名,验证者,salt 和 group 参数的 OpenSSL SRP(安全 Remote 密码)验证程序文件的路径。

    SSLSRPVerifierFile "/path/to/file.srpv"

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

    创建 SRP 验证程序文件

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

    使用可选-userinfo参数给出的 value 在SSL_SRP_USERINFO request 环境变量中是可用的。

    SSLStaplingCache 指令

    描述:配置 OCSP 装订缓存
    句法:SSLStaplingCache type
    Context:服务器配置
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

    配置用于 store OCSP 响应的高速缓存,如果启用SSLUseStapling,则包含在 TLS 握手中。 _ OCSP 装订必须配置缓存。使用nonenonenotnull的 exception,支持与SSLSessionCache相同的存储类型。

    SSLStaplingErrorCacheTimeout 指令

    描述:OCSP 装订缓存中无效响应到期之前的秒数
    句法:SSLStaplingErrorCacheTimeout seconds
    默认:SSLStaplingErrorCacheTimeout 600
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

    SSLStaplingFakeTryLater 指令

    描述:针对失败的 OCSP 装订查询合成“tryLater”响应
    句法:SSLStaplingFakeTryLater on\|off
    默认:SSLStaplingFakeTryLater on
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

    启用后,向 OCSP 响应程序查询装订目的失败时,mod_ssl 将合成 client 的“tryLater”响应。仅在SSLStaplingReturnResponderErrors也启用时有效。

    SSLStaplingForceURL 指令

    描述:覆盖证书的 AIA 扩展中指定的 OCSP 响应器 URI
    句法:SSLStaplingForceURL uri
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

    SSLStaplingResponderTimeout 指令

    描述:OCSP 装订查询超时
    句法:SSLStaplingResponderTimeout seconds
    默认:SSLStaplingResponderTimeout 10
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

    当启用SSLUseStapling并且 mod_ssl 正在查询响应程序以进行 OCSP 装订时,此选项设置查询到 OCSP 响应程序的超时。

    SSLStaplingResponseMaxAge 指令

    描述:OCSP 装订响应的最大允许年龄
    句法:SSLStaplingResponseMaxAge seconds
    默认:SSLStaplingResponseMaxAge -1
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

    当考虑用于装订目的的 OCSP 响应时,此选项设置最大允许年龄(“新鲜度”)i.e。当SSLUseStapling打开时。默认的 value(-1)不会强制执行最大年龄,这意味着 OCSP 响应被视为 long,因为它们的nextUpdate字段是将来的。

    SSLStaplingResponseTimeSkew 指令

    描述:OCSP 装订响应验证的最大允许 time 偏差
    句法:SSLStaplingResponseTimeSkew seconds
    默认:SSLStaplingResponseTimeSkew 300
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

    SSLStaplingReturnResponderErrors 指令

    描述:将与装订相关的 OCSP 错误传递给 client
    句法:SSLStaplingReturnResponderErrors on\|off
    默认:SSLStaplingReturnResponderErrors on
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

    启用后,mod_ssl 将传递来自不成功的装订相关 OCSP 查询的响应(例如总体状态不是“成功”的响应,证书状态不是“好”的响应,过期响应 etc.)到 client。如果设置为off,只有表示证书状态为“好”的响应才会包含在 TLS 握手中。

    SSLStaplingStandardCacheTimeout 指令

    描述:OCSP 装订缓存中响应到期前的秒数
    句法:SSLStaplingStandardCacheTimeout seconds
    默认:SSLStaplingStandardCacheTimeout 3600
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

    SSLStrictSNIVHostCheck 指令

    描述:是否允许 non-SNI clients 访问 name-based 虚拟 host。
    句法:SSLStrictSNIVHostCheck on\|off
    默认:SSLStrictSNIVHostCheck off
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:可在 Apache 2.2.12 及更高版本中使用

    该指令设置是否允许 non-SNI client 访问 name-based 虚拟 host。如果在默认 name-based 虚拟 host 中设置为on,则不允许不知道 SNI 的客户端访问属于此特定 IP/port 组合的任何虚拟 host。如果在任何其他虚拟 host 中设置为on,则不允许 SNI unaware clients 访问此特定虚拟 host。

    此选项仅在 httpd 是针对支持 SNI 的 OpenSSL version 进行编译时才可用。

    SSLStrictSNIVHostCheck on
    

    SSLUserName 指令

    描述:变量 name 来确定用户 name
    句法:SSLUserName varname
    Context:服务器配置,目录,.htaccess
    覆盖:AuthConfig
    状态:延期
    模块:mod_ssl

    该指令设置 Apache 请求 object 中的“user”字段。较低的模块使用它来标识具有字符 string 的用户。特别是,这可能导致设置环境变量REMOTE_USER。 varname 可以是SSL 环境变量中的任何一个。

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

    SSLUserName SSL_CLIENT_S_DN_CN
    

    SSLUseStapling 指令

    描述:在 TLS 握手中启用 OCSP 响应的装订
    句法:SSLUseStapling on\|off
    默认:SSLUseStapling off
    Context:server config,virtual host
    状态:延期
    模块:mod_ssl
    兼容性:如果使用 OpenSSL 0.9.8h 或更高版本,则可用

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

    OCSP 装订缓解了自己查询 OCSP 响应器的问题,但应注意,使用 RFC 6066 规范时,服务器的CertificateStatus应答可能只包含单个证书的 OCSP 响应。对于其链中具有中间 CA 证书的服务器证书(现在是典型情况),因此在其当前 implementation 中装订只能部分实现“节省往返和资源”的既定目标-另请参阅RFC 6961(TLS 多证书状态扩展)。

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

    SSLVerifyClient 指令

    描述:Client 证书验证的类型
    句法:SSLVerifyClient level
    默认:SSLVerifyClient none
    Context:server config,virtual host,directory,.htaccess
    覆盖:AuthConfig
    状态:延期
    模块:mod_ssl

    该指令设置 Client 身份验证的证书验证 level。请注意,此指令可以在 per-server 和 per-directory context 中使用。在 per-server context 中,它适用于建立连接时标准 SSL 握手中使用的 client authentication process。在 per-directory context 中,在读取 HTTP 请求之后但在发送 HTTP 响应之前,它会强制使用重新配置的 client 验证 level 进行 SSL 重新协商。

    以下级别可用于 level:

    • :根本不需要 client 证书
    • 可选:客户端可以提供有效证书
    • 要求:客户必须出示有效证书
    • optional_no_ca:客户可以出示有效证书
      但它不需要(成功)可验证。无法依赖此选项进行 client 身份验证。

    SSLVerifyClient require
    

    SSLVerifyDepth 指令

    描述:Client 证书验证中 CA 证书的最大深度
    句法:SSLVerifyDepth number
    默认:SSLVerifyDepth 1
    Context:server config,virtual host,directory,.htaccess
    覆盖:AuthConfig
    状态:延期
    模块:mod_ssl

    该指令设置 mod_ssl 在确定 clients 没有有效证书之前应该验证的深度。请注意,此指令可以在 per-server 和 per-directory context 中使用。在 per-server context 中,它适用于建立连接时标准 SSL 握手中使用的 client authentication process。在 per-directory context 中,它会在读取 HTTP 请求之后但在发送 HTTP 响应之前强制使用重新配置的 client 验证深度进行 SSL 重新协商。

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

    SSLVerifyDepth 10
    

    上篇:mod_speling

    下篇:mod_status