A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Debian + Postfix + PostfixAdmin + SquirrelMail

Sab

16

Mai

2009


01:19

(19 votos, média 4.53 de 5) 


Muito bem, somos uma Autoridade Certificadora (CA) e podemos assinar nossos próprios certificados. Pois então vamos criar uma requisição para um certificado da CA. Qualquer pessoa que se conectar ao nosso servidor vai se conectar ao nome de host desta máquina. O servidor Secure Web, servidor Secure IMAP, servidor Secure POP e o servidor Postfix Secure SMTP serão todos nome_do_host.exemplo.com. Por este motivo, o Common Name PRECISA SER nosso nome de host FQDN quando criarmos a requisição. O Organisation name precisa ser o mesmo que consta no certificado CA. Não indique seu endereço de email, challenge password ou um optional company name quando gerar o CSR (certificate signing request - requisição de assinatura de certificado):

openssl req -new -nodes -out req.pem
Country Name BR
State or Province Name Parana
Locality Name Curitiba
Organisation Name Minha Empresa Ltda
Organisational Unit Name Servidor WebMail
Common Name (eg, YOUR name) nome_do_host.exemplo.com
Email Address

Este processo também produz dois arquivos, uma chave privada em privkey.pem e uma requisição de assinatura de certificado em req.pem. Estes arquivos deveriam ser guardados. A chave privada será necessária para a encriptação SSL. Vamos fazer um backup destes aquivos com nomes mais descritivos:

cp -i privkey.pem privkey.nome_do_host.exemplo.com.pem
chmod 600 privkey.*
cp -i req.pem req.nome_do_host.exemplo.com.pem

Assine o Certificado (é aqui que você precisa da sua frase-senha):

openssl ca -out cert.pem -cert cacert.pem -infiles req.pem

Este processo atualiza a base de dados da CA e produz dois arquivos, um certificado em cert.pem e uma cópia do certificado em demoCA/newcerts/ com o nome xx.pem, onde xx é um número de série. Vamos copiar o cert com um nome mais descritivo. O certificado contém a versão codificada e a versão legível, tudo no mesmo arquivo. Queremos eliminar a porção legível:

mv -i cert.pem temp.cert.nome_do_host.exemplo.com.pem
openssl x509 -in temp.cert.nome_do-host.exemplo.com.pem -out cert.pem
cp -i cert.pem cert.nome_do_host.exemplo.com.pem

O Postfix e o Dovecot vão pedir o cert e a chave em dois arquivos separados, o apache2 vai solicitar os dois combinados (mas pode usar dois arquivos separados se for configurado para isto).

cat privkey.nome_do_host.exemplo.com.pem cert.nome_do_host.exemplo.com.pem >key-cert.pem
cp -i key-cert.pem key-cert.nome_do_host.exemplo.com.pem
chmod -R 600 /root/CA

Despois destes passos você tem três elementos instaláveis (além de mais algumas cópias descritivas):

  • Uma chave privada em privkey.pem (com uma cópia chamada privkey.nome_do_host.exemplo.com.pem)
  • Um certificado em cert.pem (e a cópia cert.nome_do_host.exemplo.com.pem)
  • Uma chave privada combinada com o certificado em key-cert.pem (cuja cópia é key-cert.nome_do_host.exemplo.com.pem)

Está na hora de dar uma cópia do certificado combinado para o Apache2. Vamos configurar nome_do_host.exemplo.com no Apache2 para que use o /etc/apache2/key-cert.nome_do_host.exemplo.com.pem:

/etc/init.d/apache2 stop
/etc/init.d/apache2 start
cd /root/CA/
cp key-cert.nome_do_host.exemplo.com.pem /etc/apache2/
chmod 600 /etc/apache2/key-cert.nome_do_host.exemplo.com.pem

Agora vamos configurar o Apache2. Primeiro habilitamos o módulo SSL, como também o módulo rewrite para, opcionalmente, podermos redirecionar as requisições feitas para a porta 80 para a porta 443:

a2enmod ssl
a2enmod rewrite

Vamos fazer uma cópia do site default. Esta cópia será usada na configuração do site SSL:

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl

Agora edite /etc/apache2/sites-available/default

vi /etc/apache2/sites-available/default

e mude

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/

para:

<VirtualHost *:80>
        ServerAdmin webmaster@exemplo.com
        ServerName nome_do_host.exemplo.com
        DocumentRoot /var/www/

Edite também /etc/apache2/sites-available/ssl

vi /etc/apache2/sites-available/ssl

e mude

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/

para:

<VirtualHost *:443>
        ServerAdmin webmaster@exemplo.com
        ServerName nome_do_host.exemplo.com
        SSLEngine on
        SSLCertificateFile /etc/apache2/key-cert.nome_do_host.exemplo.com.pem
        DocumentRoot /var/www/

Depois de editados os arquivos, habilite o novo site que chamamos de ssl e reinicie o Apache2:

a2ensite ssl
/etc/init.d/apache2 stop
/etc/init.d/apache2 start

Se você fez tudo direitinho, então não deve receber mensagens de erro quando baixar e levantar o Apache2. Agora eu sugiro que você adicione uma entrada no arquivo hosts do seu computador pessoal, por exemplo, 111.111.111.111 nome_do_host.exemplo.com, ou que crie um registro A na sua zona no servidor DNS apropriado (o que, mais hora, menos hora, precisa ser feito de qualquer forma). A esta altura você deveria conseguir navegar tanto com http://nome_do_host.exemplo.com como com https://nome_do_host.exemplo.com. A página web default diz apenas "It works!".

vovo A esta altura do campeonato eu optei por inserir uma entrada no arquivo hosts na minha máquina local com o sistema Windows XP. Só para constar, este arquivo está em /seu_diretório_do_windows/system32/drivers/etc/hosts. Edite-o e aí é só mandar bala.

Habilitamos a porta 80 apenas para facilitar as coisas. Na verdade, não queremos que os usuários façam conexão sem usar SSL, por isso vamos configurar um redirecionamento. Isto é opcional, porém é altamente recomendado. Edite /etc/apache2/sites-available/default mais uma vez

vi /etc/apache2/sites-available/default

e insira estes itens adicionais no ponto mostrado:

<VirtualHost *:80>
        RewriteEngine   on
        RewriteCond     %{SERVER_PORT} ^80$
        RewriteRule     ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
        RewriteLog      "/var/log/apache2/rewrite.log"
        RewriteLogLevel 2

Depois, reinicie o Apache2:

/etc/init.d/apache2 restart

Despois desta alteração, se você fechar o browser, abri-lo novamente e chamar http://nome_do_host.exemplo.com, você vai ser redirecionado para o site SSL (observe a troca de http por https no endereço e o cadeado no rodapé do browser). Isto custa um pouquinho por que dois processos são requeridos para manter as duas portas, a 80 e a 443. A grande vantagem é que nenhum dos usuários precisa se lembrar de usar https://. Aliás, costumo usar lsof -P | grep LISTEN para mostrar as portas que estão em uso.

Se você quiser hospedar múltiplos sites http com múltiplos certificados, deixo para você a tarefa de desvendar como fazer isto. O que posso adiantar é que você pode criar e assinar quantos certificados quiser, apenas certifique-se de não criar um novo certificado de autoridade (CA). A autoridade certificadora, apenas uma e única, pode assinar todos os certificados. Pelo que eu saiba, se mais de um site usar SSL, cada um deles vai precisar de um endereço IP diferente. O Google é seu amigo. Para deixar as coisas bem claras, você pode hospedar tantos domínios de email quantos quiser, mas nesta configuração todos eles são acessados através de uma, e apenas uma, interface http. Mas vamos continuar que ainda tem muita coisa pela frente...

Faça o backup e substitua o certificado e a chave do Dovecot:

mv /etc/ssl/certs/dovecot.pem /etc/ssl/certs/dovecot.pem.backup
cp cert.nome_do_host.exemplo.com.pem /etc/ssl/certs/dovecot.pem
mv /etc/ssl/private/dovecot.pem /etc/ssl/private/dovecot.pem.backup
cp privkey.nome_do_host.exemplo.com.pem /etc/ssl/private/dovecot.pem
chmod 0600 /etc/ssl/private/dovecot.pem
/etc/init.d/dovecot restart

Informe o Postfix onde encontrar os certificados (e aproveite para configurar alguns parâmetros TLS adicionais). Também faremos um backup do main.cf antes de modificá-lo pela primeira vez:

cp -i /etc/postfix/main.cf /etc/postfix/main.cf-17mai2009
postconf -e "smtpd_tls_cert_file = /etc/ssl/certs/dovecot.pem"
postconf -e "smtpd_tls_key_file = /etc/ssl/private/dovecot.pem"
postconf -e "smtpd_tls_CAfile = /etc/ssl/certs/cacert.exemplo.com.pem"
postconf -e "smtpd_tls_received_header = yes"
postfix reload

Executando alguns destes comandos uma segunda vez tem como resultado sobre-escrever chaves e certificados, e isto pode não ser bom. Alguns arquivos serão sobre-escritos se certificados adicionais forem requisitados, assinados e criados. Isto é o esperado e também o motivo pelo qual fazemos cópias específicas para os hosts de tudo à medida que avançamos. Apenas tome cuidado para não sobre-escrever qualquer arquivo host-específico que tenha sido criado e lembre-se: é preciso criar apenas um Certificado de Autoridade raiz. Faça um backup da sessão, no próprio servidor e fora dele (na sua máquina local ou num pendrive - sugiro usar o WinSCP):

cp -r /root/CA /root/CA-17mai2009

Informações adicionais