我运行 debian squeeze 标准 Apache 安装 (2.2),并使用 SSLClientCertificates 来授权用户。到目前为止,一切正常。
但是我们注意到一些并行请求的速度变慢了,并尝试检查我的是否SSLSessionCache
正常工作。
因此我检查了我的本地主机/服务器状态,它显示如下:
SSL/TLS Session Cache Status:
cache type: SHMCB, shared memory: 512000 bytes, current sessions: 0
subcaches: 32, indexes per subcache: 133
index usage: 0%, cache usage: 0%
total sessions stored since starting: 0
total sessions expired since starting: 0
total (pre-expiry) sessions scrolled out of the cache: 0
total retrieves since starting: 0 hit, 0 miss
total removes since starting: 0 hit, 0 miss
似乎正在运行,但无论我发出什么 SSL 请求,所有计数器都保持在 0,因此没有会话被缓存。
我尝试设置KeepAlive Off
,让每个请求建立一个新的 SSL 连接,但我仍然看不到SSLSessionCache
状态中增加的数字。
这是我的来自标准 Debian 的 SSLSessionCache 配置mods-enabled/ssl.conf
:
SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
SSLSessionCacheTimeout 300
SSLMutex file:${APACHE_RUN_DIR}/ssl_mutex
在我的 ssl_mutex 中${APACHE_RUN_DIR}
我看不到任何文件,没有 ssl_cache 文件。当我将我的 ssl_mutex 切换SSLSessionCache
到
SSLSessionCache dbm:${APACHE_RUN_DIR}/ssl_scache
我可以在该目录中看到一个文件,但是所有状态号仍然为零。
我尝试将 LogLevel 设置为调试。我收到的有关 SSL 缓存的唯一消息是:
$ grep cache /var/log/apache2/error.log
ssl_scache_shmcb.c(253): shmcb_init allocated 512000 bytes of shared memory
ssl_scache_shmcb.c(272): for 511920 bytes (512000 including header), recommending 32 subcaches, 133 indexes each
ssl_scache_shmcb.c(306): shmcb_init_memory choices follow
ssl_scache_shmcb.c(308): subcache_num = 32
ssl_scache_shmcb.c(310): subcache_size = 15992
ssl_scache_shmcb.c(312): subcache_data_offset = 3208
ssl_scache_shmcb.c(314): subcache_data_size = 12784
ssl_scache_shmcb.c(316): index_num = 133
Shared memory session cache initialised
ssl_scache_shmcb.c(452): [client xyz] inside shmcb_status
ssl_scache_shmcb.c(512): [client xyz] leaving shmcb_status
(为方便阅读,删除了日期和日志级别,为保护隐私,替换了 IP)
我的问题是:
- 在给定的目录中没有 mutex 和 sessionCache 文件,这是正确的吗?
- 如果是,如何证明我的 SessionCache 正在正常工作?
答案1
我不熟悉 Debian Squeeze,但这里有一些可以尝试的东西:
尝试使用 openssl 和reconnect
使用相同标志进行连接会话 5 次:
openssl s_client -connect your.server.com:443 -state -reconnect
看看你得到了什么。寻找Session-ID
&“Reused”。
其他需要排除的事项:
- 这是一个盲目的尝试,但是您可以
${APACHE_RUN_DIR}
用实际路径替换它并看看是否有帮助……? - 排除
ssl_*
运行 apache 的用户对上面提到的文件的写权限(不太可能,但仍然如此)。
答案2
在 /dev/shm 上安装 tmpfs 并将 ${APACHE_RUN_DIR} 替换为 /dev/shm/apache 为我解决了这个问题:
grep shm /etc/apache2/mods-enabled/ssl.conf
#SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
SSLSessionCache shmcb:/dev/shm/apache_ssl_scache(512000)
答案3
我遇到了类似的问题。
对我来说,当运行给定的命令时。当它尝试重新连接时,我收到“意外消息”错误。
但是在服务器上运行时,此命令可以正常工作,并且会话被重用。
当时,我对此没有解决办法