letsencrypt: Certificado HTTPS gratuito, automatizado e aberto

Isso mesmo, Let’s Encrypt é uma nova Autoridade Certificadora patrocinada por gigantes como mozilla, facebook, cisco e google-chrome..

Qualquer pessoa que já trabalhou na criação de um site seguro(https) sabe a burocracia que era obter e manter um certificado. Let’s Encrypt automatiza e resolve este problema, permitindo que operadores de sites ativem e gerenciem seu HTTPS com comandos simples. Isso significa:

  • Nenhum e-mail de validação;
  • Sem edição de configuração complicada;
  • Sem certificados expirados quebrando seu site.

E, claro, uma vez que o Let’s Encrypt fornece certificados de graça, não há necessidade de providenciar o pagamento.

Este POST visa descrever como realizar as funções de gestão de certificados mais comuns usando o cliente Let’s Encrypt.

Se quiser aprofundar conhecimento e saber mais sobre como isso funciona nos bastidores, acesse os links nas referências ao final deste POST.

Primeiro passo é acessar seu servidor e fazer uma cópia do cliente letsencrypt:

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto –help

Agora vamos gerar o certificado:

$ ./letsencrypt-auto certonly –webroot –webroot-path /var/www/seu_dominio.com.br –renew-by-default –email webmaster@seu_dominio.com.br –text –agree-tos -d seu_dominio.com.br -d www.seu_dominio.com.br

Logo após a geração, se tudo correr bem, você verá algumas informações importantes tais como essa a seguir. Guarde em local seguro.

IMPORTANT NOTES:
If you lose your account credentials, you can recover through
e-mails sent to webmaster@seu_dominio.com.br.

Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/seu_dominio.com.br/fullchain.pem. Your cert will
expire on 2016-05-26. To obtain a new version of the certificate in
the future, simply run Let’s Encrypt again.

Your account credentials have been saved in your Let’s Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let’s
Encrypt so making regular backups of this folder is ideal.

If you 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

Agora habilite em seu webserver as configurações necessárias apontando para o certificado gerado. Segue as configurações para os webservers mais usados:

Nginx:

listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/seu_dominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seu_dominio.com.br/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

Apache:

Dê uma olhada se há alguma configuração no ports.conf.
Senão, crie um arquivo de configuração para seu domínio: /etc/apache2/sites-available/seu_dominio.com.br-ssl.conf

Com o seguinte conteúdo:

<VirtualHost *:443>
ServerAdmin webmaster@seu_dominio.com.br
ServerName www.seu_dominio.com.br
ServerAlias seu_dominio.com.br
DocumentRoot “/var/www/seu_dominio.com.br/”
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

SSLCertificateFile /etc/letsencrypt/live/seu_dominio.com.br/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/seu_dominio.com.br/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/seu_dominio.com.br/chain.pem
</VirtualHost>

…depois faça um link simbólico pra ele dentro de sites-enabled:

ln -s /etc/apache2/sites-available/seu_dominio.com.br-ssl.conf /etc/apache2/sites-enabled/seu_dominio.com.br-ssl.conf

Se quiser fazer o redirecionamento de todo o tráfego entrante de HTTP para HTTPS, use regra 301 do tipo:

server {
listen 80 default;
server_name seu_dominio.com.br www.seu_dominio.com.br;
return 301 https://www.seu_dominio.com.br$request_uri;
}

E se por acaso estiver configurando o certificado num proxy, não esqueça de configurar o proxy para adicionar os cabeçalhos:

    location / {
proxy_pass http://localhost:1234;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

Desta forma, mesmo outros servidores ‘atrás’ do seu proxy terão condições de permanecer em HTTPS para o usuário, como na gravura a seguir:

Para re-validar seu certificado é simples: letsencrypt renew

Por exemplo, usuários nginx poderiam usar um script assim:

#!/bin/sh
if ! /caminho/para/seu/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi
nginx -s reload

Para apache:

#!/bin/sh
if ! /caminho/para/seu/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi
apachectl graceful

Agora basta fazer o teste pra saber se está tudo OK: https://cryptoreport.websecurity.symantec.com/checker/

Obrigado pela leitura e volte sempre.
Qualquer dúvida fique a vontade para postar nos comentários logo abaixo.

Referências:

Acordo de assinatura: https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf
https://letsencrypt.org/getting-started/
https://letsencrypt.org/howitworks/
https://support.cloudflare.com/hc/en-us/articles/214820528-How-to-Validate-a-Let-s-Encrypt-Certificate-on-a-Site-Already-Active-on-CloudFlarehttps://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-load-balancing-with-ssl-termination

Documentos a disposição em qualquer dispositivo

Você é daqueles que anda sempre com um HD externo ou pendrive com seus docs?

A google tem uma ótima ferramenta para lhe ajudar.

O Google Drive, possui além do armazenamento dos dados, um editor com funções básicas para você editar seus arquivos.

O melhor de tudo é que você pode baixar o aplicativo em seu dispositivo móvel e ter a possibilidade de ter seus arquivos para consulta e edição a disposição a qualquer hora. Caso você precise dos arquivos em um local sem internet utilize a opção de ter o arquivo offline.

Menu Google Drive

 

Os editores são parecidos com as ferramentas do Office porém com menos recursos, conforme imagem abaixo do editor de texto.

 

Exemplo de Menu

Acesse agora mesmo e aproveite essa ferramenta gratuita.

Configurando o VNC no Linux Mint

Este artigo explica como fazer a instalação do x11vnc e configurá-lo para iniciar com o sistema (on boot, Autostart).

Inicialmente, instale os softwares necessários:

sudo apt-get install x11vnc vncserver

Agora, gere uma senha legal para seu x11vnc. Essa senha será requisitada quando alguém tentar conectar em sua máquina, na porta padrão que estará rodando o VNC que é a 5900.

Para gerar a senha:

sudo vncpasswd

Pronto, seu x11vnc está pronto pra executar. Podemos executá-lo e testar com o comando:

x11vnc -rfbauth ~/.vnc/passwd -bg -forever -noxdamage -shared &

Mas a idéia é que inicie automaticamente junto com o gerenciador de login na parte gráfica do nosso linux.
Se você usa o Linux Mint, geralmente terá o MDM gerenciando este processo, então sua configuração de inicialização fica em /etc/mdm/Init.
Portanto, insira a chamada para o seu x11vnc acima da linha ‘exit 0‘ do seu /etc/mdm/Init/Default, como no exemplo:

x11vnc -rfbauth /root/.vnc/passwd -bg -forever -noxdamage -shared &
exit 0

Pronto! Agora basta reiniciar seu computador e terás o VNC configurado, aceitando conexões na porta 5900.

Veja nas referências algumas artimanhas adicionais que dá pra fazer instalando também tk8.4 como por exemplo, manter um tray-icon, permitir ou negar conexões, e avisar com popup sempre que alguém conecta ou desconecta.. Isso pode ser útil pra você.

Por: Hudson Murilo dos Santos

Referências:
http://ubuntuforums.org/showthread.php?t=196572
http://seb.so/vnc-from-boot-without-logging-in-ubuntu-lubuntu-xubuntu-and-mint-lmde/

Migração de mensagens imap

Pesquisando pela Internet, descobri que existe uma maneira muito legal de migração de mensagens entre contas IMAP. De um servidor para outro por exemplo.

Nessas horas é bem comum administradores de rede usarem um cliente de email qualquer como um Thunderbird, Evolution ou o próprio Outlook, e cadastrar a conta antiga e a nova.

Uma vez cadastradas, basta copiar as mensagens e pastas da conta antiga para uma pasta local, e logo em seguida copiar da pasta local para a conta nova.

O problema é que muitas vezes os clientes de email e/ou ambos os servidores são falhos nessa tarefa. Não sincronizam direito. As vezes simplesmente param. Não geram mensagem de erro. Não dizem quais mensagens copiaram com sucesso, e não alertam em qual mensagem parou.

Então, descontente com esta situação, encontrei o imapsync.

É desenvolvido em Perl por Gilles Lamiral, um francês que comercializa este software por 50 euros, mas que também disponibiliza o código opensource para implementação no github. Para instalar em Ubuntu-based é fácil:

[root@localhost]# apt-get install \
libauthen-ntlm-perl \
libcrypt-ssleay-perl \
libdigest-hmac-perl \
libfile-copy-recursive-perl \
libio-compress-perl \
libio-socket-inet6-perl \
libio-socket-ssl-perl \
libio-tee-perl \
libmodule-scandeps-perl \
libnet-ssleay-perl      \
libpar-packer-perl \
libterm-readkey-perl \
libtest-pod-perl \
libtest-simple-perl     \
libunicode-string-perl \
liburi-perl \
cpanminus

Agora, insale manualmente o módulo do Perl Mail::IMAPClient:

  [root@localhost]# cpanm Data::Uniqid Mail::IMAPClient

Faça o download do repositório:

 [user@localhost]$ git clone https://github.com/gilleslamiral/imapsync.git

Dentro da pasta do repositório:

 [user@localhost]$ ./imapsync –host1 imap.server1.com.br –user1 username@dominio.com.br –password1 senha_da_conta_antiga –host2 imap.server2.com.br –user2 username@dominio.com.br –password2 senha_da_conta2

E se por acaso tiver SSL em alguma das contas, é só usar parâmetro:  –ssl1 –port1 993 ou –ssl2 –port2 993

Ao final da execução, o legal é que ele mostra as estatísticas confiáveis:

++++ Calculating sizes on Host2
Host2 folder [Archive]                           does not exist yet
Host2 folder [Drafts]                            Size:         0 Messages:     0 Biggest:         0
Host2 folder [INBOX]                             Size: 232358928 Messages:  3799 Biggest:   5536365
Host2 folder [Junk]                              does not exist yet
Host2 folder [Sent]                              Size:  35289450 Messages:    48 Biggest:  11040301
Host2 folder [Trash]                             Size:         0 Messages:     0 Biggest:         0
Host2 Nb messages:            3847 messages
Host2 Total size:        267648378 bytes (255.25 MiB)
Host2 Biggest message:    11040301 bytes (10.53 MiB)
Host2 Time spent:             20.4 seconds
++++ Statistics
Transfer started on               : Wed Jan 27 18:55:17 2016
Transfer ended on                 : Wed Jan 27 19:46:45 2016
Transfer time                     : 3087.7 sec
Messages transferred              : 1336
Messages skipped                  : 1485
Messages found duplicate on host1 : 0
Messages found duplicate on host2 : 671
Messages void (noheader) on host1 : 0
Messages void (noheader) on host2 : 0
Messages deleted on host1         : 0
Messages deleted on host2         : 0
Total bytes transferred           : 67540850 (64.41 MiB)
Total bytes duplicate host1       : 0 (0.00 KiB)
Total bytes duplicate host2       : 54656054 (52.12 MiB)
Total bytes skipped               : 100381257 (95.73 MiB)
Total bytes error                 : 0 (0.00 KiB)
Message rate                      : 0.4 messages/s
Average bandwidth rate            : 21.4 KiB/s
Reconnections to host1            : 0
Reconnections to host2            : 0
Memory consumption                : 133.2 MiB
Biggest message                   : 5536303 bytes
Initial difference host2 – host1  : -311 messages, 32149440 bytes (30.66 MiB)
Final   difference host2 – host1  : 1026 messages, 99726271 bytes (95.11 MiB)
Detected 0 errors

New imapsync release 1.678 available
Homepage: http://imapsync.lamiral.info/

Referências:

http://imapsync.lamiral.info/INSTALL.d/INSTALL.Ubuntu.txt
https://github.com/gilleslamiral/imapsync

bash: acessar display do X com outro usuário

Quem usa linux dificilmente larga o famoso prompt de comando.
Isso se deve ao grande poder e à conhecida versatilidade do BASH.

Entretando, existem sempre algumas dificuldades que a grande maioria passa.
Neste POST está mais uma dessas, bem como a solução.

Talvez você precise executar um programa no modo gráfico, mas com sua inicialização partindo dum comando.
Isso talvez aconteça pois você quer visualizar os erros/outputs deste programa em específico.

Pra isso, simplesmente você faz:

hudson@vostrolab ~/ $ programa

Mas talvez a idéia seja simplesmente executar um programa com outro usuário. Então você pensa:

hudson@vostrolab ~/ $ su – usuario -c “xlogo”

E aí você obtém:

Password:
No protocol specified
Error: Can’t open display: :0

Isso acontece pois as chaves usadas para autenticar sua sessão do X (modo gráfico) não são mais válidas a partir do momento em que você troca de usuário.
Tal medida de segurança parece exagero, mas é uma herança de quando as sessões X eram muito usadas em rede.

Pra resolver essa, basta liberar sua sessão X para autenticar outros usuários, usando o comando xhost.
Isso deve ser feito antes de trocar de usuário.

hudson@vostrolab ~/ $ xhost +local:local
non-network local connections being added to access control list
hudson@vostrolab ~/ $ su – usuario -c “xlogo”
Password:
hudson@vostrolab ~/ $

xlogo foi usado como exemplo de aplicação, pois abre uma simples ‘janela’ na tela.
Nesse ponto da execução, você deve ver sua aplicação normalmente, seja um mozilla ou um thunderbird =).

Não esqueça de desfazer a autorização com o ‘menos’ ao invés do ‘mais’:

hudson@vostrolab ~/ $ xhost -local:local
non-network local connections being removed from access control list

Referências: http://www.tuxradar.com/content/command-line-tricks-smart-geeks

Manipulação de CPF e CNPJ

Ao desenvolver sistemas aqui no Brasil, muitas vezes se faz necessário trabalhar com CPF e CNPJ e armazenar estes dados em banco.

Embora os campos de entrada desta informação geralmente sejam mascarados para o tal formato (___.___.___-__ ou __.___.___/____-__), muitos desenvolvedores preferem armazenar sem os pontos, traços e barras em campos to tipo string no banco de dados. String pois alguns desses números começam com 0(zero), então se for campo integer poderá enfrentar problemas.

Depois, na hora de usar estes números, pra definir se é um CNPJ ou CPJ basta remover a máscara e fazer a contagem do length: se for 11 é CPF, se for 14 é CNPJ, e qualquer coisa diferente disso é wrong_number. 🙂

Por exemplo em jQuery poderia ser feito algo assim:
cpf_or_cnpj_input_value = $('#cpf_or_cnpj').val();
cpf_or_cnpj_input_value = cpf_or_cnpj_input_value.replace(/[^\d]/g, '');
switch (cpf_or_cnpj_input_value.length) {
case 11:
is_this_cpf_or_cnpj = "cpf";
break;
case 14:
is_this_cpf_or_cnpj = "cnpj";
break;
default:
is_this_cpf_or_cnpj = "wrong_number";
break;
}

Sendo que na segunda linha é usada uma expressão regular que substitui tudo o que não for dígito, por ”.
E na hora de mostrá-lo, utiliza-se um helper para exibí-lo com pontos, traços e barras, conforme o formato desejado.

Confira por exemplo como ficaria um helper para exibir um CPF fictício em linguagem ruby, usando a sintaxe de slice de array, informando o começo e quantos caracteres deseja em cada slice:

cpf.rb
>> cpf
=> "12345678977"
>> "#{cpf[0,3]}.#{cpf[3,3]}.#{cpf[6,3]}-#{cpf[9,2]}"
=> "123.456.789-77"

O mesmo helper em linguagem python. Repare que em python é diferente: você diz o começo e o fim, e não o começo e quantos caracteres quer:

cpf.py
>>> cpf
'12345678977'
>>> "{}.{}.{}-{}".format(cpf[0:3], cpf[3:6], cpf[6:9], cpf[9:11])
'123.456.789-77'

Referências: https://gist.github.com/dirceu/cc46f465f6957491827f
Greetings to: Dirceu Tiegs (https://github.com/dirceu)

nginx Error: 413 Request Entity Too Large

Ao instalar um WordPress, um dos problemas que talvez enfrente seja: Erro: 413 Request Entity Too Large
Costuma aparecer ao fazer upload de um plugin, tema, mídia ou arquivo qualquer para seu wordpress. Indica que o tamanho do que você está ‘upando‘ é muito grande. Maior do que o esperado.

O que é necessário fazer pra solucionar?

Basta adicionar a seguinte instrução ao arquivo de configuração do nginx que define o wordpress (/etc/nginx/sites-available/seu_wordpress.conf):

server {
client_max_body_size <Tamanho Desejado>M;

}

 
Dessa maneira, passamos a barreira do nginx.
Daí seu blog começa a avisar que o limite encontrado foi no upload_max_filesize do php.ini.
Então, visando ultrapassar a barreira do php.ini, basta incluir isso no final do .htaccess que esta na raiz do blog(/var/www/seu_wordpress/):

php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 300
php_value max_input_time 300

 
Feito, isso, ultrapassamos a barreira do php.
Agora sim. Tudo funcionando:

Instalando tema do arquivo enviado: meutema.zip

Descompactando o pacote…

 

Referências:
http://www.wpbeginner.com/wp-tutorials/how-to-increase-the-maximum-file-upload-size-in-wordpress/
http://pt.stackoverflow.com/questions/41619/enviando-arquivos-no-nginx-erro-413-request-entity-too-large

Aproximação de clientes em potencial

Entrar em contato com um potencial cliente que nunca ouviu falar de você pode ser assustador. Seja através de uma ligação ou um email, é necessário dar atenção inicialmente justamente a essa maneira escolhida para contato.

Aos poucos torna-se fácil.

Segue formato de email usado para entrar em contato com clientes em potencial, e que já rendeu conversas que levam ao trabalho remunerado.

Assunto: Eu gostaria de ajudá-lo com X

Olá,

Meu nome é Eric Davis e eu gostaria de conversar com você sobre X.

Seu projeto chamou minha atenção pois X. Por gentileza, você poderia me contar um pouco sobre qual é sua principal necessidade atualmente?

Obrigado

Assinatura,

Perceba que única preocupação da abordagem é: iniciar uma conversa. Você não quer vender seu serviço logo de cara. Você não precisa contar-lhe toda sua história ou listar os nomes dos seus melhores clientes e provar 10 razões principais pelas quais você é o melhor freelancer para ele.

Você precisa apenas iniciar a conversa.

Levei algum tempo para entender isso. Eu tentava me vender ao máximo logo no email inicial para evitar ‘idas e vindas’ de informação, tipo uma conversa. Foi então que percebí que eu estava na verdade despejando uma parede de texto e sugestões de atividades a serem feitas pelo meu potencial cliente. Atividades estas que eu mesmo estava pedindo-lhes para realizar.

Como você se sentiria se alguém que você não conhece sugerisse um monte de atividades pra você fazer?

Comece pequeno, com um curto email inicial, e deixe a conversa progredir naturalmente.

Não tenha medo de abordagens frias. Emails, ligações telefônicas ou encontro pessoalmente: todos funcionam e todos tem suas vantagens e desvantagens. Mas é importante fazê-las de maneira apropriada.

Você perderá 100% dos clientes que não entrar em contato.

by Eric Davis (http://theadmin.org)