<-
Apache HTTP 服务器 2.4 > Apache模块mod_ssl

Apache模块mod_ssl

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

摘要

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

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

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

支持Apache!

主题

指令

错误修正清单

也可以看看

最佳

环境变量

可以配置该模块以提供几项SSL信息,作为SSI和CGI名称空间的附加环境变量。由于性能原因,默认情况下不提供此信息。(请参见 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_ñ 客户端证书的subjectAltName扩展条目,类型为rfc822Name
SSL_CLIENT_SAN_DNS_ñ 客户端证书的dNSName类型的subjectAltName扩展条目
SSL_CLIENT_SAN_OTHER_msUPN_ñ 客户端证书的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_ñ 客户端证书链中的PEM编码证书
SSL_CLIENT_CERT_RFC4523_CEA 证书的序列号和颁发者。格式与RFC4523中的CertificateExactAssertion格式匹配
SSL_CLIENT_VERIFY NONESUCCESSGENEROUSFAILED:原因
SSL_SERVER_M_VERSION 服务器证书的版本
SSL_SERVER_M_SERIAL 服务器证书的序列号
SSL_SERVER_S_DN 服务器证书中的主题DN
SSL_SERVER_SAN_Email_ñ 服务器证书的subjectAltName扩展条目,类型为rfc822Name
SSL_SERVER_SAN_DNS_ñ 服务器证书的dNSName类型的subjectAltName扩展条目
SSL_SERVER_SAN_OTHER_dnsSRV_ñ 服务器证书的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包含具有相同名称的多个属性,则此后缀用作从零开始的索引,以选择特定的属性。例如,服务器证书主题DN包含两个OU属性,SSL_SERVER_S_DN_OU_0 并且 SSL_SERVER_S_DN_OU_1可以用来引用每个OU属性。不带_n后缀的变量名称等效于带_0后缀的名称。第一个(或唯一)属性。当使用指令的StdEnvVars选项填充环境表时SSLOptions,任何DN的第一个(或唯一)属性仅在未加后缀的名称下添加;即不_0添加后缀条目。

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

* _DN变量的格式在Apache HTTPD 2.3.11中已更改。有关详细信息,请参见该LegacyDNStringFormat选项 SSLOptions

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

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

HTTP_USER_AGENT        PATH_INFO             AUTH_TYPE
HTTP_REFERER           QUERY_STRING          SERVER_SOFTWARE
HTTP_COOKIE            REMOTE_HOST           API_VERSION
HTTP_FORWARDED         REMOTE_IDENT          TIME_YEAR
HTTP_HOST              IS_SUBREQ             TIME_MON
HTTP_PROXY_CONNECTION  DOCUMENT_ROOT         TIME_DAY
HTTP_ACCEPT            SERVER_ADMIN          TIME_HOUR
THE_REQUEST            SERVER_NAME           TIME_MIN
REQUEST_FILENAME       SERVER_PORT           TIME_SEC
REQUEST_METHOD         SERVER_PROTOCOL       TIME_WDAY
REQUEST_SCHEME         REMOTE_ADDR           TIME
REQUEST_URI            REMOTE_USER

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

ENV:variablename
这将扩展为标准环境变量variablename
HTTP:headername
这将扩展为名称为headername的请求标头的值 。
最佳

自定义日志格式

如果mod_ssl是Apache内置的,或者至少已加载(在DSO情况下),则自定义日志格式的 附加功能存在mod_log_config。首先有一个额外的`` %{varname的}x '扩展格式的功能,它可以用来扩展任何模块,特别是那些由可你在上表中找到了mod_ssl提供所提供的任何变量。

为了向后兼容,还提供了一个特殊的`` %{名称}c ''加密格式功能。在兼容性一章中提供了有关此功能的信息。

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

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

最佳

要求说明

mod_ssl为请求设置“注释”,该注释可以使用中的格式字符串记录在日志中。%{name}nmod_log_config

支持的注释如下:

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

表达式解析器扩展

如果mod_ssl是Apache内置的,或者至少已加载(在DSO情况下) ,则可以在ap_expr Expression Parser的表达式中使用所提供的任何变量。可以使用语法`` varname '' 引用变量。从版本2.4.18开始,还可以使用 样式语法`` varname ''或函数样式语法`` varname ''。mod_ssl%{}mod_rewrite%{SSL:}ssl()

示例(使用mod_headers

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

该功能甚至可以在不设置 指令StdEnvVars 选项的情况下运行SSLOptions

最佳

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

mod_ssl提供与使用的几个认证供应商mod_authz_coreRequire指令。

Require ssl

ssl供应商拒绝访问,如果一个连接没有使用SSL加密。这类似于 SSLRequireSSL指令。

Require ssl

Require ssl-verify-client

ssl供应商允许访问,如果用户与有效客户证书进行认证。仅SSLVerifyClient optional在生效时才有用。

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

Require ssl-verify-client
Require valid-user
最佳

SSLCACertificateFile 指令

描述:用于客户端身份验证的串联PEM编码的CA证书文件
句法:SSLCACertificateFile file-path
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl

该指令设置了一个多文件,您可以在其中汇编与您处理其客户的证书颁发机构的证书(CA)。这些用于客户端身份验证。按照优先顺序,此文件只是各种PEM编码的证书文件的串联。可以替代地和/或附加地使用它 SSLCACertificatePath

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

SSLCACertificatePath 指令

描述:用于客户端身份验证的PEM编码的CA证书目录
句法:SSLCACertificatePath directory-path
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl

此伪指令设置目录,在该目录中保留与您处理客户的证书颁发机构证书(CA)。这些用于验证客户端身份验证上的客户端证书。

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

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

SSLCADNRequestFile 指令

描述:连接的PEM编码的CA证书文件,用于定义可接受的CA名称
句法:SSLCADNRequestFile file-path
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl

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

如果既没有给出指令,SSLCADNRequestPathSSLCADNRequestFile没有给出,则发送给客户端的一组可接受的CA名称就是SSLCACertificateFileand SSLCACertificatePath指令给出的所有CA证书的名称;换句话说,实际上将用于验证客户端证书的CA的名称。

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

SSLCADNRequestFile必须指定所有功能于一身的含PEM编码的CA证书的级联文件。

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

SSLCADNRequestPath 指令

描述:用于定义可接受的CA名称的PEM编码的CA证书目录
句法:SSLCADNRequestPath directory-path
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl

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

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

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

SSLCARevocationCheck 指令

描述:启用基于CRL的吊销检查
句法:SSLCARevocationCheck chain|leaf|none [flags ...]
默认:SSLCARevocationCheck none
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl
兼容性:在httpd 2.4.21或更高版本中可用的可选标志

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

可用的标志为:

SSLCARevocationCheck chain

与2.2版的兼容性

SSLCARevocationCheck chain no_crl_for_cert_ok
最佳

SSLCARevocationFile 指令

描述:用于客户端身份验证的串联PEM编码的CA CRL文件
句法:SSLCARevocationFile file-path
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl

此伪指令设置了一个多文件,您可以在其中汇编与您处理其客户的证书颁发机构(CA)的证书吊销列表(CRL)。这些用于客户端身份验证。按照优先顺序,此类文件只是各种PEM编码的CRL文件的串联。可以替代地和/或附加地使用它SSLCARevocationPath

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

SSLCARevocationPath 指令

描述:用于客户端身份验证的PEM编码的CA CRL目录
句法:SSLCARevocationPath directory-path
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl

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

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

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

SSLCertificateChainFile 指令

描述:PEM编码的服务器CA证书文件
句法:SSLCertificateChainFile file-path
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl

不推荐使用SSLCertificateChainFile

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

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

SSLCACertificatePath服务器证书外,还应使用它替代和/或附加地用于显式构建发送到浏览器的服务器证书链。使用客户端身份验证时,避免与CA证书冲突特别有用。因为尽管将服务器证书链的CA证书放入SSLCACertificatePath证书链的构造中具有相同的效果,但是它具有副作用,即在客户机认证中也接受由同一CA证书颁发的客户机证书。

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

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

SSLCertificateFile 指令

描述:服务器PEM编码的X.509证书数据文件或令牌标识符
句法:SSLCertificateFile file-path|certid
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl
兼容性:certid在2.4.42及更高版本中可用。

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

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

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

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

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

素数> 1024位的DH参数互操作性

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

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

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

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

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

# Example using a PEM-encoded file.
SSLCertificateFile "/usr/local/apache2/conf/ssl.crt/server.crt"
# Example use of a certificate and private key from a PKCS#11 token:
SSLCertificateFile "pkcs11:token=My%20Token%20Name;id=45"
最佳

SSLCertificateKeyFile 指令

描述:服务器PEM编码的私钥文件
句法:SSLCertificateKeyFile file-path|keyid
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl
兼容性:keyid在2.4.42及更高版本中可用。

该指令指向服务器的PEM编码的私钥文件,或指向通过配置的加密令牌的密钥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"
最佳

SSLCipherSuite 指令

描述:密码套件可用于SSL握手中的协商
句法:SSLCipherSuite [protocol] cipher-spec
默认:SSLCipherSuite DEFAULT (depends on OpenSSL version)
内容:服务器配置,虚拟主机,目录,.htaccess
覆写:验证配置
状态:延期
模块:mod_ssl

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

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

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

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

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

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

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

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

aNULLeNULL并且EXP 密码始终处于禁用状态

从版本2.4.7开始,总是禁用null和出口级密码,因为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

表2给出了SSL的特定RSA和DH密码的完整列表。

SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
密码标签 协议 密钥示例 验证码 苹果电脑 类型
RSA密码:
DES-CBC3-SHA SSLv3 RSA RSA 3DES(168) SHA1
IDEA-CBC-SHA SSLv3 RSA RSA 创意(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 出口
最佳

SSLCompression 指令

描述:在SSL级别启用压缩
句法:SSLCompression on|off
默认:SSLCompression off
内容:服务器配置,虚拟主机
状态:延期
模块:mod_ssl
兼容性:如果使用OpenSSL 0.9.8或更高版本,则在httpd 2.4.3和更高版本中可用;如果使用OpenSSL 1.0.0或更高版本,则虚拟主机范围可用。默认on版本为2.4.3。

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

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

最佳

SSLCryptoDevice 指令

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

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

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

# For a Broadcom accelerator:
SSLCryptoDevice ubsec
最佳

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)。目前,没有网络浏览器支持RFC 2817。

最佳

SSLFIPS 指令

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

此伪指令切换SSL库FIPS_