我们有 Apache 2.16 网络服务器,其中通过 X509 客户端证书(它们来自芯片卡)进行身份验证。这是目录配置:
<Directory /directory>
SSLVerifyClient optional
SSLVerifyDepth 5
SSLRequireSSL
SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate
</Directory>
身份验证运行良好,但有时,当用户尝试上传文件时上传失败,我们在 apache 错误日志中发现:
[Thu Dec 06 09:14:25 2012] [error] [client 80.82.235.94] Re-negotiation request failed
[Thu Dec 06 09:14:25 2012] [error] SSL Library Error: 336068931 error:14080143:SSL routines:SSL3_ACCEPT:unsafe legacy renegotiation disabled
[Thu Dec 06 09:14:25 2012] [error] [client 80.82.235.94] request body exceeds maximum size (131072) for SSL buffer
[Thu Dec 06 09:14:25 2012] [error] [client 80.82.235.94] could not buffer message body to allow SSL renegotiation to proceed
但即使使用 SSLRenegBufferSize 指令,用户仍然有错误(它是纯随机的)。最大的问题是我什至无法重现该错误。http客户端(浏览器)可能是我和用户的区别,我只有Linux下的Firefox 17,我是在收集用户的信息。
SSLVerifyClient 的可选值是必需的,因为它允许我们的软件处理用户没有证书或证书过期的情况。否则浏览器只会显示一个技术错误页面,不适合我们的用户。
这个问题是随机发生的,因为只有在需要重新协商时才会发生,顺便说一下,这篇文章应该包含问题的答案
Request Entity Too Large error while uploading files of more than 128KB over SSL