Como posso iniciar o Apache no Arch Linux com systemd usando chaves SSL protegidas por frase secreta?

5

Sou relativamente novo no uso do Arch Linux e acho que devo estar perdendo a maneira óbvia de fazer isso corretamente, mas - de iniciar o daemon por conta própria - não consigo descobrir como obter chaves SSL protegidas por senha desbloqueado ao iniciar o serviço normalmente. Com chaves desprotegidas ou sem a configuração SSL, o Apache inicia normalmente usando o serviço systemd. Assim que tento usar chaves protegidas, recebo algo assim:

$ sudo systemctl start httpd
Job for httpd.service failed.

$ sudo systemctl status httpd
httpd.service - Apache Web Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: failed (Result: exit-code) since Mon 2014-02-10 11:47:07 UTC; 13ms ago
  Process: 26035 ExecStop=/usr/bin/apachectl graceful-stop (code=exited, status=0/SUCCESS)
  Process: 26042 ExecStart=/usr/bin/apachectl start (code=exited, status=1/FAILURE)
 Main PID: 25500 (code=exited, status=0/SUCCESS)

systemd[1]: Starting Apache Web Server...
apachectl[26042]: Apache/2.2.26 mod_ssl/2.2.26 (Pass Phrase Dialog)
apachectl[26042]: Some of your private key files are encrypted for security reasons.
apachectl[26042]: In order to read them you have to provide the pass phrases.
apachectl[26042]: Server {name redacted}:443 (RSA)
apachectl[26042]: Enter pass phrase:Apache:mod_ssl:Error: Private key not found.
apachectl[26042]: **Stopped
systemd[1]: httpd.service: control process exited, code=exited status=1
systemd[1]: Failed to start Apache Web Server.
systemd[1]: Unit httpd.service entered failed state.

Até onde eu sei, o Apache sabe que precisa desbloquear minhas chaves, mas se o systemd souber que o prompt da frase secreta precisa ser mostrado, qualquer tentativa de fazer isso não está atingindo meu shell e falhando silenciosamente.

Qual é a melhor maneira de praticar (ou Arch Way ™ ) para iniciar o Apache e desbloquear chaves SSL protegidas usando systemd?

    
por Caleb 10.02.2014 / 13:03

2 respostas

2

  • Escreva um script wrapper em torno do apache e coloque-o em ExecStart= da unidade (você pode usar drop-ins para isso; não é necessário copiar a unidade inteira em /etc )
  • No script de wrapper, use systemd-ask-password <PROMPT> , leia a senha de seu stdout e alimente-a ao apache da maneira que for necessária
  • Não se esqueça de exec apache do final do seu script para não deixar um processo extra por volta

Isso fará com que o systemd consulte a senha imediatamente (se você iniciar o apache usando systemctl ) ou usando um dos chamados agentes (existem os padrões que solicitam senhas usando o wall ou diretamente no console). Essa é a melhor coisa que você pode fazer para ficar em conformidade.

    
por 28.12.2014 / 00:05
1

Não tenho certeza sobre a maneira de fazer o systemd, mas o Apache torna isso possível, mas é iniciado com a diretiva SSLPassPhraseDialog. Basicamente, você cria um pequeno script de shell em um arquivo:

SSLPassPhraseDialog  /etc/domain.com_ssl_passphrase.sh

O conteúdo do arquivo:

#!/bin/bash
echo "passphrase"

Verifique se o arquivo é executável:

chmod +x /etc/domain.com_ssl_passphrase.sh

Agora, quando você inicia o Apache via systemd, ele executa esse script ao carregar a configuração SSL do (s) site (s).

    
por 12.02.2014 / 23:23