[[!toc levels=4]]

Geração e renovação de certificados
===================================

Começando
---------

Proceda com a [configuração do ambiente de trabalho administrativo](/install).

Branch especial
---------------

Mudando para o branch `certs` da configuracao do puppet:

    cd $FOLDER/puppet
    git pull
    git checkout certs # "checkout -b" se o branch nao existe
    git merge master

Gerando novas chaves
--------------------

Proceda usando o [keyringer](https://keyringer.pw):

    keyringer $HYDRA genpair ssl ssl/$DOMAIN *.$DOMAIN $FOLDER/puppet/keys/ssl/$DOMAIN

No caso da chave snakeoil (fornecida quando um atacante acessa https://IP), use

    keyringer $HYDRA genpair ssl-self ssl/example.org example.org $FOLDER/puppet/keys/ssl/example.org

Chaves também podem ser geradas em massa. No caso de certificados simples (não-wildcard):

    for domain in $DOMAINS; do
      keyringer $HYDRA genpair ssl ssl/$domain $domain $FOLDER/puppet/keys/ssl/$domain
    done

Registrando mudancas parciais
-----------------------------

    keyringer $HYDRA git commit
    keyringer $HYDRA git push
    git commit -a -m "Nova chave SSL"
    git push

Comprando um certificado
------------------------

Em seguida, compre um certificado no registrar, envie a requisição de certificado (arquivo `CSR`) e proceda com a validação.

Após a renovação
----------------

    mv  /path/to/$DOMAIN.crt               keys/ssl/$DOMAIN.crt
    cat keys/ssl/gandi.crt              >> keys/ssl/$DOMAIN.crt # baixe o intermediario para este caminho
    cat keys/ssl/$DOMAIN.pem             > keys/ssl/$DOMAIN-concat.pem
    cat keys/ssl/$DOMAIN.crt            >> keys/ssl/$DOMAIN-concat.pem
    cat keys/ssl/$DOMAIN.crt            >> keys/ssl/$DOMAIN-concat.crt
    cat keys/ssl/$DOMAIN.crt             | keyringer $HYDRA encrypt ssl/$DOMAIN.crt

    # Registrando e enviando mudancas finais
    keyringer $HYDRA git commit
    keyringer $HYDRA git push
    git commit -a -m "Novo certificado"
    git push

    # Aplicando as mudancas no branch principal
    git checkout master
    git merge certs
    git push

Informações de fingerprint:

    openssl x509 -noout -text        -in keys/ssl/$DOMAIN.crt
    openssl x509 -noout -fingerprint -in keys/ssl/$DOMAIN.crt
    openssl x509 -noout -fingerprint -in keys/ssl/$DOMAIN.crt -md5

Verificando os certificados assinados:

    openssl verify -verbose -CAfile keys/ssl/gandi.crt keys/ssl/$DOMAIN.crt

Comunicação ao público:

  * Modelos de mensagens de email disponível em `templates/certs`.
  * Notificação para `https://www.$DOMAIN/pt-br/certs` dispínvel em `notices/certs*`.

Assine as comunicações com a [chave do grupo](https://protocolos.sarava.org/trac/wiki/Comunicacao/OpenPGP), por exemplo:

    GPG_AGENT_INFO="" gpg -b --armor --default-key $KEY_FINGERPRINT -s $FOLDER/doc/notices/certs/$DOMAIN.pt-br.txt
    GPG_AGENT_INFO="" gpg -b --armor --default-key $KEY_FINGERPRINT -s $FOLDER/doc/notices/certs/$DOMAIN.en.txt

Copie as notificações para ser incluída em `https://$DOMAIN/certs`:

    cp $FOLDER/doc/notices/certs/* $FOLDER/puppet/modules/site_apache/files/htdocs/$MAIN_DOMAIN/certs/
    cd $FOLDER/puppet
    git add modules/site_apache/files/htdocs/$DOMAIN/certs/
    git commit -m "Atualizando info sobre certificados"
    git push

Por fim, atualize os `postfix::tlspolicy_snippet` do `$DOMAIN`, caso aplicável.

Checando expiração em massa
---------------------------

É necessário instalar o [ssl-cert-check](https://git.sarava.org/?p=ssl-wrapper.git;a=summary):

    cd $FOLDER/puppet/keys/ssl

    for file in *.crt; do
      ssl-cert-check -b -c $file
    done

Puppet
------

[Renovação de certificados do puppet](puppet).