logoCert_sugestao2.png

Procedimento para substituição manual de chaves DNSSEC

Objetivo

Este documento aborda o procedimento para substituição manual de chaves DNSSEC. Para mais informações sobre o gerenciamento de chaves DNSSEC, veja DNSSEC: adicionando segurança ao Sistema de Nomes de Domínio (seção Manutenção da zona segura). Nesse procedimento listaremos os passos para troca da chave KSK, através do método double-signing, e da chave ZSK, através do método pre-publish (mais informações sobre os métodos de troca de chave e o motivo da escolha do método por tipo de chave, veja [Métodos de troca de chaves no DNSSEC).

Introdução

Para manter um controle sobre a utilização das chaves, recomenda-se a utilização de uma tabela, como a seguinte, que liste quais chaves estão sendo utilizadas e quando as mesmas devem ser removidas.

Chave Tipo Estado Data Início Data Fim
Kexemplo-dnssec.br.+005+03977 ZSK chave atual 2010-05-01 2010-08-01
Kexemplo-dnssec.br.+005+12513 KSK chave atual 2010-05-01 2012-06-01


OBS1: O campo Chave refere-se ao basename do arquivo que contém a chave.
OBS2: Os valores dos campos Data Início e Data Fim são determinados a partir da política de chaves da instituição

IMPORTANTE: Para garantir o cumprimento das datas definidas para troca das chaves, recomenda-se o agendamento de tarefas (por exemplo, no CRON da máquina de gerência da instituição) para alertar por e-mail os administradores da zona sobre os prazos.

Nas seções a seguir detalharemos os passos para substituição da KSK e da ZSK. Cada seção é dividida em passos intermediários, que serão executados em momentos diferentes. Para saber qual o momento correto de executar cada passo, adicionamos o campo Condição Necessária, que deve ser satisfeita para prosseguir naquele passo.

Substituição da KSK

Assinatura da zona com duas chaves


Condição Necessária: Receber e-mail de alerta sobre a proximidade de substituição da KSK. Esse é o primeiro passo a ser seguido no procedimento de substituição da KSK.

Descrição das etapas:
  • Primeiro devemos gerar a nova chave. No comando abaixo, alguns parâmetros que podem variar com sua política de chaves, tais como algoritmo (-a rsasha1) e tamanho da chave (-b 1280), ou com a zona em questão (nome da zona nesse caso é exemplo-dnssec.br).
# dnssec-keygen -a rsasha1 -b 1280 -f KSK -r /dev/urandom exemplo-dnssec.br
Kexemplo-dnssec.br.+005+50148

  • Em seguida, adiciona-se essa nova chave ao arquivo de zona. Abaixo segue um exemplo da inclusão da chave gerada (dados fictícios e supondo-se que os arquivos estão na mesma pasta):
$TTL 86400 ; 1 day
$ORIGIN exemplo-dnssec.br.
@            IN SOA ns1.exemplo-dnssec.br. hostmaster.exemplo-dnssec.br. (
                         2005032902 ; serial
                         10800      ; refresh (3 hours)
                         15         ; retry (15 seconds)
                         604800     ; expire (1 week)
                         10800      ; minimum (3 hours)
                         )
            IN NS ns1.exemplo-dnssec.br.
            IN MX 10 mail.exemplo-dnssec.br.

$INCLUDE Kexemplo-dnssec.br.+005+12513.key ; KSK atual
$INCLUDE Kexemplo-dnssec.br.+005+50148.key ; nova KSK
$INCLUDE Kexemplo-dnssec.br.+005+03977.key ; ZSK atual

ns1         IN A 192.168.2.6
www         IN A 10.1.2.1
            IN A 172.16.2.1
mail        IN A 192.168.2.3

  • Então, deve-se re-assinar a zona, utilizando as duas chaves, a nova e a atual (o comando abaixo possui uma única linha):
dnssec-signzone -o exemplo-dnssec.br -g -t -k Kexemplo-dnssec.br.+005+12513 -k Kexemplo-dnssec.br.+005+50148 pop-ba.zone Kexemplo-dnssec.br.+005+03977

O comando acima irá gerar um arquivo, provavelmente dsset-exemplo-dnssec.br.. Esse arquivo deve ser enviado ao administrador da zona parent, conforme será explicado logo a seguir.

  • Finalmente, recarregue a configuração no daemon do bind:
/etc/init.d/bind9 restart

Conforme já explicamos anteriormente, teremos que enviar um hash da chave pública KSK nova para que o administrador da zona parent atualize o registro DS de sua zona. Com o parâmetro -g no comando de assinatura da zona acima, um arquivo chamado dsset-exemplo-dnssec.br. deve ter sido gerado no mesmo diretório. Pois bem, deve-se entrar em contato com o administrador da zona parent, enviando esse arquivo e solicitando a substituição do registro DS anterior. Peça para que você seja notificado da substituição, pois isso será importante para o próximo passo.

Passaremos a considerar que a chave atual agora é chave antiga (no exemplo, key-tag é 12513) e a chave nova agora é chave atual (no exemplo, key-tag é 50148). A partir desse momento até a remoção da chave antiga, assinaremos a zona sempre com o comando acima. Notifique os outros administradores da zona sobre esse fato (por exemplo, através de e-mail), se for o caso.

Contagem para remoção da KSK antiga


Condição Necessária: Receber e-mail do administrador da zona parent notificando sobre a alteração do registro DS. Esse é o segundo passo a ser seguido no procedimento de substituição da KSK.

Descrição das etapas:
  • Uma vez que a zona parent já atualizou o registro DS para a nova chave pública KSK gerada acima, basta aguardar que os servidores de cache expirem os dados que contém a chave antiga para que possamos removê-la da zona. É importante notar que, caso sua chave tenha sido ancorada diretamente em algum servidor recursivo, ela terá que ser alterada nesse período. Em particular, será usado um prazo máximo de 30 dias desde a atualização da zona parent para remoção da chave antiga. Assim, ao receber a confirmação da alteração, configure uma rotina no seu servidor de gerência para enviar um e-mail aos administradores da zona em 30 dias. Ao final desse prazo deve ser aplicado a seguinte etapa: Remover chave KSK antiga da zona.

Remover a chave KSK antiga da zona


Condição Necessária: Receber e-mail de alerta sobre a proximidade de remover a chave KSK antiga da zona. Esse é o terceiro e último passo a ser seguido no procedimento de substituição da KSK.

Descrição das etapas:
  • Passados 30 dias desde a atualização do registro DS na zona parent com sua nova KSK, é momento de remover a chave antiga (no exemplo, key-tag é 12513). Para isso, edite o arquivo de definição da zona e remova a linha que contém a KSK antiga ($INCLUDE Kexemplo-dnssec.br.+005+12513.key ...). Usando o arquivo do exemplo acima, teremos o seguinte:
$TTL 86400 ; 1 day
$ORIGIN exemplo-dnssec.br.
@            IN SOA ns1.exemplo-dnssec.br. hostmaster.exemplo-dnssec.br. (
                         2005032902 ; serial
                         10800      ; refresh (3 hours)
                         15         ; retry (15 seconds)
                         604800     ; expire (1 week)
                         10800      ; minimum (3 hours)
                         )
            IN NS ns1.exemplo-dnssec.br.
            IN MX 10 mail.exemplo-dnssec.br.

$INCLUDE Kexemplo-dnssec.br.+005+50148.key ; nova KSK - agora a atual
$INCLUDE Kexemplo-dnssec.br.+005+03977.key ; ZSK atual

ns1         IN A 192.168.2.6
www         IN A 10.1.2.1
            IN A 172.16.2.1
mail        IN A 192.168.2.3

  • Então, deve-se re-assinar a zona, utilizando a chave nova/atual (key-tag = 50148):
dnssec-signzone -o exemplo-dnssec.br -t -k Kexemplo-dnssec.br.+005+50148 pop-ba.zone Kexemplo-dnssec.br.+005+03977

  • Finalmente, recarregue a configuração no daemon do bind:
/etc/init.d/bind9 restart

Pronto, finalmente o procedimento de troca da KSK está completo. Agora, configure uma rotina no seu servidor de gerência para enviar um e-mail aos administradores da zona quando estiver faltando 30 dias para a próxima troca de chaves (veja a política de troca de chaves do POP-BA para mais detalhes) - acrescente como título Substituição da KSK.

Substituição da ZSK

Adicionando a nova chave


Condição Necessária: Receber e-mail de alerta sobre a proximidade de substituição da ZSK. Esse é o primeiro passo a ser seguido no procedimento de substituição da ZSK.

Descrição das etapas:
  • Primeiro devemos gerar a nova chave. No comando abaixo, alguns parâmetros que podem variar com sua política de chaves, tais como algoritmo (-a rsasha1) e tamanho da chave (-b 1152), com a zona em questão (nome da zona nesse caso é exemplo-dnssec.br).
# dnssec-keygen -a rsasha1 -b 1152 -r /dev/urandom exemplo-dnssec.br
Kexemplo-dnssec.br.+005+39539
  • Em seguida, adiciona-se esse nova chave ao arquivo de zona e assina-se o arquivo de zona com a chave atual (não a nova). Abaixo segue um exemplo da inclusão da chave gerada (dados fictícios e supondo-se que os arquivos estão na mesma pasta):
$TTL 86400 ; 1 day
$ORIGIN exemplo-dnssec.br.
@            IN SOA ns1.exemplo-dnssec.br. hostmaster.exemplo-dnssec.br. (
                         2005032902 ; serial
                         10800      ; refresh (3 hours)
                         15         ; retry (15 seconds)
                         604800     ; expire (1 week)
                         10800      ; minimum (3 hours)
                         )
            IN NS ns1.exemplo-dnssec.br.
            IN MX 10 mail.exemplo-dnssec.br.

$INCLUDE Kexemplo-dnssec.br.+005+12513.key ; KSK atual
$INCLUDE Kexemplo-dnssec.br.+005+03977.key ; ZSK atual
$INCLUDE Kexemplo-dnssec.br.+005+39539.key ; nova ZSK

ns1         IN A 192.168.2.6
www         IN A 10.1.2.1
            IN A 172.16.2.1
mail        IN A 192.168.2.3

  • Então, deve-se re-assinar a zona, utilizando a chave atual:
dnssec-signzone -o exemplo-dnssec.br -t -k Kexemplo-dnssec.br.+005+12513 pop-ba.zone Kexemplo-dnssec.br.+005+03977

  • Finalmente, recarregue a configuração no daemon do bind:
/etc/init.d/bind9 restart

Agora, configure uma rotina no seu servidor de gerência para enviar um e-mail aos administradores da zona em 10 dias desde a configuração acima. Ao final desse prazo deve ser aplicado a seguinte etapa: Re-assinar a zona com a nova chave

Re-assinar a zona com a nova chave


Condição Necessária: Receber e-mail de alerta sobre a proximidade da assinatura da zona com a nova chave. Esse é o segundo passo a ser seguido no procedimento de substituição da ZSK.

Descrição das etapas:
  • Passados os 10 dias desde a introdução da nova chave na zona, é hora de usá-la na assinatura da zona. Para isso executamos o comando de assinatura da zona, como anteriormente, porém agora usando a nova chave (cujo key-tag é 39539):
dnssec-signzone -o exemplo-dnssec.br -t -k Kexemplo-dnssec.br.+005+12513 pop-ba.zone Kexemplo-dnssec.br.+005+39539

  • Recarregue a configuração no daemon do bind:
/etc/init.d/bind9 restart

A partir desse momento consideramos que a chave atual agora é chave antiga (no exemplo, key-tag é 03977) e a chave nova agora é chave atual (no exemplo, key-tag é 39539).

Agora devemos aguardar mais 10 dias para finalmente remover a chave antiga. Para isso configure uma rotina no seu servidor de gerência para enviar um e-mail aos administradores da zona em 10 dias desde a configuração acima. Ao final desse prazo deve ser aplicado a seguinte etapa: Remover a chave antiga da zona

Remover a chave antiga da zona


Condição Necessária: Receber e-mail de alerta sobre a proximidade da remoção da chave antiga. Esse é o terceiro e último passo a ser seguido no procedimento de substituição da ZSK.

Descrição das etapas:
  • Passados 10 dias desde a assinatura da zona, é momento de remover a chave antiga (no exemplo, key-tag é 03977). Para isso, edite o arquivo de definição da zona e remova a linha que contém a ZSK antiga ($INCLUDE Kexemplo-dnssec.br.+005+03977.key ...). Usando o arquivo do exemplo acima, teremos o seguinte:
$TTL 86400 ; 1 day
$ORIGIN exemplo-dnssec.br.
@            IN SOA ns1.exemplo-dnssec.br. hostmaster.exemplo-dnssec.br. (
                         2005032902 ; serial
                         10800      ; refresh (3 hours)
                         15         ; retry (15 seconds)
                         604800     ; expire (1 week)
                         10800      ; minimum (3 hours)
                         )
            IN NS ns1.exemplo-dnssec.br.
            IN MX 10 mail.exemplo-dnssec.br.

$INCLUDE Kexemplo-dnssec.br.+005+12513.key ; KSK atual
$INCLUDE Kexemplo-dnssec.br.+005+39539.key ; nova ZSK - agora a atual

ns1         IN A 192.168.2.6
www         IN A 10.1.2.1
            IN A 172.16.2.1
mail        IN A 192.168.2.3

  • Então, deve-se re-assinar a zona, utilizando a chave nova/atual (key-tag = 39539):
dnssec-signzone -o exemplo-dnssec.br -t -k Kexemplo-dnssec.br.+005+12513 pop-ba.zone Kexemplo-dnssec.br.+005+39539

  • Finalmente, recarregue a configuração no daemon do bind:
/etc/init.d/bind9 restart

Pronto, finalmente o procedimento de troca da ZSK está completo. Agora, configure uma rotina no seu servidor de gerência para enviar um e-mail aos administradores da zona quando estiver faltando 15 dias para a próxima troca de chaves (veja a política de troca de chaves do POP-BA para mais detalhes) - acrescente como título Substituição da ZSK.

Documentos relacionados

Referências externas

  • R. Aitchison, Pro DNS and BIND, Apress, 2005.