mod_sessioncrypto
描述: | Session 加密支持 |
状态: | 试验 |
模块标识符: | sessioncrypto_module |
源文件: | mod_sessioncrypto.c |
兼容性: | 可在 Apache 2.3 及更高版本中使用 |
摘要
警告
session 模块使用 HTTP cookies,因此可能成为 Cross Site Scripting 攻击的受害者,或者将潜在的私人信息暴露给 clients。在服务器上启用 session 功能之前,请确保已考虑相关风险。
mod_session的这个子模块在写入本地数据库之前提供对用户会话加密的支持,或者通过 HTTP cookie 写入 remote 浏览器。
这有助于为用户会话提供隐私,其中 session 的内容应保持对用户的私密性,或者需要保护以防止跨站点脚本攻击的影响。
有关 session 接口的更多详细信息,请参阅mod_session模块的文档。
基本用法
要创建一个简单的加密 session 并将其存储在名为 session 的 cookie 中,请按以下方式配置 session:
基于浏览器的加密 session
Session On SessionCookieName session path=/ SessionCryptoPassphrase secret
session 将使用给定的 key 加密。通过确保在每个服务器上使用相同的加密 key,可以将不同的服务器配置为共享会话。
如果更改了加密 key,会话将自动失效。
有关如何使用 session 来存储用户名和密码详细信息的文档,请参阅mod_auth_form模块。
SessionCryptoCipher 指令
描述: | 用于加密 session 的加密密码 |
句法: | SessionCryptoCipher name |
默认: | SessionCryptoCipher aes256 |
Context: | server config,virtual host,directory,.htaccess |
状态: | 试验 |
模块: | mod_sessioncrypto |
兼容性: | 可在 Apache 2.3.0 及更高版本中使用 |
SessionCryptoCipher
指令允许在加密期间使用密码。如果未指定,则密码默认为aes256
。
可能的值取决于正在使用的加密驱动程序,可能是以下之一:
- des192
- AES128
- AES192
- AES256
SessionCryptoDriver 指令
描述: | 用于加密 session 的加密驱动程序 |
句法: | SessionCryptoDriver name[param[=value]] |
默认: | none |
Context: | 服务器配置 |
状态: | 试验 |
模块: | mod_sessioncrypto |
兼容性: | 可在 Apache 2.3.0 及更高版本中使用 |
SessionCryptoDriver
指令指定要用于加密的加密驱动程序的 name。如果未指定,则驱动程序默认为编译为 APR-util 的推荐驱动程序。
NSS 加密驱动程序需要一些 configuration 参数,这些参数在 driver name 之后被指定为带有可选值的参数。
没有证书数据库的 NSS
SessionCryptoDriver nss
NSS 与证书数据库
SessionCryptoDriver nss dir=certs
NSS 具有证书数据库和参数
SessionCryptoDriver nss dir=certs key3=key3.db cert7=cert7.db secmod=secmod
带有 paths 的 NSS 包含空格
SessionCryptoDriver nss "dir=My Certs" key3=key3.db cert7=cert7.db secmod=secmod
NSS 加密驱动程序可能已由服务器的另一部分配置,例如mod_nss
或modldap。如果发现已配置,将记录警告,现有的 configuration 将生效。要避免此警告,请使用 noinit 参数,如下所示。
NSS 与证书数据库
SessionCryptoDriver nss noinit
为防止混淆,请确保所有需要 NSS 的模块都配置了相同的参数。
openssl 加密驱动程序支持可选参数以指定用于加密的引擎。
支持引擎的 OpenSSL
SessionCryptoDriver openssl engine=name
SessionCryptoPassphrase 指令
描述: | key 用于加密 session |
句法: | SessionCryptoPassphrase secret[ secret ...] |
默认: | none |
Context: | server config,virtual host,directory,.htaccess |
状态: | 试验 |
模块: | mod_sessioncrypto |
兼容性: | 可在 Apache 2.3.0 及更高版本中使用 |
SessionCryptoPassphrase
指令指定在写 session 之前用于对 session 的内容进行对称加密的密钥,或者在读取 session 之后解密 session 的内容。
密钥在 long 时更安全,并且由真正随机的字符组成。更改服务器上的 key 会使所有现有会话无效。
可以在 order 中指定多个键以支持 key 旋转。列出的第一个 key 将用于加密,而列出的所有键都将尝试进行解密。要在 time 期间跨多个服务器轮换密钥,请在列表末尾添加新的 secret,并在完全推出到所有服务器后,从列表的开头删除第一个 key。
从 version 2.4.7 开始,如果 value 以 exec 开头:将执行生成的命令,程序返回标准输出的第一个 line 将用作 key。
#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 指令
描述: | 包含用于加密 session 的密钥的文件 |
句法: | SessionCryptoPassphraseFile filename |
默认: | none |
Context: | server config,virtual host,目录 |
状态: | 试验 |
模块: | mod_sessioncrypto |
兼容性: | 可在 Apache 2.3.0 及更高版本中使用 |
SessionCryptoPassphraseFile
指令指定 configuration 文件的 name,该文件包含用于加密或解密 session 的密钥,每个 line 指定一个。在服务器启动时读取该文件,httpd 需要正常重启以获取对密钥的更改。
与SessionCryptoPassphrase指令不同,密钥不在 httpd configuration 中公开,可以通过适当保护文件来隐藏。
可以在 order 中指定多个键以支持 key 旋转。列出的第一个 key 将用于加密,而列出的所有键都将尝试进行解密。要在 time 期间跨多个服务器轮换密钥,请在列表末尾添加新的 secret,并在完全推出到所有服务器后,从列表的开头删除第一个 key。