Let’s Encrypt™ trará Certificados WildCard em 2018

Let's Encrypt lançará SSL WildCard em 2018

Let’s Encrypt lançará SSL WildCard em 2018

A organização Let’s Encrypt™ parece cada vez mais empenhada na missão de tornar a internet 100% HTTPS. Seu próximo passo, que já se encontra em desenvolvimento, é o WildCard Certificates que já possuí uma data de lançamento para Janeiro de 2018.

A organização já conta com 47 milhões de domínios seguros. Domínios validados através do seu processo automatizado de validação de domínios. Há algum tempo ela iniciou o desenvolvimento de seus certificados WildCard. Segundo eles a proposta veio pois certificados WildCard são constantemente requisitados. Eles ainda acreditam que com o WildCard teremos maior facilidade para o desenvolvimento em HTTPS e assim contribuirá para seu objetivo primordial, o de tornar a web 100% HTTPS.

Como funcionam os certificados WildCard?

O certificado WildCard funciona protegendo qualquer subdomínio dentro de um domínio base (Ex.: *.dialhost.com.br). Isto facilita muito o gerenciamento dos domínios já que um único certificado e um único par de chaves de segurança serão utilizados para o domínio e todos os seus subdomínios.

Estes certificados, assim como já acontece nos certificados Let’s Encrypt™, serão gratuitos e poderão ser ativados através da ACME v2 API.

Inicialmente a validação será via DNS do domínio base, mas já existem planejamentos para outras opções.

O que muda no mercado SSL com isto

A primeiro momento pode haver uma preocupação com relação às vendas dos certificados SSL WildCard. Mas, esta popularização é boa pois forçará este mercado a melhorar ainda mais seu nível de segurança. Afinal ainda hoje, a segurança das informações que circulam pela internet é uma das maiores preocupações de qualquer usuário que utilize a rede para realizar compras, guardar documentos e se comunicar com outros usuários.

Além disto, como comparado em outro post mais antigo que eu fiz (Desvendando os certificados SSL grátis) ainda existem certificados mais específicos que vão validar toda a empresa e não somente o domínio registrado. Neste caso espera-se  haja uma popularização deste tipo de certificado.

E que venha 2018

Se 2016 foi o ano da implantação do SSL grátis. 2018 será uma ano de expansão global para os diversos subdomínios que temos por aí. A equipe DialHost já está esperando por novidades para conseguirmos implementar mais esta ferramenta para todos os clientes.

Por hoje fico por aqui e agradeço pela leitura. Abs!

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

Desvendando os certificados SSL grátis

desvendando ssl grátis

Certificados SSL grátis | Imagem Ilustrativa – Fonte Freepik

Podemos dizer que a popularização dos certificados SSL no tráfego de informações de qualquer site na internet é uma das notícias mais importantes que tivemos este ano. Não por menos, afinal ela veio em um momento onde recebemos notícias diárias sobre vazamentos de informações sigilosas, dados pessoais, grandes invasões. Resumindo, com nossas vidas cada dia mais passando por meios digitais a segurança de dados se tornou importante demais para ser utilizada por apenas poucos.

Mas porque tivemos este ano como um marco para esta popularização da segurança da internet? Simples. Graças ao lançamento oficial da autoridade Certificadora Let’s Encrypt™ feito neste ano, agora qualquer site, loja virtual, blog ou portal de informações pode desfrutar da segurança do cadeado verde que acompanha o campo de URL em nosso navegador, sem pagar nada por isto. A autoridade que é desenvolvida e mantida pela Linux Foundation fornece certificados SSL de forma gratuita e automatizada.

Além disto, sua api de integração fácil permitiu o desenvolvimento de interfaces para sua aplicação em empresas de hospedagem. Nossas as hospedagens compartilhadas e hospedagem cloud, por exemplo, já possuem esta integração e renovação completamente atualizadas utilizando a certificação Let’s Encrypt™.

Correndo atrás desta tendência, a autoridade certificadora Comodo, em conjunto com o CPanel, também começou a disponibilizar uma versão de seu SSL gratuitamente. Ela se dá pela ferramenta AutoSSL implementada pelo CPanel em sua distribuição 58.

O que está por traz de tanta segurança e de forma gratuita?

No caso da Let’s Encrypt™, as regras de segurança são desenvolvidas e mantidas pelo ISRG (Internet Security Research Group. Ou Grupo de pesquisa em segurança da internet, em português) na califórnia. O projeto faz parte do Linux foundation Collaborative Projects. Dado isto podemos confirmar um bom ar de confiança ao projeto.

A Let’s Encrypt™ foi responsável por implementar um novo protocolo chamado ACME. Este protocolo tem o intuito de tornar mais simples a obtenção e a configuração de certificados SSL. Apesar de sua implementação ser mais simples, isto não prejudica a segurança. Os certificados emitidos baseiam-se nas melhores práticas de segurança TLS. Além disto, eles possuem chaves de criptografia de até 4096bits.

O funcionamento por traz da validação de um domínio

O sistema Let’s Encrypt™ valida um domínio através de um processo de “challenges” (desafios) onde o servidor que controla determinado domínio precisa comprovar o controle do domínio que deseja ativar o certificado.

Funciona assim, o servidor proprietário do domínio perguntará ao Let’s Encrypt™ o que é preciso fazer para provar o controle de um determinado domínio. A entidade então irá retornar algumas opções de validação, como por exemplo, através de um registro de DNS ou através de uma URI.

Durante o processo a Let’s Encrypt™ CA irá disponibilizar um código único que deverá ser assinado, com o par de chaves privadas, pelo agente validador e assim, provar que ele controla as chaves privadas.

Assim que concluído este passo, deve ser criado um arquivo no caminho especificado no site em questão. O agente validador deve assinar o código com sua chave privada. Finalizadas estas questões o Let’s Encrypt™ poderá checar o arquivo que foi colocado no servidor web para ter a garantia da validade deste domínio. Se a validade é garantida seu certificado será ativado e poderá ser visto através do navegador.

Validando certificado

Processo de validação do certificado SSL Let’s Encrypt

Certificado SSL automatizado

A parte boa nisto tudo é que o sistema do Let’s Encrypt é totalmente automatizado e aberto. Assim, já é possível encontrar serviços que disponibilizam a instalação dos certificados sem que seja necessário realizar todo o processo de validação da forma mais dolorosa. É o caso, por exemplo, da nossa plataforma de gerenciamento de hospedagem. Através de uma interface simples é possível ativar e revogar certificados. E o processo de renovação é feito automaticamente após os 90 dias de validade do certificado.

Ativação de SSL Grátis pela DialHost

Ativação de SSL Grátis pela DialHost

A evolução do Mercado

O Let’s Encrypt trouxe uma perspectiva completamente nova para a segurança nas informações que circulam na internet. Agora não existe mais motivos para um site permanecer sem segurança SSL. Mesmo se seu site possuir apenas o bom e velho formulário de contatos e não tiver tanta informação sigilosa esta proteção extra deve ser levada em conta. Tanto deve, que ferramentas de busca , como o Google, já começam a utilizar o uso  do HTTPS como fator de ranqueamento em suas buscas.  Existe ainda uma proposta do navegador Chrome para começar a alertar sites que não utilizam certificados SSL, como sites não seguros.

“Atualmente, o Chrome indica conexões HTTP com um indicador neutro. Isso não reflete a verdadeira falta de segurança em conexões HTTP.” Diz Emily Schechter, membra da equipe de segurança do Chrome.

E como fica o mercado SSL atual?

É claro que este mercado terá forte mudança. Com a popularização dos certificados SSL grátis o que se espera é uma queda nas vendas dos certificados SSL mais simples. É claro que isto não implica na morte dos certificados SSL pagos. Afinal, eles proporcionam, além da segurança na informação, coberturas por seguros reais. E ainda existem categorias que validam a empresa como um todo e não somente o domínio. Este último, traz ainda mais credibilidade ao usuário. No caso de compras ou operações financeiras, o certificado garante a ele estar usando o site real da empresa desejada.

E vocês o que esperam sobre os próximos passos da segurança na internet? Será que teremos ainda mais sistemas colaborativos neste intuito? Será que o mercado proprietário conseguirá trazer soluções ainda mais robustas para garantir sua privacidade?

 

 

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

count_chars – Tratamento de strings com PHP

count_chars - Tratamento de strings com PHP

Imagem ilustrativa

Estou de volta com o 4ª post sobre tratamento de strings, e para esta postagem estudei um pouco sobre o count_chars. A função basicamente faz a contagem das ocorrências dos caracteres de uma string. Assim, é possível avaliar quantas vezes um determinado caractere repete dentro desta string.

A função possui 4 modos de busca que são passados por parâmetros. Abaixo vou explicar um pouco de cada um destes modos.

count_chars na prática

Como a teoria desta função é relativamente simples não vamos nos prolongar e colocar a mão na massa com um exemplo bem simples usando este comando.

count_chars no modo 0

Ao utilizar a função no modo 0 – count_chars($text_print,0) – O comando retornará um array com os códigos ASCII de todos os caracteres ASCII em um array e mostrará a ocorrência de cada um deles, mesmo os que não tiveram ocorrência.

Abaixo fiz um teste com a frase “DialHost – Desenvolvendo um exemplo com count_chars”.

<?php 
    $text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
    $str_md0 = count_chars($text_print,0);
    echo '<h2> String de exemplo: '.$text_print.'</h2>';
    echo '<hr>';
    echo '<h2> Imprimindo todas as ocorrencias de todos os tipos de caracteres dentro da String:</h2>';
    echo '<p>'; 
    foreach ($str_md0 as $key=>$value){echo utf8_encode(chr($key)). ': ' . $value . ' vezes'.'<br>'; };
    echo '</p>';
?>

Defini a variável $text_print para colocar a frase que eu gostaria de analisar e então coloquei o resultado do count_chars dentro da variável $str_md0. Isto porque ele me retorna um array e eu terei que tratá-lo para ter a impressão correta das recorrências dos caracteres. Agora que já temos todos os caracteres dentro do array é só varrer este array e ir imprimindo os respectivos caracteres e suas ocorrências na string.

Neste código tive que usar o utf8_encode e o comando chr. O primeiro para mostrar os caracteres especiais de forma correta e o segundo para identificar o caractere referente ao código ASCII do array. Vale lembrar que o retorno deste comando é enorme já que ele retorna tanto os caracteres que foram utilizados quanto os que não foram. Confiram o resultado neste link.

Modo 1

O modo 1 – count_chars($text_print,1) – já possui um filtro sobre as ocorrências da string. Ele avalia a string e retorna um array de todos os caracteres ASCII que possuem pelo menos uma ocorrência. Isto evita a lista gigantesca de caracteres que não estão presentes na string passada. Abaixo está o mesmo exemplo que fiz no modo 0 só que agora utilizando o modo 1:

<?php 
    $text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
    $str_md1 = count_chars($text_print,1);
    echo '<h2> String de exemplo: '.$text_print.'</h2>';
    echo '<hr>';
    echo '<a name="mod1"><h2> Imprimindo todas as ocorrencias dos caracteres que existem na String:</h2></a>';
    echo '<p>'; 
    foreach ($str_md0 as $key=>$value){echo utf8_encode(chr($key)). ': ' . $value . ' vezes'.'<br>'; };
    echo '</p>';
?>

Em suma aqui está tudo igual ao item anterior, a diferença será no restultado que vocês podem conferir neste link

Modo 2

Se o modo 1 mostra todas os caracteres que possuíram pelo menos 1 ocorrência, o modo 2 faz exatamente o contrário. Ele avalia a string e retorna um array de todos os caracteres ASCII que não possuem ocorrências.

<?php 
    $text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
    $str_md1 = count_chars($text_print,2);
    echo '<h2> String de exemplo: '.$text_print.'</h2>';
    echo '<hr>';
    echo '<a name="mod2"><h2>Imprimindo todos os caracteres que não possuem ocorrências na String:</h2></a>';
    echo '<p>'; 
    foreach ($str_md0 as $key=>$value){echo utf8_encode(chr($key)). ': ' . $value . ' vezes'.'<br>'; };
    echo '</p>';
?>

Novamente, a diferença será no resultado que vocês podem conferir neste link

Modo 3

O modo 3 é mais simples que os demais. Ele apenas retornará todos os caracteres utilizados pela string. Desta vez porém, não retornará quantas vezes ele se repetiu. O retorno será uma simples string que no exemplo abaixo retornará isto: -DH_acdehilmnoprstuvx.

<?php 
$text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
echo '<a name="mod3"><h2> Imprimindo todos os caracteres utilizados na String:</h2></a>';
echo '<p>'.utf8_encode(count_chars($text_print,3)).'</p>';
?>

Para conferir o resultado deste exemplo basta clicar neste link.

Modo 4

Acho que todos já estão prevendo que este último modo não será nenhuma novidade… sim ele tem o efeito contrário do modo 3 exibindo apenas os caracteres não utilizados na string.

&lt;?php 
$text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
echo '&lt;a name="mod4"&gt;&lt;h2&gt; Imprimindo todos os caracteres não utilizados na String:&lt;/h2&gt;&lt;/a&gt;';
echo '&lt;p&gt;'.utf8_encode(count_chars($text_print,4)).'&lt;/p&gt;';
?&gt;

Para conferir o resultado deste exemplo basta clicar neste link.
Bem, espero que este comando tenha sido útil para vocês e nos vemos na próxima. Quem quiser se aprofundar sobre exemplos de uso deste comando o manual do PHP pode ser muito útil

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais.

 

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

utf8_decode e utf8_encode tratando com codificação Unicode

utf8_decode e utf8_encode

Imagem ilustrativa para utf8_decode e utf8_encode

Olá pessoal, estou de volta para o terceiro post da série sobre tratamento de strings com PHP. Hoje falarei um pouco sobre os comandos utf8_decode e utf8_encode, trazendo uma melhor explicação para o uso feito no exemplo do post passado “strlen, desvendando os tamanhos de uma string”.

Só para lembrar, no post passado, utilizamos o comando utf8_decode para consertar a contagem de caracteres com acentuação. Sem a utilização deste comando, o strlen() acabava contando letras acentuadas como 2 caracteres. Mas, por que o comando utf8_decode()  resolve este problema? Que magia é essa?

Desvendando o utf8_decode

Como a segunda palavra já diz, o decode funciona para decodificar um determinado dado, passado como parâmetro, do formato utf8 para o ISO-8859-1. Sim, talvez o comando mais explicito seria utf-8_to_ISO-8859_decode(), mas acredito que isto seria muito grande para a função. Enfim, o fato é que o decode se limita à formatação ISO-8859-1, sendo assim se você não necessita utilizar este tipo de codificação já pode parar por aqui. Talvez este artigo não tenha nada a lhe acrescentar.

Dica: Se vocês está precisando fazer decodes com outros formatos você pode dar uma olhada no comando iconv().

Para todos os outros que desejam descobrir a razão do caractere acentuado retornar como 2 caracteres, a explicação é simples. O padrão utf-8 utiliza um padrão de valores entre 1 e 4 bytes, por caractere. Assim, quando temos caracteres do tipo á, é, í… os mesmos utilizam 2 bytes que são contados então, como 2 caracteres pela função strlen();

Dica: Se o texto a ser decodificado não estiver codificado em utf-8 o comando pode apresentar resultados indesejados.

O utf8_encode

O utf8_encode() faz exatamente o contrário da função utf8_decode, ela decodifica uma string no padrão ISO-8859-1 para o padrão utf-8. Assim uma determinada string do padrão latino pode ser utilizada juntamente com outros caracteres sem ocorrer erros de renderização. Aqueles famosos caracteres de interrogação ().

Um Exemplo bem útil para o uso destes dois comandos é na criação de URLS amigáveis

function smartURL($str){
    $str = strtolower(utf8_decode($str)); $i=1;
    $str = strstr($str, utf8_decode('àáâãäåæçèéêëìíîïñòóôõöøùúûýýÿ'), 'aaaaaaaceeeeiiiinoooooouuuyyy');
    $str = preg_replace("/([^a-z0-9])/",'-',utf8_encode($str));
    while($i>0) $str = str_replace('--','-',$str,$i);
    if (substr($str, -1) == '-') $str = substr($str, 0, -1);
    return $str;
}

No exemplo acima o utf8_decode() foi utilizado para remover possíveis incompatibilidades com acentos e letras maiúsculas. A função basicamente remove caracteres maiúsculos com  strtolower(), remove qualquer acentuação com strstr(). Depois ele remove qualquer caractere que não sejam de a-z e 0-9 utilizando o preg_replace(). Por fim, substitui-se as duplicações de ‘-‘ e remove um possível ‘-‘ no último caractere com str_replace  e substr() respectivamente.

Concluindo, o utf8_decode e utf8_encode são funções auxiliares muito úteis para conversão entre caracteres latinos e o formato universal. Muitas vezes elas são utilizadas para tratamento de acentuações, e caracteres especiais inclusos no formato latino. Lembrando que se você não utiliza caracteres latinos, este comandos não terão nenhum efeito para sua aplicação.

Espero que tenha ajudado com esta explicação e até a próxima.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais.

 

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

Password Hashing – API nativa para gerenciamento de senhas

 

Imagem ilustrativa

Imagem ilustrativa

A segurança de dados sensíveis dos usuários é sempre um fator determinante para a integridade de qualquer aplicação. Dada essa premissa, esforços são constantes nessa área para prover os sistemas computacionais de formatos criptografados cada vez mais seguros.

Senhas geralmente são armazenadas em hash, que nada mais é do que um símbolo derivado de um algoritmo que o torna incapaz de, à luz da teoria, obter seu estado original. Apesar do nível de complexidade de algoritmos que geram hashes, temos hoje diversas formas que tentam recuperar dados originais “escondidos” através de dicionários, rainbow tables ou força bruta.

Pensando nisso, desenvolvedores da linguagem PHP, preocupados não só com a integridade de senhas mas também com a facilidade de programação oferecida pela linguagem, optaram por criar uma API nativa capaz de somar ao mesmo tempo segurança e simplicidade para armazenamento de credenciais. Criaram então uma extensão de criptografia chamada Password Hashing, disponível desde a versão 5.5.0. Essa extensão utiliza o algoritmo bcrypt, o mais forte suportado pelo PHP atualmente.

Recursos oferecidos

A API oferece um pequeno e poderoso conjunto de funções capazes de auxiliar o programador a criar hashes seguros, realizando todo o trabalho braçal de forma segura e com alto grau de confiabilidade. A seguir, suas respectivas funções:

password_hash

Cria um novo hash de senha usando um algoritmo de hashing. O caso geral para esta função é atribuir um custo (potência matemática) razoável para o algoritmo e deixá-lo criar um salt (parâmetro que gera aleatoriedade da saída) qualquer. O uso de bcrypt sempre retornará uma string de 60 caracteres.

1 <?php
2 echo password_hash("imasters",
3 PASSWORD_BCRYPT,
4 [
5 "cost" => 12, // Se omitido, custo 10
6 'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM) // Você pode omitir este parâmetro para geração de salt aleatório também.
7 ]
8 );
9 // Resultado $2y$12$syPYpcHYHWfyraREZ5BCc./OiKezWghwO/5HsbvNv0U4G1xqjsguW

password_verify

Verifica se uma senha corresponde a um hash.

1 <?php
2
3 if(password_verify('imasters', '$2y$12$sy...'))
4 echo 'Senha válida!';
5 else
6 echo 'Senha inválida!';

password_get_info

Retorna informações sobre o hash dado como algoritmo usado e custo.

1 <?php
2 var_dump(password_get_info('$2y$12$sy...'));

password_needs_rehash

Verifica se um determinado hash corresponde a informações fornecidas. Caso não seja, assume-se que ele precisa sofrer o processo de hash novamente. Como a função retorna apenas um valor booleano, seu real uso pode ser observado abaixo, quando troco as configurações de geração de hash, ou seja, a senha é válida para aquele algoritmo, mas não para o novo custo que inseri, então gero o hash novamente para a nova configuração.

1 <?php
2 $senha = 'imasters';
3 $hash = '$2y$12$sy...';
4 if(password_verify('imasters', $hash)) {
5 echo "A senha é válida\n";
6 if(password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 11])) { // Mudei o custo para 11
7 echo "Senha precisa de novo hash\n";
8 $hash = password_hash($senha, PASSWORD_BCRYPT, ['cost' => 11]); // Gerei o novo hash
9 echo $hash; // Basta salvar no banco de dados agora
10 }
11 else
12 echo "Senha não precisa de novo hash";
13 }
14 else
15 echo "Senha não verificada";

 

Conclusões

Neste artigo, mostramos a facilidade e a simplicidade do gerenciamento de senhas com a API Password Hashing, acompanhadas de um poderoso algoritmo, o bcrypt. O grande objetivo desse recurso é fazer com que você se preocupe mais com as funcionalidades da sua aplicação ao usuário e menos com a complexidade da segurança de senhas.

Referências:

 

Victor Torres
Victor Torres

É Jedi na DialHost, bacharel em Ciência da Computação e mestrando em Modelagem Matemática e Computacional pelo CEFET. Trabalha com desenvolvimento web desde 2007. Pesquisador de otimização e criptografia, é apreciador de um bom café e fã de histórias futuristas.