sábado, 22 de outubro de 2016

Servidor de Impressão Raspberry Pi

Utilização de um Raspberry Pi 2B como servidor de impressão de uma impressora HP Deskjet 1510 PSC (Print Scan Copy).

A partir de uma imagem Raspbian Jessie Lite é possível configurar todo o sistema remotamente por SSH e browser.

Há muitas informações úteis na página do projeto debian [1] permitem perceber melhor o funcionamento.

Instalação e Configuração do CUPS

sudo apt-get install cups hplip

Para configuração remota via web é necessário ativar o acesso à interface web através da alteração da configuração Listen e acrescentar os endereços que têm acesso à mesma (neste caso a rede 192.168.0.*):
sudo nano /etc/cups/cupsd.conf
(...)
ServerAlias *
Listen *:631
(...)
# Restrict access to the server...
<Location />
  Order allow,deny
  Allow 192.168.0.*
</Location>

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow 192.168.0.*
</Location>

Atualização: A diretiva ServerAlias * permite aceder ao servidor CUPS através do IP ou do nome.

Por defeito o CUPS permite a autenticação a utilizadores do SystemGroup [2] e o utilizador pi não pertence a nenhum destes grupos.

Adicionar pi ao grupo lpadmin.
sudo usermod -a -G lpadmin pi

Para confirmar os grupos do utilizador:
groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio lpadmin

Para reiniciar o serviço após alterações às configurações é necessário:
sudo systemctl restart cups.service 

A partir daqui é possível configurar uma nova impressora via browser acedendo a:
http://raspberrypi:631

Ao adicionar uma impressora é reconhecida a impressora e de seguida é necessário escolher o driver da lista muito numerosa, neste caso:
HP PSC 1510 Series, hpcups 3.14.6

É necessário ativar a partilha da impressora aquando da instalação ou então mais tarde na configuração CUPS (Share printers connected to this system)

A partir daqui qualquer máquina na rede com o CUPS (normalmente qualquer Linux com sistema de impressão, por exemplo, ubuntu, Mint, etc) vai ver a impressora sem ser necessário qualquer instalação.

Resolução de Problemas

1. Ao aceder através do nome do servidor na porta 631 dá erro Bad Request
É necessário utilizar a diretiva ServerAlias *, que permite aceder ao servidor CUPS através do IP ou do nome.

2. Quando se manda imprimir o trabalho não é enviado
Confirmar se a impressora não está parada ou com erro através da página de administração: https://raspberrypi:631/printers

3. Debug
Pode ajudar alterar a diretiva LogLevel de warn para debug de forma a ter mais detalhes nos logs:
sudo less /var/log/cups/error_log

Referências

quinta-feira, 20 de outubro de 2016

Kodi e CEC - Debug e alteração de teclas do comando

Com um Raspberry Pi a correr o OpenELEC, o KODI reconhece o CEC enviado pela televisão. Contudo, não há qualquer tecla no comando que faça voltar para atrás, o que traz alguns inconvenientes na interação com o KODI.

Uma forma para fazer isso trata-se em colocar uma reafetação de inputs do CEC de forma a verificar o que está a ser pressionado, se está bem, se há outras teclas, etc. Foi o que descobri no blog de Steven Occhipinti [0].

É necessário ter acesso à pasta ~/.kodi/userdata/keymaps/ e aí colocar o ficheiro remote.xml [1] que permite fazer o debug e reiniciar o openelec.

Por SSH (a senha de root é openelec)
ssh root@openelecIP
cd ~/.kodi/userdata/keymaps/

wget https://gist.github.com/stevenocchipinti/42f2eca2a9f04ed9e52f/raw/d9fbf3c20edbff85d71b99b47d202d8a0ab1a8d9/remote.xml
reboot

Ao arrancar, de cada vez que se pressionar uma tecla aparece uma notificação indicando que ação foi desencadeada.

No meu caso todas as teclas que funcionam estão corretas e não há qualquer tecla nova. No entanto, reparei que quando pressionava rapidamente tecla verde e tecla amarela, aparecia a ação Title.
Como esta ação não serve para muito, poderia utilizar esta forma para ativar a ação Back que permite voltar para trás e dá muito jeito na interação com o kodi.

Assim, para reafetar a ação da tecla Title, resta copiar um remote.xml original, encontrar a ação Title e trocar para Back.

Por SSH:
ssh root@openelecIP
cd ~/.kodi/userdata/keymaps/

cp /usr/share/kodi/system/keymaps/remote.xml .
nano remote.xml
(...)
      <rootmenu>PreviousMenu</rootmenu>
      <title>Back</title>

      <info>Info</info>
(...)

É possível então alterar todas as entradas da ação Title para que faça execute Back.
No nano para procurar CTRL+W e pode procurar-se por <title> e ir substituindo.

Após guardar e reiniciar, a conjugação de teclas verde/amarela passou a funcionar como o voltar para trás, permitindo voltar ao menu principal, por exemplo.


[0] - http://blog.stevenocchipinti.com/2015/04/04/configuring-a-hdmi-cec-remote-in-kodi/
[1] - remote.xml - https://gist.github.com/stevenocchipinti/42f2eca2a9f04ed9e52f

quinta-feira, 21 de julho de 2016

COPS | Disponibilização web de uma biblioteca do Calibre

Com a crescente digitalização dos mais diversos livros e consequente disponibilização gratuita de muitas obras no domínio público, torna-se interessante a possibilidade de ter um acesso prático e fácil a um acervo digital deste tipo.

O software Calibre [1] permite gerir uma biblioteca digital de forma muito fácil, fornecendo mecanismos rápidos para a organização e catalogação da mesma. Aceita diversos tipos de ficheiros incluindo os mais que comuns EPUB e PDF.
Resta acrescentar que é um projeto open source e que está disponível para "todos" os sistemas operativos.

O Calibre possui um diretório de trabalho onde fica registada toda a informação referente à Biblioteca Digital.

O projeto COPS [2] foi desenvolvido pelo Sébastien Lucas e permite fazer com que um servidor web com PHP possa disponibilizar de forma rápida e acessível a biblioteca digital criada pelo Calibre.

0. Pré-Requisitos

A instalação será feita num servidor ubuntu 16.04 LTS com apache2 e php com algumas extensões instaladas.

apt-get install apache2 php php-gd php-sqlite3 php-json php-intl php-xml

Deverá ser feita a criação de uma biblioteca digital com o Calibre e ter acesso à mesma.

1. Instalação do COPS

Deve obter-se o ZIP com o código do COPS disponível aqui cops-1.0.0.zip e extrair-se na pasta do webserver.

cd /var/www/html
wget https://github.com/seblucas/cops/releases/download/1.0.0/cops-1.0.0.zip
unzip cops-1.0.0.zip

Para facilitar pode renomear-se o diretório:
mv cops-1.0.0 cops

A partir de agora é possível aceder a:
http://servidor/cops

2. Configuração do COPS

Deve abrir-se o ficheiro de configuração config_default.php e alterar o necessário, com especial atenção:
  • $config['calibre_directory'] = 'ebooks/'; // deve ter o caminho para os ficheiros, neste caso ebooks.
  • $config['cops_full_url'] = 'http://servidor/cops'; // deve ter o endereço completo do servidor COPS
  • $config['cops_title_default'] = "Biblioteca Digital"; // nome que é apresentado na biblioteca digital
  • $config['cops_language'] = 'pt_PT'; // para ficar com a interface em Português

3. Disponibilização da Biblioteca

Falta apenas enviar a biblioteca digital criada pelo Calibre para o servidor, que pode ser feita recorrendo a diversos métodos (FTP, SFTP, rsync, etc), tendo o cuidado de deixar todos os ficheiros no diretório ebooks (configurado anteriormente).

A partir deste momento toda Biblioteca Digital estará disponível num browser à distâncias de uns cliques:
http://servidor/cops

Referências

[1] - https://calibre-ebook.com/
[2] - http://blog.slucas.fr/en/oss/calibre-opds-php-server

terça-feira, 19 de julho de 2016

rsync | Backups automáticos com rsync por SSH

Servidor RSYNC

Neste exemplo utiliza-se um servidor ubuntu 16.04 LTS mas esta configuração deve funcionar para qualquer outra distribuição Linux com as devidas alterações.
Foi criado um utilizador designado utilizador.

0. Instalação
apt-get install rsync

É possível criar um local de trabalho, neste caso /srv/BACKUP
mkdir /srv/BACKUP
chown utilizador:utilizador -R /srv/BACKUP

1. Configuração
O ficheiro de configuração é /etc/rsyncd.conf e um exemplo simples:
uid = utilizador
gid = utilizador
socket options = SO_KEEPALIVE

[BACKUP]
    path = /srv/BACKUP
    comment = Backup [500GB]
    read only = false
    auth users = utilizador


Após a configuração é necessário ativar o modo de serviço (daemon) do rsync:
nano /etc/default/rsync
Deve descomentar-se a linha (remover o # no início):
RSYNC_ENABLE=true

Para arrancar o serviço:
service rsync start

As opções permitem a gestão básica: stop (parar), restart (reiniciar) e status (estado).

O reload não é necessário porque o rsync lê o ficheiro de configuração a cada nova ligação que recebe.

2. Testar o serviço
Para testar é possível recorrer a outra máquina que esteja na rede com o rsync instalado e executar:
rsync rsync://servidor
BACKUP             Backup [500GB]

Ao aceder ao módulo de BACKUP irá pedir uma palavra-passe, que não foi definida na configuração inicial, e, por isso, irá falhar:
rsync rsync://servidor/BACKUP
Password:
@ERROR: auth failed on module BACKUP
rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]


Cliente para backups

Para que o cliente possa enviar os ficheiros automaticamente sem haver pedido de senhas, é necessário configurar o acesso ao servidor por SSH por chave, isto é sem ser necessário introduzir uma palavra-passe. Esta forma é mais segura e permite a automatização das tarefas de backup pretendidas.

Neste caso é utilizada uma máquina cliente com o utilizador user que será o responsável pelo envio dos backups para o servidor.

0. Configuração do acesso por SSH com chave pública ao servidor
A criação das chaves no cliente com:
mkdir ~/.ssh/
ssh-keygen -t rsa

Copiar a chave criada para o servidor e habilitar o acesso SSH sem password para o utilizador do servidor:
ssh-copy-id utilizador@servidor

Testar para verificar se já não pede password com:
ssh utilizador@servidor


1. Script para Backups
Um script para automatizar os backups poderá ser o seguinte:
#!/bin/bash
# script by Mário Pinto @ 2016.07.19

# RSYNC SERVER - Complete URI for the server including protocol
SERVER="servidor"
USER="utilizador"
RSYNC_SERVER="$USER@$SERVER:/srv/BACKUP/"
COMMAND="rsync -qzar --delete"

# HOSTNAME and LOG_FILE
HOSTNAME=`hostname`
LOG_FILE=$HOSTNAME".log"
DATE=`date +%Y.%m.%d@%H:%M:%S`
START=`date +%s`

echo -e "HOST: $HOSTNAME\t $DATE\nBacking up to $RSYNC_SERVER$HOSTNAME" > $LOG_FILE

# Directories/Files to backup separated with a space ' '
BACKUP_DIRS="/home/user/DATA /home/user/ISO"

# Execute the backup for each directory/file specified
for i in $BACKUP_DIRS
do
  echo -ne "\tBacking up $i... " >> $LOG_FILE
  if $COMMAND $i $RSYNC_SERVER$HOSTNAME  ; then
    echo "OK" >> $LOG_FILE
  else
    echo "KO" >> $LOG_FILE
  fi
done


END=`date +%s`
DURATION=$(( $END - $START ))

echo -e "Done in $DURATION seconds." >> $LOG_FILE

rsync -qraz $LOG_FILE $RSYNC_SERVER"logs/"
cat $LOG_FILE
rm $LOG_FILE
exit 0


Poderá ser guardado como ~/rBackup

Deverá ser colocado como executável:
chmod 755 ~/rBackup

E testado:
./rBackup
HOST: cliente     2016.07.19@13:00:35
Backing up to utilizador@servidor:/srv/BACKUP/cliente
    Backing up /home/user/DATA... OK
    Backing up /home/user/ISO... OK
Done in 4 seconds.


2. Automatização do Backup
Se tudo for automático, resta criar um cronjob para o script, por exemplo:
crontab -e
 2 * * * nice /home/user/rBackup

sábado, 21 de maio de 2016

MKV | Substituir faixa de áudio AC3 por AAC

Um ficheiro MKV continha uma faixa de áudio em AC3 que não permitia ser reproduzido em alguns equipamentos. Para se converter para AAC há diversas formas documentadas.

Aqui fica o registo da utilização do FFMPEG (ou avconv) para extração e substituição da faixa de áudio.

1. Extração do áudio
ffmpeg -i Video.mkv -ab 192000 audio.aac

A extração do áudio inicia-se e é feita a conversão de AC3 para AAC com uma qualidade média de 192kbps.

2. Substituição da faixa de áudio num ficheiro MKV
ffmpeg -i Video.mkv -i audio.aac -map 0:v -map 1:a -codec copy -shortest NovoVideo.mkv

São fornecidos dois inputs (-i Video.mkv - vídeo pretendido e o segundo -i audio.aac com o áudio pretendido) é feito o mapeamento dos streams de cada input (-map 0:v para obter apenas o vídeo do primeiro stream e -map:1a para obter apenas o áudio do segundo stream) e é tudo copiado como está sem encoding (-codec copy) terminando o vídeo quando terminar o stream mais curto (-shortest) e colocando tudo um novo ficheiro (NovoVideo.mkv).

terça-feira, 8 de março de 2016

Reverse Proxy com o nginx

A utilização de um reverse proxy permite que um servidor acessível a partir da Internet forneça serviços existentes na sua rede privada para a Internet.
Desta forma, basta uma única máquina com este serviço para depois permitir o acesso a, por exemplo, vários serviços web existentes na rede privada.

Requisitos

O serviço de reverse proxy será feito com recurso ao nginx num servidor ubuntu 14.04.

Servidores internos a disponibilizar na internet:

  • 192.168.1.11:80 - servidor web principal
  • 192.168.1.12:80 - servidor web de teste

Instalação do nginx

apt-get install nginx

Após isto o serviço HTTP fica disponível e acessível na porta 80
netstat -tap
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:http                  *:*                     LISTEN      8967/nginx      

Os ficheiros de configuração de cada site ficam disponíveis em: /etc/nginx/sites-available
Por defeito existe apenas o default que permite ver a página por defeito do nginx.

Configuração do reverse proxy

Como o reverse proxy não vai disponibilizar serviço web direto, a configuração default que pode ser removida:
rm /etc/nginx/sites-enabled/default

Após qualquer alteração deste género é necessário fazer o reload das configurações do servidor:
service nginx reload

Neste caso, após ser removido o site default, passará a ser dado um aviso que a página não está disponível.

Resta agora criar um ficheiro de configuração para cada servidor:
nano /etc/nginx/sites-avaiable/www
server {
    listen 80;
    server_name www.exemplo.org exemplo.org;

    location / {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass http://192.168.1.11;
    }
}

nano /etc/nginx/sites-avaiable/test
server {
    listen 80;
    server_name test.exemplo.org;

    location / {
       proxy_set_header X-Real-IP  $remote_addr;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header Host $host;
       proxy_pass https://192.168.1.12;
    }
}

Resta agora ativar os sites, para tal é necessário criar um link simbólico de cada um dos ficheiros para o diretório sites-enabled:
ln -s /etc/nginx/sites-available/www /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/

E reiniciar o serviço
service nginx reload

Após isto caso o DNS esteja a apontar para o servidor correto e a porta 80 do router encaminhe tudo para o novo servidor, será possível aceder a cada um dos servidores pelo seu nome de domínio.

Esta configuração pode ser escalável para muitos mais serviços de forma semelhante.

Referências

[1] - Documentação Oficial: https://www.nginx.com/resources/admin-guide/reverse-proxy/
[2] - Exemplo: https://www.garron.me/en/linux/nginx-reverse-proxy.html

quarta-feira, 16 de dezembro de 2015

OpenELEC/Kodi autoplay de vídeos e playlists

Com o OpenELEC obtém-se rapidamente um media center completamente funcional mas com alguns ajustes é possível transformá-lo num kiosk que apresenta automaticamente um conjunto de vídeos num loop infinito.

Isto permite que sempre que seja ligado, arranque e inicie a reprodução sem qualquer intervenção humana (não é necessário rato/teclado/comando).

Assim, um sistema com uma televissão e um raspberry pi fica completamente autónomo para reprodução de vídeos de demonstração, divulgação, etc.

Criar uma playlist

A maneira mais fácil consiste em reproduzir um vídeo e depois ir adicionando novos vídeos à playlist.
Quando se tiver a playlist concluída resta guardar com um nome sugestivo, por exemplo: videos_loop

Por defeito fica guardada em /storage/.kodi/userdata/playlists/video.

Reproduzir automaticamente e ficar em loop

Para iniciar a reprodução automática de vídeos/playlists, é possível criar um ficheiro autostart.sh em /storage/.config com:
(
sleep 20 ;
kodi-send --action="PlayerControl(RepeatAll)" ;
kodi-send --action="PlayMedia(\"/storage/.kodi/userdata/playlists/video/videos_loop.m3u\")" ;
)&


É fácil perceber que inicialmente se esperam 2 segundos, depois é enviado o comando para o kodi alterar a forma de reprodução para RepeatAll e de seguida é dada a ordem de reprodução da playlist guardada.

Existem inúmeros comandos disponíveis para o kodi [1], permitindo personalizar e automatizar diversas tarefas.

A partir daqui resta ligar o raspberry pi com o OpenELEC e depois de carregar o Kodi, a playlist é iniciada e fica em loop até ser desligado.


Referências

[1] - http://kodi.wiki/view/List_of_built-in_functions

segunda-feira, 14 de dezembro de 2015

Kodi e Plex Media Server

Uma Raspberry Pi permite tornar qualquer televisão num centro multimédia de excelência a um custo extremamente acessível. Já foi visto aqui há muito tempo os diferentes "sabores" para utilização do Raspberry Pi como media center e o "sabor" aconselhado continua a ser o OpenELEC.

De facto as versões atuais do OpenELEC já trazem o Kodi (após o rebranding feito ao XBMC), mas continuam a caber num simples cartão de 512MB!!

Apesar de ser possível aceder ao Plex Media Server por DLNA, existe uma forma muito mais apelativa e que permite criar um autêntico cliente Plex no Kodi.

A solução passa pela instalação da skin Amber e do Add On PleXBMC.

1 - Instalação do PleXBMC

A instalação do PleXBMC está bem descrita [1] na página do projeto e aqui ficam as dicas.

A forma mais fácil é obter o ficheiro a partir do site [2]:
wget https://github.com/hippojay/plugin.video.plexbmc/archive/v4.0.0beta4.zip -O PleXBMC_latest.zip

Depois é necessário copiá-lo para o OpenELEC:
scp PleXBMC_latest.zip root@openelec:~

Para fazer a instalação resta aceder ao Kodi, ir aos Add Ons e instalar a partir de zip, selecionando o ficheiro copiado anteriormente.

2 - Instalação da skin Amber

Não há muito a dizer para além das instruções oficiais [3], no Kodi para ativar esta skin é necessário aceder à condiguração da Aparência, onde será necessário obter mais e escolher a Amber para descarregar e instalar.

Após este processo é perguntado se é pretendido ativar e utilizar esta skin.

Ao utilizar esta skin, no menu Settings aparece uma opção Go Plex que deverá ser utilizada para entrar em modo Plex e assim visualizar todos os conteúdos multimédia disponibilizados pelo Plex Media Server de forma muito apelativa.

Para reverter para o modo Kodi existe a opção Go Kodi.

3 - Configuração do PleXBMC para acesso ao servidor Plex

Com uma atualização do Plex Media Server deixou de ser tão transparente a configuração do cliente para quem não tenha ou não queira ter conta no plex.tv.
Assim, na configuração do servidor é necessário:
1 » definir o servidor primário com o IP do Plex Media Server;
2 » aceder a Manage MyPlex e quando aparecer se pretende definir uma conta, deve cancelar-se o processo;
3 » aceder a Select Master Server... e deverá aparecer o nome do Plex Media Server, que deverá ser selecionado.

Após tudo isto é possível aceder à opção Go Plex e navegar pela galeria de media de forma muito apelativa.

4 - Kodi 14 e a skin Amber

A versão OpenElec 5.0.8 vem com o Kodi 14.2 e a skin Amber esconde diversas opções das configurações do Kodi. Contudo, é possível alterar um ficheiro [4] para ativar novamente as Configurações. Assim, resta aceder por SSH ao OpenELEC e substituir o ficheiro ~/.kodi/addons/skin.amber/1080i/Includes.xml:
ssh root@IP_do_OpenELEC
cd ~/.kodi/addons/skin.amber/1080i
mv Includes.xml Includes.xml.old
wget http://sprunge.us/JOCj -O Includes.xml

De seguida é possível fazer o Reload da skin no Kodi para que sejam carregadas as novas opções do menu.

[1] - http://kodi.wiki/view/Add-on:PleXBMC
[2] - https://github.com/hippojay/plugin.video.plexbmc/releases
[3] - http://kodi.wiki/view/Add-on:Amber
[4] - http://forum.kodi.tv/showthread.php?tid=187051

Plex Media Server - Instalação e utilização

A utilização de um servidor de streaming para uma rede interna é muito útil pois permite que a partir de um único local de armazenamento sejam disponibilizados conteúdos multimédia para os diversos equipamentos da rede: televisões, telemóveis, tablets, portáteis, pc, etc.

Um servidor de streaming já visto anteriormente é o miniDLNA que é muito versátil e permite rapidamente ter um serviço básico de DLNA numa rede.

Uma alternativa muito apelativa é o Plex Media Server [1], apesar de ser proprietária é gratuita e existe uma versão para ubuntu a partir do 10.04.

1 - Instalação

Utilizando uma máquina com ubuntu, pelo menos 10.04, é necessário descarregar o instalador [2], por exemplo, para a versão disponível neste momento será:
wget https://downloads.plex.tv/plex-media-server/0.9.12.19.1537-f38ac80/plexmediaserver_0.9.12.19.1537-f38ac80_amd64.deb

Depois é necessário instalar o pacote com:
sudo dpkg -i plexmediaserver_0.9.12.19.1537-f38ac80_amd64.deb

A partir daqui tudo deve ser instalado, caso surjam dependências que seja necessário instalar, é possível automatizar esse processo com:
sudo apt-get install -f

2 - Configuração e Utilização

A partir do momento que está a executar, o PMS (Plex Media Server) pode ser acedido por browser a partir de qualquer localização da rede:
http://IP_do_servidor:32400/web/index.html

Depois é possível acrescentar uma Biblioteca (Library), por exemplo, para Filmes e indicar o local onde estão os ficheiros a disponibilizar.

Caso se tratem de filmes existem alguns scripts automáticos que fazem a inventariação dos filmes com capas e ficha técnica da produção.




Depois resta utilizar um cliente compatível, por exemplo, grande parte das televisões LG com DLNA têm a aplicação Plex cliente instalada, que ao ser utilizada apresenta uma ótima interface para acesso aos ficheiros multimédia disponibilizados pelo Plex Media Server.



[1] - https://plex.tv/
[2] - https://plex.tv/downloads

terça-feira, 8 de dezembro de 2015

Servidor HTTPS gratuito e confiável - Let's Encrypt

O projeto Let's Enrypt [1] juntou grandes empresas da rede na criação de uma entidade de certificação gratuita, automática e aberta. Permitindo assim que todos os websites possam ter certificados válidos para encriptação do tráfego que geram.

Para perceber melhor o conceito, pode dizer-se que toda a navegação feita em endereços URL que utilizam apenas http:// é aberta e pode ser facilmente acedida por qualquer "pessoa" na rede.
Quando se utilizam endereços URL que começam por https:// significa que existe uma negociação automática entre o servidor e o nosso browser, que lhes permite comunicar de uma forma que toda a informação que passa na rede está encriptada e ao ser apanhada não é perceptível o que lá está.

Para que se possa confiar no servidor, há muitos anos criou-se um esquema de empresas de certificação que se responsabilizam pela validade da identidade do servidor e pela segurança e fiabilidade das chaves utilizadas. Este processo envolvia quase sempre o pagamento dos certificados.

Sempre foi possível a criação de certificados manuais, que cada administrador criava para os seus servidores, contudo como eram manuais e não havia nenhuma entidade externa a validá-los, quase todos os browsers exibem avisos que o site é potencialmente perigoso e afins. Tornando-se assim uma solução pouco aceitável para uma utilização generalizada pois, apesar de as comunicações serem muito mais seguras, os utilizadores eram alertados para os perigos de segurança do certificado não ser reconhecido...

Com o projeto Let's Encrypt, grandes empresas como a Mozilla, Cisco, Akamai, Facebook, entre muitas outras, decidiram tornar o processo de criação e atribuição de certificados para servidores muito mais rápido, fácil e económico, permitindo assim que a proteção de todas as comunicações feitas online esteja ao alcance de todos.

Instalação do cliente

Para obter e instalar o software cliente do Let's Encrypt, a forma mais rápida é através do git:
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Para instalar:
./letsencrypt-auto

Na documentação do projeto há imensas referências que permitem cobrir grande parte das configurações básicas [2], designados de plugins e que estão muito bem documentados.

Criação de um certificado manual

No meu caso particular tenho o tráfego HTTP (porta 80) a ir para um servidor e o HTTPS (porta 443) a ir para outro servidor. Assim, não é possível utilizar os plugins disponibilizados pelo cliente, pois este pressupõe que ambos os serviços são assegurados pela mesma máquina.

Desta forma foi instalado o cliente Let's Encrypt no servidor para HTTPS e executado como root:
./letsencrypt-auto certonly --manual

De seguida é necessário indicar o domínio alvo do certificado, podendo ser incluídos diversos domínios separados por vírgulas ou espaço, por exemplo: dominio.my.to

Depois é indicado que o nosso IP público será registado e associado ao pedido de certificado.

E são depois apresentadas algumas informações que deverão ser seguidas:
Make sure your web server displays the following content at
http://dominio.my.to/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande before continuing:

coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134

E fica à espera que seja feito o setup necessário, após o qual devemos dar enter.

Como se pode observar pelas indicações dadas, o serviço do Let's Encrypt vai tentar aceder a um ficheiro em HTTP no mesmo domínio, assim é necessário criar as pastas necessários no servidor HTTP e criar o ficheiro indicado com o conteúdo pretendido:
mkdir -p /var/www/html/.well-known/acme-challenge
printf "%s" coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134 > /var/www/html/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande

Para testar deve abrir-se o browser o endereço http://dominio.my.to/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande e verificar se aparece o texto pretendido:
coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134

Quando isto estiver pronto, resta voltar ao cliente do Let's Encrypt e finalizar com enter e, caso tudo corra bem, aparecerá a seguinte informação:
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/dominio.my.to/fullchain.pem. Your cert will
   expire on 2016-03-07. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - If like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Configuração do apache para o certificado Let's Encrypt

Agora que existe um certificado válido, resta alterar a configuração do apache para que utilize este novo certificado.
Os certificados estão disponíveis em /etc/letsencrypt/live/dominio.my.to/ e explicados na documentação [3].

No ficheiro de configuração do HTTPS no apache, por exemplo, /etc/apache2/sites-available/default-ssl.conf, deverão ser refletidos os novos certificados:
####Configuration for SSL #####
SSLEngine on
# LET'S ENCRYPT
SSLCertificateFile /etc/letsencrypt/live/dominio.my.to/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dominio.my.to/privkey.pem
#### End of SSL Configuration ####

De seguida resta reiniciar o apache e começar a utilizar o novo certificado válido
service apache2 restart

Ao aceder ao serviço HTTPS no browser já será apresentado como seguro sem as mensagens normais que o certificado não é válido.



[1] - https://letsencrypt.org/
[2] - https://letsencrypt.readthedocs.org/en/latest/using.html#installation
[3] - https://letsencrypt.readthedocs.org/en/latest/using.html#where-are-my-certificates