Temos servidores web Apache 2.16 onde a autenticação é feita através de certificados de cliente X509 (eles vêm de cartões de chips). Aqui está a configuração do diretório:
<Directory /directory>
SSLVerifyClient optional
SSLVerifyDepth 5
SSLRequireSSL
SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate
</Directory>
A autenticação corre bem, mas de tempos em tempos, quando o usuário tenta enviar um arquivo, o upload falha, e nós encontramos isso no log de erros do 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
Mas mesmo usando a diretiva SSLRenegBufferSize, o usuário ainda tem o bug (é puro aleatório). O grande problema é que não consigo nem reproduzir o bug. O cliente http (navegador) pode ser a diferença entre eu e o usuário, só tenho o Firefox 17 no Linux e estou coletando informações do usuário.
O valor opcional para SSLVerifyClient é necessário, pois permite que nosso software manipule quando um usuário não tem seu certificado ou quando um certificado é expirado. Caso contrário, o navegador mostrará apenas uma página de erro técnico, inadequada para nossos usuários.