Apache 模块 mod_session_crypto

Description:会话加密支持
Status:Experimental
Module Identifier:session_crypto_module
Source File:mod_session_crypto.c
Compatibility:在 Apache 2.3 和更高版本中可用

Summary

Warning

会话模块使用 HTTP cookie,因此可能成为跨站点脚本攻击的受害者,或向 Client 端公开潜在的私人信息。在服务器上启用会话功能之前,请确保已考虑到相关风险。

mod_session的此子模块提供对用户会话加密的支持,然后再将其写入本地数据库或通过 HTTP cookie 写入远程浏览器。

这可以帮助向用户会话提供隐私,在这些用户会话中,应使会话的内容对用户保密,或者需要针对跨站点脚本攻击的影响进行保护。

有关会话界面的更多详细信息,请参阅mod_session模块的文档。

Basic Usage

要创建一个简单的加密会话并将其存储在名为 session 的 cookie 中,请按以下方式配置会话:

基于浏览器的加密会话

Session On
SessionCookieName session path=/
SessionCryptoPassphrase secret

该会话将使用给定的密钥进行加密。通过确保每个服务器上使用相同的加密密钥,可以将不同的服务器配置为共享会话。

如果更改了加密密钥,则会话将自动失效。

有关如何使用会话存储用户名和密码详细信息的文档,请参阅mod_auth_form模块。

SessionCryptoCipher Directive

Description:用于加密会话的加密密码
Syntax:SessionCryptoCipher name
Default:SessionCryptoCipher aes256
Context:服务器配置,虚拟主机,目录,.htaccess
Status:Experimental
Module:mod_session_crypto
Compatibility:在 Apache 2.3.0 和更高版本中可用

SessionCryptoCipher指令允许在加密期间使用密码。如果未指定,则密码默认为aes256

可能的值取决于使用的加密驱动程序,并且可能是以下之一:

  • 3des192

  • aes128

  • aes192

  • aes256

SessionCryptoDriver Directive

Description:用于加密会话的加密驱动程序
Syntax:SessionCryptoDriver name [param[=value]]
Default:none
Context:server config
Status:Experimental
Module:mod_session_crypto
Compatibility:在 Apache 2.3.0 和更高版本中可用

SessionCryptoDriver伪指令指定用于加密的加密驱动程序的名称。如果未指定,则驱动程序默认为编译为 APR-util 的推荐驱动程序。

NSS 加密驱动程序需要一些配置参数,这些参数被指定为在驱动程序名称后带有可选值的参数。

没有证书数据库的 NSS

SessionCryptoDriver nss

NSS 与证书数据库

SessionCryptoDriver nss dir=certs

具有证书数据库和参数的 NSS

SessionCryptoDriver nss dir=certs key3=key3.db cert7=cert7.db secmod=secmod

NSS 路径包含空格

SessionCryptoDriver nss "dir=My Certs" key3=key3.db cert7=cert7.db secmod=secmod

服务器的另一部分可能已经配置了 NSS 加密驱动程序,例如从mod_nssmod_ldap。如果发现已经配置,则会记录警告,并且现有配置将生效。为避免此警告,请按以下方式使用 noinit 参数。

NSS 与证书数据库

SessionCryptoDriver nss noinit

为避免混淆,请确保所有需要 NSS 的模块都配置有相同的参数。

openssl 加密驱动程序支持一个可选参数,用于指定要用于加密的引擎。

具有引擎支持的 OpenSSL

SessionCryptoDriver openssl engine=name

SessionCryptoPassphrase Directive

Description:用于加密会话的密钥
Syntax:SessionCryptoPassphrase secret [ secret ... ]
Default:none
Context:服务器配置,虚拟主机,目录,.htaccess
Status:Experimental
Module:mod_session_crypto
Compatibility:在 Apache 2.3.0 和更高版本中可用

SessionCryptoPassphrase伪指令指定用于在写入会话之前对会话的内容启用对称加密,或在读取会话之后对会话的内容进行解密的密钥。

密钥较长时,由 true 随机的字符组成,因此更加安全。更改服务器上的密钥具有使所有现有会话无效的作用。

可以指定多个按键以支持按键旋转。列出的第一个密钥将用于加密,而列出的所有密钥都将尝试解密。要在一段时间内在多个服务器上轮换密钥,请在列表末尾添加一个新密钥,然后将其完全部署到所有服务器后,从列表开头删除第一个密钥。

从 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 Directive

Description:包含用于加密会话的密钥的文件
Syntax:SessionCryptoPassphraseFile filename
Default:none
Context:服务器配置,虚拟主机,目录
Status:Experimental
Module:mod_session_crypto
Compatibility:在 Apache 2.3.0 和更高版本中可用

SessionCryptoPassphraseFile伪指令指定配置文件的名称,该文件包含用于加密或解密会话的密钥,每行指定一个。在服务器启动时会读取该文件,因此,httpd 需要正常重启才能获取对密钥的更改。

SessionCryptoPassphrase指令不同,这些密钥不会在 httpd 配置中公开,并且可以通过适当地保护文件来隐藏。

可以指定多个按键以支持按键旋转。列出的第一个密钥将用于加密,而列出的所有密钥都将尝试解密。要在一段时间内在多个服务器上轮换密钥,请在列表末尾添加一个新密钥,然后将其完全部署到所有服务器后,从列表开头删除第一个密钥。