<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bits on Humberto Rocha</title><link>https://humberto.io/pt-br/bits/</link><description>Recent content in Bits on Humberto Rocha</description><generator>Hugo</generator><language>pt-br</language><atom:link href="https://humberto.io/pt-br/bits/index.xml" rel="self" type="application/rss+xml"/><item><title>Extrair certificado de um domínio</title><link>https://humberto.io/pt-br/bits/extrair-certificado-de-um-dominio/</link><pubDate>Sun, 06 Jul 2025 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/extrair-certificado-de-um-dominio/</guid><description>&lt;p&gt;Para extrair o certificado use:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;openssl s_client -showcerts -servername humberto.io -connect humberto.io:443 &amp;lt;/dev/null 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Se o seu alvo não usa &lt;a href="https://en.wikipedia.org/wiki/Server_Name_Indication"&gt;SNI&lt;/a&gt; você não precisa usar a opção &lt;code&gt;-servername &amp;lt;fqdn&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Em seguida você pode concatenar outros commandos OpenSSL para extrair informação no formato que quiser.&lt;/p&gt;
&lt;p&gt;Para extrair o certificado no formato PEM:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| openssl x509 -outform PEM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Para extrair a chave publica:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| openssl x509 -pubkey -noout
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Para extrair a impressão digital:&lt;/p&gt;</description></item><item><title>Extrair certificado e chave de um arquivo .pfx</title><link>https://humberto.io/pt-br/bits/extrair-certificado-e-chave-de-um-arquivo-pfx/</link><pubDate>Mon, 10 Jul 2023 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/extrair-certificado-e-chave-de-um-arquivo-pfx/</guid><description>&lt;p&gt;Extraia o certificado do arquivo &lt;code&gt;.pfx&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;openssl pkcs12 -in &amp;lt;ARQUIVO_PONTO_PFX&amp;gt; -clcerts -nokeys -chain -out certificate.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Extraia a chave privada no formato &lt;code&gt;.pem&lt;/code&gt; sem cifragem do arquivo &lt;code&gt;.pfx&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;openssl pkcs12 -in &amp;lt;ARQUIVO_PONTO_PFX&amp;gt; -nocerts -nodes -out private_key.pem
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Converta o &lt;code&gt;.pem&lt;/code&gt; no formato de chave &lt;code&gt;RSA&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;openssl rsa -in private_key.pem -out id_rsa
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Se você esta usando OpenSSL 3 o formato de saida padrão será &lt;code&gt;PKCS8&lt;/code&gt;, com as barreiras de encapsulamento neste formato:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-----BEGIN PRIVATE KEY-----
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-----END PRIVATE KEY-----
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Se você precisa da chave no formato &lt;code&gt;PKCS1&lt;/code&gt;, tambem conhecido como tradicional use a flag &lt;code&gt;-tradicional&lt;/code&gt; desta forma:&lt;/p&gt;</description></item><item><title>Conectar a um Pod Kubernetes</title><link>https://humberto.io/pt-br/bits/conectar-a-um-pod-kubernetes/</link><pubDate>Wed, 07 Dec 2022 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/conectar-a-um-pod-kubernetes/</guid><description>&lt;p&gt;Para abrir uma sessão é preciso saber o nome do Pod.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get pod -n &amp;lt;namespace&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Em seguida abra uma sessão bash:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl exec --stdin --tty &amp;lt;nome do pod&amp;gt; -n &amp;lt;namespace&amp;gt; -- /bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Também é possível abrir uma sessão shell:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl exec --stdin --tty &amp;lt;nome do pod&amp;gt; -n &amp;lt;namespace&amp;gt; -- /bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Algumas vezes é preciso rodar um novo Pod a partir de uma imagem com as ferramentas necessárias para inspecionar algo.&lt;/p&gt;</description></item><item><title>Sessão interativa em um contêiner Docker</title><link>https://humberto.io/pt-br/bits/sessao-interativa-em-um-conteiner-docker/</link><pubDate>Tue, 22 Nov 2022 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/sessao-interativa-em-um-conteiner-docker/</guid><description>&lt;p&gt;Abrindo uma sessão bash em um contêiner:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker exec -it &amp;lt;nome-do-conteiner&amp;gt; /bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No caso de imagens minimalistas onde bash não está disponível, ainda é possível abrir uma sessão shell:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker exec -it &amp;lt;nome-do-conteiner&amp;gt; /bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;aside class="tip warning"&gt;
 Uma sessão só pode ser aberta em contêineres que estão rodando. Verifique o status com &lt;code&gt;docker ps&lt;/code&gt; antes de tentar abrir uma sessão.
&lt;/aside&gt;

&lt;p&gt;Em caso de dúvida sobre o nome do contêiner é possível lista-los com:&lt;/p&gt;</description></item><item><title>Docker sem root</title><link>https://humberto.io/pt-br/bits/docker-sem-root/</link><pubDate>Sat, 30 Jul 2022 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/docker-sem-root/</guid><description>&lt;p&gt;Crie o grupo &lt;code&gt;docker&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo groupadd docker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Adicione o usuário ao grupo &lt;code&gt;docker&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo usermod -aG docker $USER
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Aplique as modificações ao grupo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;newgrp docker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Verifique se é possível de rodar o &lt;code&gt;docker&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;aside class="tip warning"&gt;
 Isso não é recomendado em servidores conectados a internet, mantenha os privilégios &lt;code&gt;docker&lt;/code&gt; ao usuário &lt;code&gt;root&lt;/code&gt;.
&lt;/aside&gt;</description></item><item><title>Usar o laptop com a tela fechada</title><link>https://humberto.io/pt-br/bits/usar-o-laptop-com-a-tela-fechada/</link><pubDate>Sat, 30 Jul 2022 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/usar-o-laptop-com-a-tela-fechada/</guid><description>&lt;p&gt;Edite o arquivo &lt;code&gt;/etc/systemd/logind.conf&lt;/code&gt; e altere as linhas seguintes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#89b4fa"&gt;HandleLidSwitch&lt;/span&gt;&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;ignore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#89b4fa"&gt;HandleLidSwitchExternalPower&lt;/span&gt;&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;ignore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#89b4fa"&gt;HandleLidSwitchDocked&lt;/span&gt;&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;ignore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Depois, reinicie o serviço:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl restart systemd-logind.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Desligar automaticamente a tela do laptop</title><link>https://humberto.io/pt-br/bits/desligar-automaticamente-a-tela-do-laptop/</link><pubDate>Fri, 29 Jul 2022 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/desligar-automaticamente-a-tela-do-laptop/</guid><description>&lt;p&gt;Modifique o arquivo &lt;code&gt;/etc/default/grub&lt;/code&gt; e adicione o seguinte conteúdo na variável &lt;code&gt;GRUB_CMDLINE_LINUX&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#89b4fa"&gt;GRUB_CMDLINE_LINUX&lt;/span&gt;&lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a6e3a1"&gt;&amp;#34;consoleblank=300&amp;#34; # desliga a tela após 5 minutos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Em seguida atualize o grub:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo update-grub
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Atualizar múltiplos repositórios</title><link>https://humberto.io/pt-br/bits/atualizar-multiplos-repositorios/</link><pubDate>Mon, 23 May 2022 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/atualizar-multiplos-repositorios/</guid><description>&lt;p&gt;Uma dica para quando temos uma lista de repositórios para atualizar:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;find . -maxdepth 1 -type d \( ! -name . \) -exec bash -c &amp;#34;cd &amp;#39;{}&amp;#39; &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; cd ..&amp;#34; \;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A parte &lt;code&gt;\( ! -name . \)&lt;/code&gt; do comando é usada para evitar de executar o comando na pasta &lt;code&gt;.&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Busca e substituição de quebras de linha no vim</title><link>https://humberto.io/pt-br/bits/busca-e-substituicao-de-quebras-de-linha-no-vim/</link><pubDate>Sun, 20 Feb 2022 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/busca-e-substituicao-de-quebras-de-linha-no-vim/</guid><description>&lt;p&gt;Existem 2 tipos diferentes de caractere especial que são utilizados para as quebras de linha:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;\n&lt;/code&gt; representa um caractere de nova linha &lt;code&gt;0x0a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\r&lt;/code&gt; representa um caractere de retorno de carro &lt;code&gt;0x0d&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mas no lado de substituição do padrão de busca e substituição do vim as coisas mudam um pouco:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;\n&lt;/code&gt; vira um caractere de nulo &lt;code&gt;0x00&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\r&lt;/code&gt; vira um caractere de nova linha &lt;code&gt;0x0a&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Exemplo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;%s/\n/\r/g
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Commit vazio</title><link>https://humberto.io/pt-br/bits/commit-vazio/</link><pubDate>Fri, 18 Feb 2022 00:00:00 +0000</pubDate><guid>https://humberto.io/pt-br/bits/commit-vazio/</guid><description>&lt;p&gt;De vez enquanto nós precisamos fazer um commit vazio só para ativar o CI ou para ativar uma web.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git commit --allow-empty -m &amp;#34;Trigger CI&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>