| 描述: | 使用安全套接字层(SSL)和传输层安全性(TLS)协议的强大加密 |
|---|---|
| 状态: | 延期 |
| 模块标识符: | ssl_module |
| 源文件: | mod_ssl.c |
该模块为Apache HTTP Server提供SSL v3和TLS v1.x支持。不再支持SSL v2。
该模块依靠OpenSSL 提供加密引擎。
SSL文档中提供了更多详细信息,讨论和示例 。

SSLCACertificateFile
SSLCACertificatePath
SSLCADNRequestFile
SSLCADNRequestPath
SSLCARevocationCheck
SSLCARevocationFile
SSLCARevocationPath
SSLCertificateChainFile
SSLCertificateFile
SSLCertificateKeyFile
SSLCipherSuite
SSL压缩
SSLCryptoDevice
SSL引擎
SSLFIPS
SSLHonorCipherOrder
SSL不安全重新协商
SSLOCSPDefaultResponder
SSLOCSP启用
SSLOCSPNoverify
SSLOCSPOverrideResponder
SSLOCSPProxyURL
SSLOCSPResponderCertificateFile
SSLOCSPResponderTimeout
SSLOCSPResponseMaxAge
SSLOCSPResponseTimeSkew
SSLOCSPUseRequestNonce
SSLOpenSSLConfCmd
SSLOptions
SSLPassPhraseDialog
SSL协议
SSLProxyCACertificateFile
SSLProxyCACertificatePath
SSLProxyCARevocationCheck
SSLProxyCARevocationFile
SSLProxyCARevocationPath
SSLProxyCheckPeerCN
SSLProxyCheckPeerExpire
SSLProxyCheckPeerName
SSLProxyCipherSuite
SSLProxyEngine
SSLProxyMachineCertificateChainFile
SSLProxyMachineCertificateFile
SSLProxyMachineCertificatePath
SSLProxy协议
SSLProxyVerify
SSLProxyVerifyDepth
SSL随机种子
SSLRenegBufferSize
SSLRequire
SSL要求
SSLSessionCache
SSLSessionCacheTimeout
SSLSessionTicketKeyFile
SSLSessionTickets
SSLSRPUnknownUserSeed
SSLSRPVerifierFile
SSLStaplingCache
SSLStaplingErrorCacheTimeout
SSLStaplingFakeTryLater
SSLStaplingForceURL
SSLStaplingResponderTimeout
SSLStaplingResponseMaxAge
SSLStaplingResponseTimeSkew
SSLStaplingReturnResponderErrors
SSLStaplingStandardCacheTimeout
SSLStrictSNIVHostCheck
SSLUserName
SSLUseStapling
SSLVerifyClient
SSLVerifyDepth可以配置该模块以提供几项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 | 串 | NONE,SUCCESS,GENEROUS或FAILED:原因 |
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_RAW或
SSL_SERVER_S_DN_OU_0_RAW可以使用。
* _DN变量的格式在Apache HTTPD 2.3.11中已更改。有关详细信息,请参见该LegacyDNStringFormat选项
SSLOptions。
SSL_CLIENT_V_REMAIN 仅在2.1版和更高版本中可用。
也可以在SSLRequire表达式或自定义日志格式中使用许多其他环境变量:
HTTP_USER_AGENT PATH_INFO AUTH_TYPE HTTP_REFERER QUERY_STRING SERVER_SOFTWARE HTTP_COOKIE REMOTE_HOST API_VERSION HTTP_FORWARDED REMOTE_IDENT TIME_YEAR HTTP_HOST IS_SUBREQ TIME_MON HTTP_PROXY_CONNECTION DOCUMENT_ROOT TIME_DAY HTTP_ACCEPT SERVER_ADMIN TIME_HOUR THE_REQUEST SERVER_NAME TIME_MIN REQUEST_FILENAME SERVER_PORT TIME_SEC REQUEST_METHOD SERVER_PROTOCOL TIME_WDAY REQUEST_SCHEME REMOTE_ADDR TIME REQUEST_URI REMOTE_USER
在这些情况下,也可以使用两种特殊格式:
ENV:variablenameHTTP: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是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。
mod_ssl提供与使用的几个认证供应商mod_authz_core的
Require指令。
该ssl供应商拒绝访问,如果一个连接没有使用SSL加密。这类似于
SSLRequireSSL指令。
Require ssl
该ssl供应商允许访问,如果用户与有效客户证书进行认证。仅SSLVerifyClient optional在生效时才有用。
如果用户通过客户端证书或用户名和密码进行了身份验证,则以下示例授予访问权限。
Require ssl-verify-client Require valid-user
| 描述: | 用于客户端身份验证的串联PEM编码的CA证书文件 |
|---|---|
| 句法: | SSLCACertificateFile file-path |
| 内容: | 服务器配置,虚拟主机 |
| 状态: | 延期 |
| 模块: | mod_ssl |
该指令设置了一个多文件,您可以在其中汇编与您处理其客户的证书颁发机构的证书(CA)。这些用于客户端身份验证。按照优先顺序,此文件只是各种PEM编码的证书文件的串联。可以替代地和/或附加地使用它
SSLCACertificatePath。
SSLCACertificateFile "/usr/local/apache2/conf/ssl.crt/ca-bundle-client.crt"
| 描述: | 用于客户端身份验证的PEM编码的CA证书目录 |
|---|---|
| 句法: | SSLCACertificatePath directory-path |
| 内容: | 服务器配置,虚拟主机 |
| 状态: | 延期 |
| 模块: | mod_ssl |
此伪指令设置目录,在该目录中保留与您处理客户的证书颁发机构证书(CA)。这些用于验证客户端身份验证上的客户端证书。
此目录中的文件必须经过PEM编码,并可以通过哈希文件名进行访问。因此,通常不能只将证书文件放在此处:还必须创建名为hash-value的符号链接
.N。并且您应始终确保此目录包含适当的符号链接。
SSLCACertificatePath "/usr/local/apache2/conf/ssl.crt/"
| 描述: | 连接的PEM编码的CA证书文件,用于定义可接受的CA名称 |
|---|---|
| 句法: | SSLCADNRequestFile file-path |
| 内容: | 服务器配置,虚拟主机 |
| 状态: | 延期 |
| 模块: | mod_ssl |
当mod_ssl请求客户端证书时,可接受的证书颁发机构名称列表将 通过SSL握手发送给客户端。客户端可以使用这些CA名称从可用的证书中选择适当的客户端证书。
如果既没有给出指令,SSLCADNRequestPath也SSLCADNRequestFile没有给出,则发送给客户端的一组可接受的CA名称就是SSLCACertificateFileand SSLCACertificatePath指令给出的所有CA证书的名称;换句话说,实际上将用于验证客户端证书的CA的名称。
在某些情况下,能够发送一组与用于验证客户端证书的实际CA不同的可接受的CA名称很有用-例如,如果客户端证书是由中间CA签名的。在这种情况下,SSLCADNRequestPath和/或SSLCADNRequestFile可以使用;然后,从这对指令指定的目录和/或文件中的完整证书集中获取可接受的CA名称。
SSLCADNRequestFile必须指定所有功能于一身的含PEM编码的CA证书的级联文件。
SSLCADNRequestFile "/usr/local/apache2/conf/ca-names.crt"
| 描述: | 用于定义可接受的CA名称的PEM编码的CA证书目录 |
|---|---|
| 句法: | SSLCADNRequestPath directory-path |
| 内容: | 服务器配置,虚拟主机 |
| 状态: | 延期 |
| 模块: | mod_ssl |
此可选指令可用于指定一组
可接受的CA名称,当请求客户端证书时,这些名称将发送给客户端。有关SSLCADNRequestFile更多详细信息,请参见指令。
此目录中的文件必须经过PEM编码,并可以通过哈希文件名进行访问。因此,通常不能只将证书文件放在此处:还必须创建名为hash-value的符号链接
.N。并且您应始终确保此目录包含适当的符号链接。
SSLCADNRequestPath "/usr/local/apache2/conf/ca-names.crt/"
| 描述: | 启用基于CRL的吊销检查 |
|---|---|
| 句法: | SSLCARevocationCheck chain|leaf|none [flags ...] |
| 默认: | SSLCARevocationCheck none |
| 内容: | 服务器配置,虚拟主机 |
| 状态: | 延期 |
| 模块: | mod_ssl |
| 兼容性: | 在httpd 2.4.21或更高版本中可用的可选标志 |
启用证书吊销列表(CRL)检查。中的至少一个
SSLCARevocationFile
或SSLCARevocationPath必须进行配置。设置为chain(推荐设置)时,CRL检查将应用于链中的所有证书,同时将CRL检查设置为
leaf将检查限制为最终实体证书。
可用的标志为:
no_crl_for_cert_ok
在2.3.15版之前,如果在用SSLCARevocationFile
或配置的任何位置均未找到检查证书的CRL,则mod_ssl中的CRL检查也成功SSLCARevocationPath。
随着的引入SSLCARevocationFile,行为已更改:默认情况下,使用chain或
leaf,必须提供CRL 才能使验证成功-否则它将失败并显示
"unable to get certificate CRL"错误。
该标志 no_crl_for_cert_ok允许恢复以前的行为。
SSLCARevocationCheck chain
SSLCARevocationCheck chain no_crl_for_cert_ok
| 描述: | 用于客户端身份验证的串联PEM编码的CA CRL文件 |
|---|---|
| 句法: | SSLCARevocationFile file-path |
| 内容: | 服务器配置,虚拟主机 |
| 状态: | 延期 |
| 模块: | mod_ssl |
此伪指令设置了一个多文件,您可以在其中汇编与您处理其客户的证书颁发机构(CA)的证书吊销列表(CRL)。这些用于客户端身份验证。按照优先顺序,此类文件只是各种PEM编码的CRL文件的串联。可以替代地和/或附加地使用它SSLCARevocationPath。
SSLCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle-client.crl"
| 描述: | 用于客户端身份验证的PEM编码的CA CRL目录 |
|---|---|
| 句法: | SSLCARevocationPath directory-path |
| 内容: | 服务器配置,虚拟主机 |
| 状态: | 延期 |
| 模块: | mod_ssl |
此伪指令设置目录,在该目录中保留与您处理其客户的证书颁发机构(CA)的证书吊销列表(CRL)。这些用于撤销客户端身份验证上的客户端证书。
此目录中的文件必须经过PEM编码,并可以通过哈希文件名进行访问。因此,通常您不仅要将CRL文件放在此处。另外,您必须创建名为hash-value的符号链接
.rN。并且您应始终确保此目录包含适当的符号链接。
SSLCARevocationPath "/usr/local/apache2/conf/ssl.crl/"
| 描述: | PEM编码的服务器CA证书文件 |
|---|---|
| 句法: | SSLCertificateChainFile file-path |
| 内容: | 服务器配置,虚拟主机 |
| 状态: | 延期 |
| 模块: | mod_ssl |
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"
| 描述: | 服务器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。
从版本2.4.7开始,mod_ssl使用标准DH参数,素数长度为2048、3072和4096位,附加素数长度为6144和8192位,从版本2.4.10(来自RFC 3526)开始,并将其分发出去根据证书的RSA / DSA密钥的长度发送给客户端。特别是对于基于Java的客户端(Java 7或更早版本),这可能会导致握手失败- 有关解决此类问题的信息,请参阅此 常见问题解答。
当使用多个证书来支持不同的身份验证算法(例如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"
| 描述: | 服务器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"
| 描述: | 密码套件可用于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 | SHA384哈希函数 |
| 别名: | |
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。可用的前缀是:
+:将匹配的密码移动到列表中的当前位置-:从列表中删除密码(可以稍后再添加)!:完全杀死列表中的密码(以后不能再添加)aNULL,eNULL并且EXP
密码始终处于禁用状态从版本2.4.7开始,总是禁用null和出口级密码,因为mod_ssl !aNULL:!eNULL:!EXP在初始化时无条件地添加
到任何密码字符串中。
一种更简单的方法是使用`` openssl ciphers
-v''命令,该命令提供了一种很好的方式来连续创建正确的密码规范字符串。默认的密码规范字符串取决于所使用的OpenSSL库的版本。让我们假设它是`` RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5'',其含义如下:放在RC4-SHA和AES128-SHA开头。我们这样做是因为这些密码在速度和安全性之间提供了很好的折衷方案。接下来,包括高中安全密码。最后,删除所有未认证的密码,即对于SSL,匿名Diffie-Hellman密码以及MD5用作哈希算法的所有密码
,因为已被证明是不够的。
$ openssl ciphers -v 'RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5' RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1 AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1 DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1 ... ... ... ... ... SEED-SHA SSLv3 Kx=RSA Au=RSA Enc=SEED(128) Mac=SHA1 PSK-RC4-SHA SSLv3 Kx=PSK Au=PSK Enc=RC4(128) Mac=SHA1 KRB5-RC4-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=SHA1
表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 | 出口 |
| 描述: | 在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 engine |
| 默认: | SSLCryptoDevice builtin |
| 内容: | 服务器配置 |
| 状态: | 延期 |
| 模块: | mod_ssl |
该指令允许使用加密硬件加速器板来减轻某些SSL处理开销。仅当SSL工具箱是通过“引擎”支持构建的时,才可以使用此伪指令。OpenSSL 0.9.7和更高版本默认情况下具有“引擎”支持,必须使用单独的OpenSSL 0.9.6“ -engine”版本。
要发现支持哪些引擎名称,请运行命令“ openssl engine”。
# For a Broadcom accelerator: SSLCryptoDevice ubsec
| 描述: | 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。