On this page
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_nss
或mod_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 配置中公开,并且可以通过适当地保护文件来隐藏。
可以指定多个按键以支持按键旋转。列出的第一个密钥将用于加密,而列出的所有密钥都将尝试解密。要在一段时间内在多个服务器上轮换密钥,请在列表末尾添加一个新密钥,然后将其完全部署到所有服务器后,从列表开头删除第一个密钥。