Como configuro condicionalmente o SSLCertificateFile quando o arquivo existe?

2

Estou usando o Let's Encrypt ( certonly ) para gerar certificados SSL para vários sites hospedados em um servidor Apache. O local do arquivo desses certificados é determinado antes de serem criados, portanto, estou escrevendo seus caminhos para a configuração do host virtual antecipadamente. Quando o site estiver em execução, usarei certbot para obter os arquivos de certificado e recarregarei a configuração do Apache.

Eu também tenho um certificado SSL global definido com arquivos válidos, portanto, todos os hosts virtuais SSL terão um certificado.

O problema que estou tendo é que o Apache não será executado sem todos os arquivos de certificado, apesar de ter um substituto global. Tentei configurar condicionalmente o certificado Let's Encrypt somente quando o arquivo existe usando IF , mas o Apache diz SSLCertificateFile not allowed here .

Como posso substituir o SSLCertificateFile global somente quando os novos arquivos de certificado existem? Estou tentando fazer tudo isso sem ter que modificar a configuração antes e depois da geração dos certificados.

Aqui está o que eu tentei:

<If "-f '/etc/letsencrypt/live/domain/fullchain.pem'">
  SSLCertificateFile /etc/letsencrypt/live/domain/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/domain/privkey.pem
</If>

SSLCertificateFile not allowed here

    
por Nathan 26.04.2017 / 07:56

3 respostas

2

Nesse caso, criaria um diretório de links simbólicos para cada domínio e usaria o certificado snakeoil do servidor (ou seu certificado "global" mencionado anteriormente) para os domínios que você ainda não configurou. Por exemplo:

$ ls -1 /etc/ssl/domains
example.com/fullchain.pem -> /etc/letsencrypt/live/example.com/fullchain.pem
example.com/privkey.pem -> /etc/letsencrypt/live/example.com/privkey.pem
second-example.com/fullchain.pem -> /etc/ssl/certs/ssl-cert-snakeoil.pem
second-example.com/privkey.pem -> /etc/ssl/private/ssl-cert-snakeoil.key

Você pode então configurar as diretivas do Apache para usar o diretório do symlink:

SSLCertificateFile /etc/ssl/domains/example.com/fullchain.pem
SSLCertificateKeyFile /etc/ssl/domains/example.com/privkey.pem

Isso tem a vantagem de precisar substituir o link simbólico somente quando você gera um certificado Let's Encrypt do domínio, no entanto, os usuários que visitam o domínio antes de instalar um certificado completo receberão avisos, pois o certificado snakeoil é autoassinado.

    
por 26.04.2017 / 09:35
0

Outra ideia: se entendi corretamente, você tem o virtualhost global como um catchall e depois outros virtualhosts, um por site. Se o site ainda não tiver o certificado SSL associado, ele não deverá ser configurado. Você pode colocar cada configuração de site em seu próprio arquivo e ter dois diretórios: sites-enabled e sites-waiting com uma configuração do Apache dizendo para incluir tudo de sites-enabled . Quando o seu site está configurado (o que significa que tem o seu certificado SSL), você só precisa mover sua configuração de um diretório para outro e recarregar o Apache.

Esse tipo de configuração é feito por várias distribuições Linux.

    
por 29.04.2017 / 17:38
0

Na verdade, eu tenho o alias conhecido no mesmo diretório para todos os virtualhosts. Desta forma, o desafio é alcançável através do virtualhost padrão quando o novo virtualhost não está habilitado.

    
por 30.06.2017 / 13:03