Vamos supor que tens um servidor Ubuntu ou Debian, a usar um ou mais entre o Nginx, Postfix e Dovecot, e queres “linká-los” ao LibreSSL em vez do OpenSSL default do sistema. (As razões podem ser várias: talvez porque a distro que usas ainda só inclui o OpenSSL 1.0.x, que é antigo (“estável”, do ponto de vista conservador) e não suporta cifras modernas como a ChaCha20, ou porque confias mais nos developers do OpenBSD (que fazem o LibreSSL) do que nos do OpenSSL, ou — e não há nada de errado com isso, é assim que se evolui — apenas pela piada da coisa. Podias também usar o OpenSSL 1.1.x, a ser abordado num post futuro.)
Segue-se, então, uma forma relativamente simples de o fazer, que não muda o OpenSSL default do sistema (o que não seria boa ideia, a não ser que recompilasses tudo, e estivesses disposto a ter muito trabalho):
Instalar dependências:
Instalar o LibreSSL:
- faz o download da última versão do código fonte portável1 em www.libressl.org
- compila e instala, fazendo:
Instala o Nginx:
- edita o ficheiro nginx-<versão>/debian/rules: adiciona
à linha que começa por “debian_cflags:=“, e:
à linha que começa por “debian_ldflags:“. De seguida, entra na directoria nginx-<versão> e compila os pacotes com o comando:
- Instala os pacotes recém-criados na directoria anterior com o comando “dpkg -i <pacotes>” (sugestão: faz “dpkg -l | grep nginx” para ver que pacotes já tinhas instalados; tipicamente queres substituir esses pelas versões acabadas de compilar);
- E, por último:
Feito! Podes agora usar o Guia de TLS da Mozilla para adicionar suporte a cifras modernas à tua configuração de Nginx, e a Ferramenta de teste de servidores TLS da SSLLabs para verificar se estão correctamente configuradas.
Instalar o Postfix:
O processo é igual ao Nginx (substituindo “nginx” por “postfix” em cada comando / nome de directoria, obviamente), excepto que as alterações ao ficheiro debian/rules são as seguintes:
- encontra a linha com -DHAS_SSL, adiciona -I/usr/include/libressl/include/openssl à frenre;
- encontra AUXLIBS += , acrescenta -L/usr/local/libressl/lib à frente;
- encontra a linha com dh_shlibdeps -a, adiciona –dpkg-shlibdeps-params=–ignore-missing-info no fim;
- não esquecer o apt-mark hold postfix* após a instalação dos novos pacotes.
Instalar o Dovecot:
Mais uma vez, adapta as instruções para o Nginx, uando “dovecot” em vez de “nginx” em cada sítio, excepto que as alterações ao debian/rules devem ser:
- após a linha:
export DEB_BUILD_MAINT_OPTIONS=hardening=+all
adiciona:
export SSL_CFLAGS=-I/usr/local/libressl/include export SSL_LIBS=-L/usr/local/libressl/lib -lssl -lcrypto
- após a secção:
override_dh_makeshlibs: # Do not add an ldconfig trigger; none of the dovecot shared libraries # are public. dh_makeshlibs -n
acrescenta:
override_dh_shlibdeps: dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
NOTA: a indentação na segunda linha tem de ser um tab; não utilizes espaços.
Uma vez mais, não esquecer o “apt-mark hold dovecot*” após a instalação.
Como verificar se as tuas novas instalações do Nginx, Postfix e/ou Dovecot estão a usar o LibreSSL em vez do OpenSSL default do sistema? Poderias usar o comando ldd para ver para que libraries de SSL/TLS os binários estão “linkados”, mas a melhor forma é provavelmente usar uma ferramenta como o sslscan, que permite ver que cifras os serviços de HTTPS, SMTP, IMAP, etc. suportam (incluindo através do STARTTLS). Se vires nessa lista a cifra ChaCha20, está tudo bem. A não ser, claro, quando eventualmente o Debian e o Ubuntu passarem a usar o OpenSSL 1.1.x por default (ainda não o fizeram, à data deste post), caso esse em que a cifra já estará lá à partida; nesse caso o melhor é mesmo usar o ldd.
Para voltar às versões “normais” destes serviços, basta fazer apt-mark unhold nginx* (por exemplo).
Adicionei também /usr/local/libressl/bin ao início da minha variável de ambiente PATH, de forma a que os binários do LibreSSL sejam usados por default (ex. para gerar chaves, CSRs, etc.), se bem que isto não é necessário para o Nginx, etc. funcionarem.