Estou atualizando meu servidor web Apache e me perguntando se preciso declarar um arquivo CA na configuração do vhost?
Minha configuração do vhost é
SSLEngine on
SSLCertificateFile /home/user/ssl/${SITE}-cert.pem
SSLCertificateKeyFile /home/user/ssl/${SITE}-key.pem
SSLCertificateChainFile /home/user/ssl/${SITE}-ca.pem
#SSLCACertificateFile /home/user/ssl/${SITE}-ca.pem
Por padrão, o Apache é fornecido apenas com o SSLCertificateFile
e SSLCertificateKeyFile
ativo. O mesmo com o pacote do Debian. Eu entendo os dois.
Por padrão, ambos SSLCertificateChainFile
e SSLCACertificateFile
estão desabilitados na fonte do Apache e no pacote do Debian. Eu pensei que tinha entendido isso, mas não tenho tanta certeza agora.
Todos os meus sites funcionam bem com as duas CA
diretivas desabilitadas.
Mas estou perdendo alguma coisa? A desativação de ambos está fazendo com que meu servidor forneça uma CA nos bastidores, como no /etc/ssl/certs do sistema?
Let's Encrypt fornece seu arquivo CA durante a renovação, então achei que não faria mal especificar o SSLCertificateChainFile
, mas quero entender por que meus sites funcionam sem ele?
Essas duas diretivas CA não servem a um propósito semelhante ao arquivo de pacote CA do cURL obtido do Mozilla ? Posso apenas apontar SSLCACertificateFile
para isso no meu servidor e encerrar o dia?
Foi meu entendimento que o cliente se encarrega de verificar o certificado do site usando sua própria CA autorizada. Estou errado?
Os documentos não parecem oferecer nenhum insight:
Em primeiro lugar, enviar a cadeia intermediária para o certificado raiz com a resposta do servidor nem sempre é exatamente NECESSÁRIO , mas é uma prática recomendada.
Muitos clientes hoje em dia têm todos os tipos de certificados intermediários armazenados em seus armazenamentos confiáveis de certificados ou os obtêm no armazenamento confiável do sistema operacional. No entanto, se você pretende atender ao público em GERAL, não pode fazer suposições sobre isso e DEVE enviar a cadeia intermediária com sua resposta.
Se você não enviar a cadeia intermediária, você receberá relatos esporádicos de pessoas que não conseguem se conectar ao seu serviço. E isso pode depender do navegador, da versão do navegador e do sistema operacional subjacente.
Ironicamente, escolher uma cadeia intermediária específica e enviá-la com a resposta pode, às vezes, abortar a validação SSL para alguns clientes que a validariam de alguma cadeia armazenada. Como foi o caso de alguns clientes openssl mais antigos em servidores e certificados emitidos pelo letsencrypt, mas você pode assumir que, nesse caso, o suporte desses servidores acabará por descobrir.
Na verdade, você não precisa da diretiva ChainFile no Apache para isso, porque também pode concatenar arquivos de certificado pem do certificado final para a raiz e usá-los apenas com a diretiva SSLCertificateFile.
O que você não precisa fazer é enviar o certificado raiz. Porque se um cliente realmente usar isso, isso anularia o uso prático da validação SSL.
SSLCACertificateFile
é necessário se, e somente se, você precisar validar certificados de clientes que se conectam a você E não quiser usar o armazenamento confiável do sistema subjacente para isso. Então, este é realmente um uso totalmente diferente do que oSSLCertificateChainfile
Além disso, em caso de dúvida, use as excelentes ferramentas de validação do Qualys SSL Labs: https://www.ssllabs.com/ssltest/
Um arquivo CA é necessário se os certificados precisarem ser validados em relação a essa CA. No contexto de um servidor SSL como o Apache, isso é necessário para validar certificados de clientes e para validar respostas OCSP no contexto de grampeamento OCSP. Se nada disso for necessário, nenhum arquivo CA precisa ser fornecido. Se isso for necessário, mas a validação deve ocorrer em relação à CA padrão do sistema, nenhum arquivo de CA também precisa ser fornecido.