Apache 2.2 HTTP服务器版本2.2 - (https/ssl配置)

校睿宝培训机构ERP,学员课时管理软件
实验预约管理软件,实验室管理软件,大学、高校实验预约平台
网站日志分析软件,网站访问日志在线分析
哲涛服务器监控软件,IT运维管理软件,CPU、内存、磁盘监控软件

Apache模块mod_ssl

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

概要

此模块为Apache HTTP Server提供SSL v2 / v3和TLS v1支持。它是由Ralf S. Engeschall根据他的mod_ssl项目贡献的,最初来自Ben Laurie的工作。

这个模块依靠OpenSSL 来提供密码引擎。

SSL文档中提供了更多细节,讨论和示例 

主题

  • 环境变量
  • 自定义日志格式

指令

  • SSLCACertificateFile
  • SSLCACertificatePath
  • SSLCADNRequestFile
  • SSLCADNRequestPath
  • SSLCARevocationFile
  • SSLCARevocationPath
  • SSLCertificateChainFile
  • 了SSLCertificateFile
  • 了SSLCertificateKeyFile
  • 的SSLCipherSuite
  • SSLCompression
  • SSLCryptoDevice
  • 的SSLEngine
  • SSLFIPS
  • SSLHonorCipherOrder
  • SSLInsecureRenegotiation
  • SSLMutex
  • SSLOptions
  • SSLPassPhraseDialog
  • SSLProtocol
  • SSLProxyCACertificateFile
  • SSLProxyCACertificatePath
  • SSLProxyCARevocationFile
  • SSLProxyCARevocationPath
  • SSLProxyCheckPeerCN
  • SSLProxyCheckPeerExpire
  • SSLProxyCipherSuite
  • SSLProxyEngine
  • SSLProxyMachineCertificateChainFile
  • SSLProxyMachineCertificateFile
  • SSLProxyMachineCertificatePath
  • SSLProxyProtocol
  • SSLProxyVerify
  • SSLProxyVerifyDepth
  • SSLRandomSeed
  • SSLRenegBufferSize
  • SSLRequire
  • SSLRequireSSL
  • SSLSessionCache
  • SSLSessionCacheTimeout
  • SSLSessionTicketKeyFile
  • SSLSessionTickets
  • SSLStrictSNIVHostCheck
  • SSLUserName
  • SSLVerifyClient
  • SSLVerifyDepth
  • 注释
最佳

环境变量

可以将此模块配置为向SSI和CGI命名空间提供多项SSL信息作为附加环境变量。由于性能原因,此信息不是默认提供的。(请参阅 SSLOptions下面的StdEnvVars。)生成的变量在下表中列出。为了向后兼容,信息也可以以不同的名字提供。有关兼容性变量的详细信息,请参阅兼容性一章。

变量名: 值类型: 描述:
HTTPS 正在使用HTTPS。
SSL_PROTOCOL SSL协议版本(SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2)
SSL_SESSION_ID 十六进制编码的SSL会话ID
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_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_VERIFY NONESUCCESSGENEROUSFAILED:原因
SSL_SERVER_M_VERSION 服务器证书的版本
SSL_SERVER_M_SERIAL 服务器证书的序列号
SSL_SERVER_S_DN 服务器证书中的主题DN
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_TLS_SNI SNI TLS扩展的内容(如果随ClientHello提供)

x509指定X.509 DN的组件; 其中之一 C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email在Apache 2.1及更高版本中,x509还可能包含数字_n 后缀。如果所讨论的DN包含具有相同名称的多个属性,则将该后缀用作选择特定属性的索引。例如,服务器证书主题DN包含两个OU字段,SSL_SERVER_S_DN_OU_0并可 SSL_SERVER_S_DN_OU_1用于引用每个字段

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

最佳

自定义日志格式

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

最佳

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编码的,并通过哈希文件名来访问。所以通常你不能把证书文件放在那里:你还必须创建名为散列值的符号链接 .N你应该确保这个目录包含适当的符号链接。

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

最佳

SSLCADNRequestFile 指令

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

当mod_ssl请求客户端证书时,在SSL握手中将可接受的证书授权者名称列表 发送到客户端。客户端可以使用这些CA名称从可用的客户端证书中选择适当的客户端证书。

若既没有指令SSLCADNRequestPathSSLCADNRequestFile给出,那么该组发送到客户端上可接受的CA的名称是由给定的所有的CA证书的名称SSLCACertificateFileSSLCACertificatePath指示; 换句话说,实际上将用于验证客户端证书的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编码的,并通过哈希文件名来访问。所以通常你不能把证书文件放在那里:你还必须创建名为散列值的符号链接 .N你应该确保这个目录包含适当的符号链接。

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

最佳

SSLCARevocationFile 指令

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

该指令设置一体式文件,您可以在其中组装证书吊销列表(CRL)的证书颁发机构(CA),客户与您打交道。这些用于客户端身份验证。这样的文件就是各种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文件放在那里。另外,您必须创建名为哈希值的符号链接 .rN你应该确保这个目录包含适当的符号链接。

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

最佳

SSLCertificateChainFile 指令

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

该指令设置可选的一体化文件,您可以在其中组装证书作为服务器证书的证书链的证书颁发机构(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
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl
兼容性: ECC支持在Apache 2.2.26及更高版本中可用

该指令指向一个带有PEM格式证书数据的文件。文件至少必须包含一个最终实体(叶)证书。当并行使用RSA,DSA和基于ECC的服务器证书时,指令最多可以使用三次(引用不同的文件名)。

可以将自定义DH参数和临时密钥的EC曲线名称添加到使用的第一个文件的末尾 SSLCertificateFile这在版本2.2.30或更高版本中受支持。这样的参数可以使用命令来生成 openssl dhparamopenssl ecparam参数可以按原样添加到第一个证书文件的末尾。只有第一个文件可以用于自定义参数,因为它们与认证算法类型无关地被应用。

最后,最终实体证书的私钥也可以添加到证书文件中,而不是使用单独的 SSLCertificateKeyFile 指令。这种做法是非常沮丧的。如果私钥已加密,则在启动时会强制执行密码对话框。

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

从版本2.2.30开始,mod_ssl使用主要长度为2048,3072,4096,6144和8192位(来自RFC 3526的标准化DH参数,并根据证书RSA / DSA的长度将其发送给客户端键。特别是基于Java的客户端(Java 7或更早版本),这可能会导致握手失败 - 请参阅此常见问题解答以解决此类问题。

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

最佳

SSLCertificateKeyFile 指令

描述: 服务器PEM编码的私钥文件
句法: SSLCertificateKeyFile file-path
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl
兼容性: ECC支持在Apache 2.2.26及更高版本中可用

该指令指向服务器的PEM编码私钥文件。如果包含的私钥被加密,则在启动时强制密码对话框被强制。

当并行使用RSA,DSA和基于ECC的私钥时,指令最多可以使用三次(引用不同的文件名)。对于每个 SSLCertificateKeyFile 指令,必须有一个匹配的SSLCertificateFile 指令。

私钥也可以与文件中给出的证书结合使用 SSLCertificateFile,但是这种做法是非常沮丧的。

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

最佳

SSLCipherSuite 指令

描述: 密码套件可用于SSL握手协商
句法: SSLCipherSuite cipher-spec
默认: SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
语境: 服务器配置,虚拟主机,目录,.htaccess
覆盖: AuthConfig
状态: 延期
模块: 了mod_ssl

此复杂指令使用由OpenSSL密码规范组成的以冒号分隔的密码规范字符串来配置允许客户端在SSL握手阶段进行协商的密码套件。注意这个指令可以用在每个服务器和每个目录的上下文中。在每服务器上下文中,当连接建立时,它适用于标准的SSL握手。在每个目录上下文中,在读取HTTP请求之后但在发送HTTP响应之前,它强制与重新配置的密码套件进行SSL重新协商。

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

  • 密钥交换算法
    RSA或Diffie-Hellman变体。
  • 认证算法
    RSA,Diffie-Hellman,DSS或无。
  • 密码/加密算法
    DES,Triple-DES,RC4,RC2,IDEA或无。
  • MAC摘要算法
    MD5,SHA或SHA1。

SSL密码也可以是导出密码,可以是SSLv2或SSLv3 / TLSv1密码(这里的TLSv1相当于SSLv3)。要指定要使用的密码,可以指定所有密码,一次一个,或使用别名来指定密码的首选项和顺序(请参阅表1)。

标签 描述
密钥交换算法:
kRSA RSA密钥交换
kDHr 与RSA密钥的Diffie-Hellman密钥交换
kDHd 与DSA密钥的Diffie-Hellman密钥交换
kEDH 临时(temp.key)Diffie-Hellman密钥交换(无证书)
认证算法:
aNULL 没有认证
aRSA RSA认证
aDSS DSS认证
aDH Diffie-Hellman认证
密码编码算法:
eNULL 没有编码
DES DES编码
3DES 三重DES编码
RC4 RC4编码
RC2 RC2编码
IDEA IDEA编码
MAC摘要算法
MD5 MD5哈希函数
SHA1 SHA1哈希函数
SHA SHA哈希函数
别名:
SSLv2 所有SSL版本2.0密码
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 所有使用Ephemeral Diffie-Hellman密钥交换的密码
ADH 所有使用匿名Diffie-Hellman密钥交换的密码
DSS 所有使用DSS认证的密码
NULL 所有使用不加密的密码

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

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

aNULLeNULL以及EXP 密码总是禁用

从版本2.2.30开始,null和export-grade密码总是被禁用,因为mod_ssl无条件地!aNULL:!eNULL:!EXP:在初始化时预先提供任何提供的密码套件字符串

更简单的方法是使用```` openssl ciphers -v命令提供一个很好的方法来连续创建正确的密码规范字符串。默认的cipher-spec字符串是“` ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP”,表示如下:首先,不考虑任何不认证的密码,即仅用于匿名Diffie-Hellman密码的SSL。接下来,使用RC4和RSA使用密码。其次包括高,中,低安全性密码。最后拉取所有SSLv2并将密码导出到列表的末尾。

$ openssl ciphers -v'ALL:!ADH:RC4 + RSA:+ HIGH:+ MEDIUM:+ LOW:+ SSLv2:+ EXP'
NULL-SHA SSLv3 Kx = RSA Au = RSA Enc = None Mac = SHA1
NULL-MD5 SSLv3 Kx = RSA Au = RSA Enc = None Mac = MD5
EDH-RSA-DES-CBC3-SHA SSLv3 Kx = DH Au = RSA Enc = 3DES(168)Mac = SHA1
... ... ... ...
EXP-RC4-MD5 SSLv3 Kx = RSA(512)Au = RSA Enc = RC4(40)Mac = MD5出口
EXP-RC2-CBC-MD5 SSLv2 Kx = RSA(512)Au = RSA Enc = RC2(40)Mac = MD5出口
EXP-RC4-MD5 SSLv2 Kx = RSA(512)Au = RSA Enc = RC4(40)Mac = MD5出口

表2给出了用于SSL的特定RSA&DH密码的完整列表

SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW

密码的标签 协议 Key Ex。 验证。 ENC。 苹果电脑 类型
RSA密码:
DES-CBC3-SHA 在SSLv3 RSA RSA 3DES(168) SHA1  
DES-CBC3-MD5 的SSLv2 RSA RSA 3DES(168) MD5  
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  
IDEA-CBC-MD5 的SSLv2 RSA RSA IDEA(128) MD5  
RC2-CBC-MD5 的SSLv2 RSA RSA RC2(128) MD5  
RC4-MD5 的SSLv2 RSA RSA RC4(128) MD5  
DES-CBC-SHA 在SSLv3 RSA RSA DES(56) SHA1  
RC4-64-MD5 的SSLv2 RSA RSA RC4(64) MD5  
DES-CBC-MD5 的SSLv2 RSA RSA DES(56) MD5  
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 出口
EXP-RC2-CBC-MD5 的SSLv2 RSA(512) RSA RC2(40) MD5 出口
EXP-RC4-MD5 的SSLv2 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
兼容性: 在httpd 2.2.24及更高版本中可用,如果使用OpenSSL 0.9.8或更高版本; 如果使用OpenSSL 1.0.0或更高版本,则可以使用虚拟主机作用域。默认情况下是on2.2.24到2.2.25版本。

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

启用压缩会导致大多数安装问题(所谓的CRIME攻击)。

最佳

SSLCryptoDevice 指令

描述: 启用加密硬件加速器
句法: SSLCryptoDevice engine
默认: SSLCryptoDevice builtin
语境: 服务器配置
状态: 延期
模块: 了mod_ssl
兼容性: 如果使用OpenSSL 0.9.6或OpenSSL 0.9.7或更高版本的引擎,则可用于Apache 2.1及更高版本

该指令允许使用加密硬件加速器板来卸载一些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_mode标志的使用。它必须在全局服务器上下文中进行设置,并且不能使用冲突设置进行配置(SSLFIPS开启,然后关闭SSLFIPS或类似)。该模式适用于所有SSL库操作。

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

最佳

SSLHonorCipherOrder 指令

描述: 选择优先服务器的密码首选项顺序
句法: SSLHonorCipherOrder flag
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl
兼容性: 如果使用OpenSSL 0.9.7或更高版本,可用于Apache 2.1及更高版本

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

SSLHonorCipherOrder on

最佳

SSLInsecureRenegotiation 指令

描述: 选择启用对不安全重新协商的支持
句法: SSLInsecureRenegotiation flag
默认: 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连接是否支持安全重新协商。

最佳

SSLMutex 指令

描述: 信号量用于内部相互排斥的操作
句法: SSLMutex type
默认: SSLMutex none
语境: 服务器配置
状态: 延期
模块: 了mod_ssl

这配置了SSL引擎的信号量(也就是锁),它用于互斥操作,这些操作必须以预分流的Apache服务器进程之间的同步方式完成。该指令只能在全局服务器上下文中使用,因为它只有一个全局互斥量。该指令的设计与AcceptMutex指令非常匹配 

以下互斥体类型可用:

  • none | no

    这是根本不使用Mutex的默认设置。需要您自担风险使用它。但是由于目前Mutex主要用于同步对SSL会话缓存的写访问,所以只要您接受有时会出现乱码的会话缓存,您就可以没有它。所以不建议保留这个默认值。而是配置一个真正的互斥。

  • posixsem

    这是一个优雅的Mutex变种,尽可能使用Posix Semaphore。它只有在底层平台和APR支持时才可用

  • sysvsem

    这是一个有点优雅的Mutex变种,尽可能使用SystemV IPC Semaphore。如果进程在信号量被移除之前崩溃,则可能“泄漏”SysV信号量。它只有在底层平台和APR支持时才可用

  • sem

    该指令通知SSL模块选择可用的“最佳”信号量实现,在Posix和SystemV IPC之间进行选择。它只有在底层平台和APR支持至少其中一个时才可用

  • pthread

    这个指令告诉SSL模块使用Posix线程互斥体。它只有在底层平台和APR支持时才可用

  • fcntl:/path/to/mutex

    这是一个便携式Mutex变体,其中物理(锁定)文件和fcntl() 函数被用作互斥体。始终使用本地磁盘文件系统/path/to/mutex,永远不要使用驻留在NFS或AFS文件系统上的文件。它只有在底层平台和APR支持时才可用注意:在内部,Apache父进程的进程ID(PID)被自动附加到 /path/to/mutex以使其唯一,所以您不必担心自己的冲突。请注意,这种类型的互斥体在Win32环境下不可用。在那里你必须使用信号量互斥。

  • flock:/path/to/mutex

    这与使用函数来提供文件锁定fcntl:/path/to/mutex方法类似flock()它只有在底层平台和APR支持时才可用

  • file:/path/to/mutex

    该指令告诉SSL模块选择可用的“最佳”文件锁定实现,fcntlflock按照顺序选择。它只有在底层平台和APR支持至少其中一个时才可用

  • default | yes

    该指令通知SSL模块选择由平台和APR确定的默认锁定实现

SSLMutex file:/usr/local/apache/logs/ssl_mutex

最佳

SSLOptions 指令

描述: 配置各种SSL引擎运行时选项
句法: SSLOptions [+|-]option ...
语境: 服务器配置,虚拟主机,目录,.htaccess
覆盖: 选项
状态: 延期
模块: 了mod_ssl

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

可用的选项是:

  • StdEnvVars

    启用此选项时,会创建标准的SSL相关CGI / SSI环境变量集。由于性能方面的原因,每个默认值都被禁用,因为信息提取步骤是一个相当昂贵的操作。所以通常只对CGI和SSI请求启用这个选项。

  • ExportCertData

    启用此选项时,将创建其他CGI / SSI环境变量:SSL_SERVER_CERTSSL_CLIENT_CERT和 SSL_CLIENT_CERT_CHAIN_n(其中n = 0,1,2,...)。这些包含用于当前HTTPS连接的PEM编码的X.509服务器和客户端证书,并可被CGI脚本用于更深入的证书检查。此外,还提供客户端证书链的所有其他证书。这会使环境变得更糟,这就是为什么您必须使用此选项来按需启用它。

  • FakeBasicAuth

    启用此选项时,客户端X509证书的主题专有名称(DN)将被转换为HTTP基本授权用户名。这意味着标准的Apache认证方法可以用于访问控制。用户名只是客户X509证书的主题(可以通过运行OpenSSL的openssl x509命令:openssl x509 -noout -subject -in 证书来确定 .crt)。请注意,用户没有获得密码。用户文件中的每个条目都需要这个密码:“` xxj31ZMTZzkVA”,这是“` ”的DES加密版本password那些生活在基于MD5的加密(例如在FreeBSD或BSD / OS下)的人应该使用以下同一个单词的MD5散列:`` $1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/'。

  • StrictRequire

    强制禁止访问时,SSLRequireSSL或 SSLRequire成功决定访问应被禁止。通常情况下,缺省情况下,在使用```` Satisfy any指令的情况下,传递其他访问限制时,拒绝访问由于SSLRequireSSL或被 SSLRequire覆盖(因为这是Apache Satisfy机制应该如何 工作)。但是对于严格的访问限制可以使用SSLRequireSSL和/或SSLRequire与“` SSLOptions +StrictRequire” 结合使用那么Satisfy Any一旦mod_ssl决定拒绝访问,额外的``` 是没有机会的。

  • OptRenegotiate

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

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

最佳

SSLPassPhraseDialog 指令

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

当Apache启动时,必须读取启用S​​SL的虚拟服务器的各种证书(请参阅 SSLCertificateFile)和私钥(请参阅SSLCertificateKeyFile)文件。由于安全原因,私钥文件通常是加密的,mod_ssl需要向管理员查询密码短语才能解密这些文件。这个查询可以通过两种方式完成,可以通过键入来配置 

  • builtin

    这是在Apache离开终端之前,在启动时发生交互式终端对话的默认设置。在这里,管理员必须为每个加密的私钥文件手动输入密码短语。因为可以配置很多启用SSL的虚拟主机,所以使用以下重用方案来最小化对话:当私钥文件被加密时,尝试所有已知的密码短语(当然在开始时没有) 。如果其中一个已知密码短语成功,则不会弹出此特定密钥文件的对话框。如果没有成功,则在终端上查询另一个密码短语,并记住下一轮(也许可以重新使用)。

    这个方案允许mod_ssl具有最大的灵活性(因为对于N个加密的私钥文件,你可以使用N个不同的密码短语 - 当然你必须输入所有的密码短语),同时最小化终端对话框(例如,当你使用单一的通行证所有N个私人密钥文件的短语,这个密码短语只查询一次)。

  • |/path/to/program [args...]

    这种模式允许使用一个外部程序作为一个管道到一个特定的输入设备; 程序将发送用于该builtin模式 的标准提示文本stdin,并且预计将写入密码字符串 stdout如果需要输入多个密码(或者输入了不正确的密码),则在第一个密码被返回之后将会写入额外的提示文本,然后必须写回更多的密码。

  • exec:/path/to/program

    这里配置一个外部程序,在启动时调用每个加密的私钥文件。它被称为两个参数(第一个是“` servername:portnumber”,第二个是“` RSA”,`` DSA“或”` ECC“),它们表示要打印哪个服务器和算法相应的密码短语stdout目的是这个外部程序首先运行安全检查,以确保系统不受攻击者的威胁,并且只有当这些检查通过成功,它才提供密码短语。

    这些安全检查和密码短语的确定方式都可以像你喜欢的那样复杂。Mod_ssl只是定义了接口:一个提供Pass Phrase的可执行程序stdout没有更多或更少!所以,如果你对安全性非常偏执,这是你的界面。还有其他任何事情都必须作为练习留给管理员,因为当地的安全要求是如此不同。

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

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

最佳

SSLProtocol 指令

描述: 配置可用的SSL协议风格
句法: SSLProtocol [+|-]protocol ...
默认: SSLProtocol all
语境: 服务器配置,虚拟主机
覆盖: 选项
状态: 延期
模块: 了mod_ssl

该指令可用于控制mod_ssl在建立服务器环境时应使用的SSL协议风格。客户端只能连接一个提供的协议。

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

  • SSLv2

    这是安全套接字层(SSL)协议,版本2.0。它是由Netscape Corporation设计的原始SSL协议。虽然它的使用已被废弃,因为该协议的安全性的弱点。

  • SSLv3

    这是来自Netscape Corporation的安全套接字层(SSL)协议3.0版。它是SSLv2的继任者,也是TLSv1的前身。几乎所有流行的浏览器都支持它。

  • TLSv1

    这是传输层安全(TLS)协议,版本1.0。它是SSLv3的继承者,在RFC 2246中进行了定义 

  • TLSv1.1 (使用OpenSSL 1.0.1及更高版本时)

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

  • TLSv1.2 (使用OpenSSL 1.0.1及更高版本时)

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

  • All

    这是``` +SSLv2 +SSLv3 +TLSv1'或者 - 当使用OpenSSL 1.0.1及更高版本时的快捷方式- “` +SSLv2 +SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2”。

# enable SSLv3 and all available TLSv1 flavors, but not SSLv2
SSLProtocol All -SSLv2

最佳

SSLProxyCACertificateFile 指令

描述: 用于远程服务器验证的连接的PEM编码的CA证书的文件
句法: SSLProxyCACertificateFile file-path
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl

该指令设置了一体式文件,您可以在该文件中组装已处理远程服务器的证书颁发机构证书(CA)这些用于远程服务器身份验证。这样的文件就是各种PEM编码证书文件的串联,按照优先顺序。这可以替代地和/或另外地使用 SSLProxyCACertificatePath

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

最佳

SSLProxyCACertificatePath 指令

描述: 远程服务器认证的PEM编码的CA证书目录
句法: SSLProxyCACertificatePath directory-path
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl

该指令设置您保存其所处理的远程服务器的证书颁发机构证书(CA)的目录。这些用于验证远程服务器身份验证上的远程服务器证书。

这个目录中的文件必须是PEM编码的,并通过哈希文件名来访问。所以通常你不能把证书文件放在那里:你还必须创建名为散列值的符号链接 .N你应该确保这个目录包含适当的符号链接。

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

最佳

SSLProxyCARevocationFile 指令

描述: 用于远程服务器身份验证的级联PEM编码的CA CRL文件
句法: SSLProxyCARevocationFile file-path
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl

该指令设置了一体式文件,您可以在其中组装证书吊销列表(CRL)的证书颁发机构(CA)的远程服务器处理。这些用于远程服务器身份验证。这样的文件就是各种PEM编码的CRL文件的串联,按照优先顺序。这可以替代地和/或另外地使用SSLProxyCARevocationPath

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

最佳

SSLProxyCARevocationPath 指令

描述: 远程服务器身份验证的PEM编码的CA CRL目录
句法: SSLProxyCARevocationPath directory-path
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl

此指令设置保存您所处理的远程服务器的证书颁发机构(CA)的证书吊销列表(CRL)的目录。这些用于撤消远程服务器身份验证上的远程服务器证书。

这个目录中的文件必须是PEM编码的,并通过哈希文件名来访问。所以通常你不仅要把CRL文件放在那里。另外,您必须创建名为哈希值的符号链接 .rN你应该确保这个目录包含适当的符号链接。

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

最佳

SSLProxyCheckPeerCN 指令

描述: 是否检查远程服务器证书CN字段
句法: SSLProxyCheckPeerCN on|off
默认: SSLProxyCheckPeerCN off
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl

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

SSLProxyCheckPeerCN on

最佳

SSLProxyCheckPeerExpire 指令

描述: 是否检查远程服务器证书是否过期
句法: SSLProxyCheckPeerExpire on|off
默认: SSLProxyCheckPeerExpire off
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl

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

SSLProxyCheckPeerExpire on

最佳

SSLProxyCipherSuite 指令

描述: 密码套件可用于SSL代理握手协商
句法: SSLProxyCipherSuite cipher-spec
默认: SSLProxyCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
语境: 服务器配置,虚拟主机,目录,.htaccess
覆盖: AuthConfig
状态: 延期
模块: 了mod_ssl

相当于SSLCipherSuite,但代理连接。请参阅SSLCipherSuite 附加信息。

最佳

SSLProxyEngine 指令

描述: SSL代理引擎操作开关
句法: SSLProxyEngine on|off
默认: SSLProxyEngine off
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl

该指令切换代理的SSL / TLS协议引擎的使用。这通常在一<VirtualHost>节中使用,以便在特定的虚拟主机中启用代理使用的SSL / TLS。默认情况下,对于主服务器和所有配置的虚拟主机,SSL / TLS协议引擎都被禁用。

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

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

最佳

SSLProxyMachineCertificateChainFile 指令

描述: 连接的PEM编码CA证书的文件,供代理用于选择证书
句法: SSLProxyMachineCertificateChainFile filename
语境: 服务器配置
覆盖: 不适用
状态: 延期
模块: 了mod_ssl
兼容性: 在Apache 2.2.23及更高版本中可用

该指令设置所有在一起的文件,在那里为所有使用的客户机证书保留证书链。如果远程服务器提供的CA证书列表不是所配置的客户端证书之一的直接签名者,则需要此指令。

这个引用的文件就是各种PEM编码证书文件的串联。启动后,将检查每个配置的客户端证书,并建立一个信任链。

安全警告

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

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

最佳

SSLProxyMachineCertificateFile 指令

描述: 连接的PEM编码的客户端证书文件和代理使用的密钥
句法: SSLProxyMachineCertificateFile filename
语境: 服务器配置
覆盖: 不适用
状态: 延期
模块: 了mod_ssl

该指令设置了将所有用于代理服务器验证的证书和密钥保存到远程服务器的一体化文件。

这个引用的文件就是各种PEM编码证书文件的串联,按照优先顺序排列。或者或另外使用这个指令SSLProxyMachineCertificatePath

目前不支持加密的私钥

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

最佳

SSLProxyMachineCertificatePath 指令

描述: PEM编码的客户端证书和代理使用的密钥的目录
句法: SSLProxyMachineCertificatePath directory
语境: 服务器配置
覆盖: 不适用
状态: 延期
模块: 了mod_ssl

该指令设置您将用于对代理服务器进行身份验证的证书和密钥保存到远程服务器的目录。

这个目录中的文件必须是PEM编码的,并通过哈希文件名来访问。另外,您必须创建名为的符号链接 hash-value.N你应该确保这个目录包含适当的符号链接。

目前不支持加密的私钥

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

最佳

SSLProxyProtocol 指令

描述: 为代理使用配置可用的SSL协议风格
句法: SSLProxyProtocol [+|-]protocol ...
默认: SSLProxyProtocol all
语境: 服务器配置,虚拟主机
覆盖: 选项
状态: 延期
模块: 了mod_ssl

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

请参阅SSLProtocol 附加信息。

最佳

SSLProxyVerify 指令

描述: 远程服务器的类型证书验证
句法: SSLProxyVerify level
默认: SSLProxyVerify none
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl

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

请注意,即使启用了证书验证, mod_ssl不会检查commonName服务器证书(主机名)属性是否 与用于连接到服务器的主机名相匹配。换句话说,代理不能保证到后端服务器的SSL连接是“安全的”,而不是证书由使用SSLProxyCACertificatePath和/或 SSLProxyCACertificateFile指令配置的CA之一签署的事实 为了完成这个检查,请查看 SSLProxyCheckPeerCN和 SSLProxyCheckPeerExpire默认关闭的指令。

以下级别可用于级别

  • none:不需要远程服务器证书是必需的
  • 可选:远程服务器可以提供有效的证书
  • 要求:远程服务器必须提供有效的证书
  • optional_no_ca:远程服务器可以提供有效的证书,
    但不需要(成功)验证。

在实践中,只有级别none和 require是非常有趣的,因为level optional不适用于所有服务器和级别 optional_no_ca实际上违背了认证的思想(但可以用来建立SSL测试页面等)

SSLProxyVerify require

最佳

SSLProxyVerifyDepth 指令

描述: 远程服务器证书验证中CA证书的最大深度
句法: SSLProxyVerifyDepth number
默认: SSLProxyVerifyDepth 1
语境: 服务器配置,虚拟主机
覆盖: AuthConfig
状态: 延期
模块: 了mod_ssl

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

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

SSLProxyVerifyDepth 10

最佳

SSLRandomSeed 指令

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

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

以下源代码版本可用:

  • builtin

    这是始终可用的内置播种源。它的使用在运行时消耗最少的CPU周期,因此可以始终使用,没有缺点。用于播种PRNG的源包含当前时间,当前进程ID和(当适用时)Apache的进程间记分板结构的随机选择的1KB摘录。缺点是,这不是一个强大的来源,并在启动时(记分牌仍然不可用),这个来源只产生几个字节的熵。所以你应该至少在启动时使用额外的播种源。

  • file:/path/to/source

    该变体使用外部文件/path/to/source作为种子PRNG的源。字节被指定时,只有第一个字节的文件的字节数形成熵(和 字节被提供给/path/to/source作为第一个参数)。字节未被指定时,整个文件形成熵(并且0被赋予/path/to/source作为第一个参数)。尤其是在启动时使用它,例如使用可用/dev/random和/或 /dev/urandom设备(通常存在于FreeBSD和Linux等现代Unix衍生产品中)。

    但要小心:通常/dev/random只提供与实际相同的熵数据,即当您请求512字节的熵时,但设备当前只有100个字节可用,则可能发生两件事:在某些平台上,只有100个字节处于打开状态其他平台的读取块直到有足够的字节可用(可能需要很长时间)。这里使用现有/dev/urandom的更好,因为它永远不会阻塞,并且实际上提供了所需的数据量。缺点是收到的数据质量可能不是最好的。

    在一些像FreeBSD这样的平台上,甚至可以控制熵是如何产生的,即由哪个系统中断。在这些平台上,可以在rndcontrol(8)下找到更多细节或者,当你的系统缺少这样一个随机设备时,你可以使用像EGD (Entropy Gathering Daemon)这样的工具,并运行它的客户端程序 exec:/path/to/program/(参见下文)或使用 egd:/path/to/egd-socket(见下文)。

  • exec:/path/to/program

    该变体使用外部可执行文件 /path/to/program作为种子PRNG的源。指定字节时,只有内容字节的第一个 字节stdout形成熵。没有指定字节时,整个数据就stdout形成了熵。只有在启动的时候才需要使用它,当你需要一个非常强大的种子在外部程序的帮助下(例如在上面的例子中,truerand你可以在mod_ssl发行版本中找到实用程序,该发行版基于AT&T的 truerand图书馆)。当然,在连接上下文中使用这个过于缓慢,服务器速度太快了。所以通常你应该避免在这种情况下使用外部程序。

  • egd:/path/to/egd-socket (仅适用于Unix)

    该变体使用外部熵收集守护程序(EGD)的Unix域套接字(请参见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
语境: 目录,.htaccess
覆盖: AuthConfig
状态: 延期
模块: 了mod_ssl

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

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

SSLRenegBufferSize 262144

最佳

SSLRequire 指令

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

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

执行SSLRequire不是线程安全的。在线程MPM中使用SSLRequire内部.htaccess文件可能会导致随机崩溃。

表达式必须以下语法(给出作为BNF语法表示法)匹配:

expr :: =“ true ”| 
           |  ”表达式
           | expr“ && ”expr
           | expr“ || ”expr
           |  ”expr“ 
           | 补偿

comp :: = word“ == ”word | 单词“ eq ”一词
           | 单词“ != ”单词| 单词“ ne ”一词
           | 字“ < ”字| 字“ lt ”字
           | 单词“ <= ”单词| 词“  ”字
           | 单词“ > ”单词| 词“ gt ”字
           | 单词“ > = ”单词| 字“ ge ”字
           | 单词“ in ”“ { ”wordlist“ }
           | 单词“ in ”“ OID( ”单词“ 
           | 字“ =〜 ”正则表达式
           | 字“ !〜 ”正则表达式

wordlist :: =单词
           | 单词表“  ”单词

字:: =数字
           | CString的
           | 变量
           | 功能

digit :: = [0-9] +
cstring :: =“...”
variable :: =“ %{ ”varname“ }
function :: = funcname“  ”funcargs“ 

varname来自表3的任何变量都可以使用。最后提供 funcname以下功能:

  • file(文件名)

    这个函数接受一个字符串参数并扩展到文件的内容。这对匹配正则表达式等内容特别有用。

请注意,表达式首先被解析为内部机器表示,然后在第二步中进行评估。实际上,在Global和Per-Server Class中,上下文表达式在启动时被解析,而在运行时只有机器表示被执行。对于Per-Directory上下文,特别是在.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} >= 1 and %{TIME_WDAY} <= 5 \
and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/

OID()函数期望在客户端证书中查找给定OID的零个或多个实例,并将左侧字符串与匹配OID属性的值进行比较。每个匹配的OID都被检查,直到找到一个匹配。

标准的CGI / 1.0和Apache变量:

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
HTTP:标题名SERVER_NAME TIME_MIN
THE_REQUEST SERVER_PORT TIME_SEC
REQUEST_METHOD SERVER_PROTOCOL TIME_WDAY
REQUEST_SCHEME REMOTE_ADDR TIME
REQUEST_URI REMOTE_USER ENV:变量名称 
REQUEST_FILENAME

SSL相关变量:

HTTPS SSL_CLIENT_M_VERSION SSL_SERVER_M_VERSION
                       SSL_CLIENT_M_SERIAL SSL_SERVER_M_SERIAL
SSL_PROTOCOL SSL_CLIENT_V_START SSL_SERVER_V_START
SSL_SESSION_ID SSL_CLIENT_V_END SSL_SERVER_V_END
SSL_CIPHER SSL_CLIENT_S_DN SSL_SERVER_S_DN
SSL_CIPHER_EXPORT SSL_CLIENT_S_DN_C SSL_SERVER_S_DN_C
SSL_CIPHER_ALGKEYSIZE SSL_CLIENT_S_DN_ST SSL_SERVER_S_DN_ST
SSL_CIPHER_USEKEYSIZE SSL_CLIENT_S_DN_L SSL_SERVER_S_DN_L
SSL_VERSION_LIBRARY SSL_CLIENT_S_DN_O SSL_SERVER_S_DN_O
SSL_VERSION_INTERFACE SSL_CLIENT_S_DN_OU SSL_SERVER_S_DN_OU
                       SSL_CLIENT_S_DN_CN SSL_SERVER_S_DN_CN
                       SSL_CLIENT_S_DN_T SSL_SERVER_S_DN_T
                       SSL_CLIENT_S_DN_I SSL_SERVER_S_DN_I
                       SSL_CLIENT_S_DN_G SSL_SERVER_S_DN_G
                       SSL_CLIENT_S_DN_S SSL_SERVER_S_DN_S
                       SSL_CLIENT_S_DN_D SSL_SERVER_S_DN_D
                       SSL_CLIENT_S_DN_UID SSL_SERVER_S_DN_UID
                       SSL_CLIENT_S_DN_Email SSL_SERVER_S_DN_Email
                       SSL_CLIENT_I_DN SSL_SERVER_I_DN
                       SSL_CLIENT_I_DN_C SSL_SERVER_I_DN_C
                       SSL_CLIENT_I_DN_ST SSL_SERVER_I_DN_ST
                       SSL_CLIENT_I_DN_L SSL_SERVER_I_DN_L
                       SSL_CLIENT_I_DN_O SSL_SERVER_I_DN_O
                       SSL_CLIENT_I_DN_OU SSL_SERVER_I_DN_OU
                       SSL_CLIENT_I_DN_CN SSL_SERVER_I_DN_CN
                       SSL_CLIENT_I_DN_T SSL_SERVER_I_DN_T
                       SSL_CLIENT_I_DN_I SSL_SERVER_I_DN_I
                       SSL_CLIENT_I_DN_G SSL_SERVER_I_DN_G
                       SSL_CLIENT_I_DN_S SSL_SERVER_I_DN_S
                       SSL_CLIENT_I_DN_D SSL_SERVER_I_DN_D
                       SSL_CLIENT_I_DN_UID SSL_SERVER_I_DN_UID
                       SSL_CLIENT_I_DN_Email SSL_SERVER_I_DN_Email
                       SSL_CLIENT_A_SIG SSL_SERVER_A_SIG
                       SSL_CLIENT_A_KEY SSL_SERVER_A_KEY
                       SSL_CLIENT_CERT SSL_SERVER_CERT
                       SSL_CLIENT_CERT_CHAIN_ n 
                       SSL_CLIENT_VERIFY SSL_TLS_SNI
最佳

SSLRequireSSL 指令

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

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

SSLRequireSSL

最佳

SSLSessionCache 指令

描述: 全局/进程间SSL会话缓存的类型
句法: SSLSessionCache type
默认: SSLSessionCache none
语境: 服务器配置
状态: 延期
模块: 了mod_ssl

这将配置全局/进程间SSL会话缓存的存储类型。这个缓存是一个可选的工具,可以加速并行请求处理。对于对同一服务器进程的请求(通过HTTP保持活动),OpenSSL已经在本地缓存了SSL会话信息。但是,由于现代客户通过并行请求(通常最多4个并行请求是常见的)请求内联图像和其他数据,这些请求由 不同的预分叉服务器进程提供服务。这里进程间缓存有助于避免不必要的会话握手。

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

  • none

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

  • nonenotnull

    这会禁用任何全局/进程间会话缓存。然而,它强制OpenSSL发送一个非空的会话ID,以适应需要的客户端。

  • dbm:/path/to/datafile

    这使用本地磁盘上的DBM散列文件来同步服务器进程的本地OpenSSL内存缓存。这个会话缓存在高负载下可能会遇到可靠性问题。

  • shm:/path/to/datafile(size) ]

    这使得RAM(通过建立)中的共享内存段内的高性能循环缓冲区(大小约为字节大小/path/to/datafile)来同步服务器进程的本地OpenSSL内存缓存。这是推荐的会话缓存。

  • dc:UNIX:/path/to/socket

    这使用distcache分布式会话缓存库。参数应使用distcache地址语法指定要使用的服务器或代理的位置; 例如,UNIX:/path/to/socket指定一个UNIX域套接字(通常是本地dc_client代理); IP:server.example.com:9001指定一个IP地址。

例子

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

最佳

SSLSessionCacheTimeout 指令

描述: 会话缓存中SSL会话过期之前的秒数
句法: SSLSessionCacheTimeout seconds
默认: SSLSessionCacheTimeout 300
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl
兼容性: 也适用于Apache 2.2.28及更高版本中的RFC 5077 TLS会话恢复

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

SSLSessionCacheTimeout 600

最佳

SSLSessionTicketKeyFile 指令

描述: TLS会话票据的持久加密/解密密钥
句法: SSLSessionTicketKeyFile file-path
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl
兼容性: 在httpd 2.2.30及更高版本中可用,如果使用OpenSSL 0.9.8h或更高版本

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

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

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

票据密钥应该经常旋转(替换),因为这是使现有会话票证失效的唯一方法 - OpenSSL当前不允许指定票据生存期的限制。重新启动Web服务器后,只能使用新票证密钥。所有现有的会话票证在重新启动后都会失效。

票证密钥文件包含敏感的密钥材料,应使用类似于所使用的文件许可权来保护 SSLCertificateKeyFile

最佳

SSLSessionTickets 指令

描述: 启用或禁用TLS会话票证的使用
句法: SSLSessionTickets on|off
默认: SSLSessionTickets on
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl
兼容性: 在httpd 2.2.30及更高版本中可用,如果使用OpenSSL 0.9.8f或更高版本。

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

TLS会话票据默认启用。使用它们而不必以适当的频率(例如每天)重新启动web服务器就可以实现完美的前向保密。

最佳

SSLStrictSNIVHostCheck 指令

描述: 是否允许非SNI客户端访问基于名称的虚拟主机。
句法: SSLStrictSNIVHostCheck on|off
默认: SSLStrictSNIVHostCheck off
语境: 服务器配置,虚拟主机
状态: 延期
模块: 了mod_ssl
兼容性: 在Apache 2.2.12和更高版本中可用

该指令设置是否允许非SNI客户端访问基于名称的虚拟主机。如果设置为on基于非默认名称的虚拟主机,则不允许非SNI客户端访问此特定的虚拟主机。如果设置为on基于默认名称的虚拟主机,则不允许非SNI客户端访问属于此IP /端口组合的任何基于名称的虚拟主机。

这个选项只有在httpd是针对支持SNI的版本的OpenSSL进行编译时才可用。

SSLStrictSNIVHostCheck on

最佳

SSLUserName 指令

描述: 变量名确定用户名
句法: SSLUserName varname
语境: 服务器配置,目录,.htaccess
覆盖: AuthConfig
状态: 延期
模块: 了mod_ssl
兼容性: 在Apache 2.0.51和更高版本中可用

该指令在Apache请求对象中设置“user”字段。这由较低的模块用字符串标识用户。特别是,这可能会导致环境变量 REMOTE_USER被设置。VARNAME可以是任何的SSL环境变量

请注意,如果使用该FakeBasicAuth选项,则此伪指令不起作用 (请参阅SSLOptions)。

SSLUserName SSL_CLIENT_S_DN_CN

最佳

SSLVerifyClient 指令

描述: 客户证书类型验证
句法: SSLVerifyClient level
默认: SSLVerifyClient none
语境: 服务器配置,虚拟主机,目录,.htaccess
覆盖: AuthConfig
状态: 延期
模块: 了mod_ssl

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

以下级别可用于级别

  • none:没有客户证书是必需的
  • 可选:客户可以出示有效的证书
  • 要求:客户必须出示有效的证书
  • optional_no_ca:客户可以提供有效的证书,
    但不需要(成功)可验证。

在实践中,只有级别none和 require是非常有趣的,因为level 可选不适用于所有的浏览器和级别 optional_no_ca实际上违背了认证的思想(但可以用来建立SSL测试页面等)

SSLVerifyClient require

最佳

SSLVerifyDepth 指令

描述: 客户端证书验证中CA证书的最大深度
句法: SSLVerifyDepth number
默认: SSLVerifyDepth 1
语境: 服务器配置,虚拟主机,目录,.htaccess
覆盖: AuthConfig
状态: 延期
模块: 了mod_ssl

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

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

SSLVerifyDepth 10

校睿宝培训机构ERP,学员课时管理软件
实验预约管理软件,实验室管理软件,大学、高校实验预约平台
网站日志分析软件,网站访问日志在线分析
哲涛服务器监控软件,IT运维管理软件,CPU、内存、磁盘监控软件

上海哲涛网络科技有限公司版权所有 © 2005-2023       沪ICP备06058430号-1

沪公网安备 31011302000898号

点我咨询