Apache HTTP 服务器版本 2.4
描述 | 会话加密支持 |
---|---|
状态 | 实验性 |
模块标识符 | session_crypto_module |
源文件 | mod_session_crypto.c |
兼容性 | 在 Apache 2.3 及更高版本中可用 |
会话模块使用 HTTP cookie,因此可能成为跨站点脚本攻击的受害者,或将潜在的私密信息暴露给客户端。在服务器上启用会话功能之前,请确保已考虑相关风险。
此 mod_session
的子模块提供对在写入本地数据库或通过 HTTP cookie 写入远程浏览器之前加密用户会话的支持。
这有助于为用户会话提供隐私,其中会话内容应对用户保密,或者需要保护以防止跨站点脚本攻击的影响。
有关会话接口的更多详细信息,请参阅 mod_session
模块的文档。
要创建一个简单的加密会话并将其存储在名为 session 的 cookie 中,请按如下方式配置会话
Session On SessionCookieName session path=/ SessionCryptoPassphrase secret
会话将使用给定的密钥进行加密。通过确保每个服务器上使用相同的加密密钥,可以配置不同的服务器来共享会话。
如果加密密钥更改,会话将自动失效。
有关如何使用会话存储用户名和密码详细信息的文档,请参阅 mod_auth_form
模块。
描述 | 用于加密会话的加密密码 |
---|---|
语法 | SessionCryptoCipher name |
默认值 | SessionCryptoCipher aes256 |
上下文 | 服务器配置、虚拟主机、目录、.htaccess |
状态 | 实验性 |
模块 | mod_session_crypto |
兼容性 | 在 Apache 2.3.0 及更高版本中可用 |
SessionCryptoCipher
指令允许在加密期间使用密码。如果未指定,密码默认为 aes256
。
可能的值取决于使用的加密驱动程序,可能是以下之一
描述 | 用于加密会话的加密驱动程序 |
---|---|
语法 | SessionCryptoDriver name [param[=value]] |
默认值 | none |
上下文 | 服务器配置 |
状态 | 实验性 |
模块 | mod_session_crypto |
兼容性 | 在 Apache 2.3.0 及更高版本中可用 |
SessionCryptoDriver
指令指定用于加密的加密驱动程序的名称。如果未指定,驱动程序默认为编译到 APR-util 中的推荐驱动程序。
NSS 加密驱动程序需要一些配置参数,这些参数在驱动程序名称之后以可选值的参数形式指定。
SessionCryptoDriver nss
SessionCryptoDriver nss dir=certs
SessionCryptoDriver nss dir=certs key3=key3.db cert7=cert7.db secmod=secmod
SessionCryptoDriver nss "dir=My Certs" key3=key3.db cert7=cert7.db secmod=secmod
NSS 加密驱动程序可能已由服务器的另一个部分配置,例如来自 mod_nss
或 mod_ldap
。如果发现已配置,将记录警告,并且现有配置将生效。为了避免此警告,请使用 noinit 参数,如下所示。
SessionCryptoDriver nss noinit
为了避免混淆,请确保所有需要 NSS 的模块都使用相同的参数进行配置。
openssl 加密驱动程序支持一个可选参数来指定用于加密的引擎。
SessionCryptoDriver openssl engine=name
描述 | 用于加密会话的密钥 |
---|---|
语法 | SessionCryptoPassphrase secret [ secret ... ] |
默认值 | none |
上下文 | 服务器配置、虚拟主机、目录、.htaccess |
状态 | 实验性 |
模块 | mod_session_crypto |
兼容性 | 在 Apache 2.3.0 及更高版本中可用 |
SessionCryptoPassphrase
指令指定用于在写入会话之前对会话内容启用对称加密或在读取会话之后解密会话内容的密钥。
密钥越长,越安全,并且由真正的随机字符组成。更改服务器上的密钥会使所有现有会话失效。
可以指定多个密钥以支持密钥轮换。列出的第一个密钥将用于加密,而列出的所有密钥都将尝试用于解密。要在一段时间内跨多个服务器轮换密钥,请在列表末尾添加一个新密钥,并在完全推广到所有服务器后,从列表开头删除第一个密钥。
从 2.4.7 版本开始,如果值以 exec: 开头,则将执行生成的命令,并且程序返回到标准输出的第一行将用作密钥。
#key used as-is SessionCryptoPassphrase secret #Run /path/to/program to get key SessionCryptoPassphrase exec:/path/to/program #Run /path/to/otherProgram and provide arguments SessionCryptoPassphrase "exec:/path/to/otherProgram argument1"
描述 | 包含用于加密会话的密钥的文件 |
---|---|
语法 | SessionCryptoPassphraseFile filename |
默认值 | none |
上下文 | 服务器配置、虚拟主机、目录 |
状态 | 实验性 |
模块 | mod_session_crypto |
兼容性 | 在 Apache 2.3.0 及更高版本中可用 |
SessionCryptoPassphraseFile
指令指定一个配置文件的名称,该配置文件包含用于加密或解密会话的密钥,每行指定一个。该文件在服务器启动时读取,并且 httpd 需要进行优雅重启才能获取密钥的更改。
与 SessionCryptoPassphrase
指令不同,密钥不会在 httpd 配置中公开,并且可以通过适当保护文件来隐藏。
可以指定多个密钥以支持密钥轮换。列出的第一个密钥将用于加密,而列出的所有密钥都将尝试用于解密。要在一段时间内跨多个服务器轮换密钥,请在列表末尾添加一个新密钥,并在完全推广到所有服务器后,从列表开头删除第一个密钥。