Diferença entre SSLCertificateFile e SSLCertificateChainFile?

35

Normalmente, com um host virtual, um ssl é configurado com as seguintes diretivas:

Listen 443 

SSLCertificateFile /home/web/certs/domain1.public.crt
SSLCertificateKeyFile /home/web/certs/domain1.private.key
SSLCertificateChainFile /home/web/certs/domain1.intermediate.crt

De: para ativar o SSL para um único domínio em um servidor com vários vhosts, essa configuração funcionará?

Qual é a diferença entre SSLCertificateFilee SSLCertificateChainFile? O cliente comprou uma chave CA do GoDaddy. Parece que o GoDaddy fornece apenas um SSLCertificateFile(arquivo .crt) e um SSLCertificateKeyFile (arquivo .key) e não em SSLCertificateChainFile.

Meu ssl ainda funcionará sem um SSLCertificateChainFilecaminho especificado?

Além disso, existe um caminho canônico em que esses arquivos devem ser colocados?

chrisjlee
fonte
1
Os lugares mais comuns em que vejo pessoas colocando os arquivos de certificação estão em /etc/ssl, /usr/local/etc/sslou em um sslsubdiretório específico para o site (por exemplo /home/www/example.com/data, o site home/www/example.com/sslpossui os certificados).
Chris S

Respostas:

49

A rigor, você nunca precisa da cadeia para o SSL funcionar.

O que você sempre precisa é de um SSLCertificateFilecom SSLCertificateKeyFilea chave correta para esse certificado.

O problema é que, se tudo o que você fornece ao Apache é o certificado, tudo o que tem a oferecer para conectar os clientes é o certificado - o que não conta toda a história sobre esse certificado SSL. Está dizendo: "Sou contratado por alguém, mas não vou falar sobre eles".

Isso geralmente funciona bem, pois a maioria dos sistemas clientes tem um grande repositório de certificados de CA (raiz e intermediário), que podem ser verificados por um relacionamento de assinatura correspondente para estabelecer confiança. No entanto, às vezes isso não funciona; na maioria das vezes, o problema no qual você se depara é um cliente que não possui o certificado de uma CA intermediária que assinou seu certificado.

É aí que entra a corrente; ele permite que o Apache mostre ao cliente exatamente como é a relação de confiança, o que pode ajudar um cliente a preencher os espaços em branco entre seu certificado, uma raiz em que confia e o intermediário que eles desconhecem. A cadeia pode ser incluída na sua configuração de uma de duas maneiras:

  • Incorporado no mesmo arquivo que você definiu para o seu SSLCertificateFile, em novas linhas após o certificado do servidor em ordem (a raiz deve estar na parte inferior). Se você configurá-lo dessa maneira, será SSLCertificateChainFileapontado exatamente para o mesmo arquivo que SSLCertificateFile.
  • Em um arquivo separado configurado na SSLCertificateChainFilediretiva; o certificado da CA que emitiu o certificado do servidor deve ser o primeiro no arquivo, seguido por outros na raiz.

Verifique o arquivo de certificado que você possui agora - aposto que ele não possui os dados da cadeia incluídos. O que geralmente funciona bem, mas acabará causando um problema em algum navegador ou outro.

Shane Madden
fonte
2
Eu acho que "geralmente funciona bem" não se aplica mais aos materiais do GoDaddy, se o intermediário não estiver incluído. Eu nem tenho certeza se ele se aplica mais a caras como Verisign e Thawte, na verdade, uma vez que eles se mudaram para tornar o site mais distante dos sites básicos incluídos no navegador. Eu imagino que isso facilita a revogação, já que é mais fácil matar os intermediários.
CJC
"Incorporado no SSLCertificateFile": desejei que isso funcionasse, mas não parece e não é mencionado nos documentos. Sua corrente deve ser colocada SSLCertificateChainFile.
Steve Kehlet 27/09/12
@SteveKehlet Você está certo que não está documentado, mas eu já fiz funcionar com sucesso no passado - como você formatou o arquivo da multifuncional?
Shane Madden
1
@SteveKehlet Na verdade, você está certo, lembrei-me errado; a maneira como eu o configurei para um único arquivo era ter os dois SSLCertificateFilee SSLCertificateChainFileapontar para o mesmo arquivo combinado, que funciona - editei minha resposta para corrigir isso.
Shane Madden
@ShaneMadden Beautiful! Funciona! Muito obrigado por descobrir isso.
Steve Kehlet
4

Na verdade, o GoDaddy fornece uma cadeia intermediária:

http://support.godaddy.com/help/5238

Aqui está mais algumas discussões.

http://support.godaddy.com/help/868/what-is-an-intermediate-certificate

O email do GoDaddy informando como fazer o download do seu novo certificado também terá informações sobre o arquivo de certificado intermediário. Está em algum lugar na parte inferior, talvez depois que seus olhos vidrem da verborragia e aumentam as vendas.

Em termos do que acontecerá se você não incluir a diretiva SSLCertificateChainFile adequada: você verá um grande aviso vermelho em seu navegador porque seu site SSL não será validado nos navegadores, pois eles não podem seguir a cadeia de certificados do seu site cert para um pertencente a uma autoridade de certificação que o navegador conhece.

cjc
fonte
2

Gostaria de acrescentar às boas respostas anteriores sobre o SSLCertificateChainFile que a ordem dos certificados nesse arquivo também é importante. Os clientes baseados em OpenSSL resolverão a ordem eles mesmos, mas os clientes baseados em gnutls falharão em uma cadeia com a ordem incorreta.

Teste a ordem com gnutls-cli, como

gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p https wwwsec.cs.uu.nl

onde /etc/ssl/certs/ca-certificates.crt é o local em que sua distribuição coloca os certificados combinados.

Koos van den Hout
fonte