<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ezequiel Esnaola</title>
    <description>The latest articles on DEV Community by Ezequiel Esnaola (@eesnaola).</description>
    <link>https://dev.to/eesnaola</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F165471%2F1629e080-7985-485f-be73-0b0a977f666f.jpeg</url>
      <title>DEV Community: Ezequiel Esnaola</title>
      <link>https://dev.to/eesnaola</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eesnaola"/>
    <language>en</language>
    <item>
      <title>HTTP/2 vs HTTP/3</title>
      <dc:creator>Ezequiel Esnaola</dc:creator>
      <pubDate>Fri, 17 Apr 2020 13:12:27 +0000</pubDate>
      <link>https://dev.to/eesnaola/http-2-vs-http-3-52hi</link>
      <guid>https://dev.to/eesnaola/http-2-vs-http-3-52hi</guid>
      <description>&lt;p&gt;HTTP/3 is the new official version of the hypertext transfer protocol used to exchange binary information on the web. The most important HTTP/3 improvements come from QUIC, a new network layer protocol developed by Google in 2016.&lt;br&gt;
 &lt;/p&gt;

&lt;h2&gt;
  
  
  What's the main difference with HTTP/2?
&lt;/h2&gt;

&lt;p&gt;HTTP/3 implement a new layer protocol called QUIC (Quick UDP Internet Connection). This supports a set of multiplexed connections over UDP and has been designed to provide TLS 1.3 by default by, reducing latency in both connection and data transport.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0jnuvxeqgre0sugbn7pb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0jnuvxeqgre0sugbn7pb.png" alt="TCP/TLS vs QUIC latency comparison"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Source: &lt;a href="https://ieeexplore.ieee.org/document/7510788/" rel="noopener noreferrer"&gt;How quick is QUIC? &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connection establishment latency&lt;/strong&gt;
Definitely the main improvement! QUIC only needs a single handshake to 
establish a safe session.
Also, after the server and client established connections for the first 
time, a new handshake is no longer necessary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection migration&lt;/strong&gt;
Very valuable feature! QUIC brings its own unique identifier for a connection, it allows you to transfer networks and keep the same connection UUID. For example it allows to go from LTE to WIFI without renegotiating the session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiplexing without HOL blocking&lt;/strong&gt;
HOL(head-of-line) blocking is what happens when you request multiple objects, and a small object gets stuck because a preceding large object got delayed. By using multiple streams, lost packets carrying data for an individual stream only impact that specific stream. Therefore, QUIC does significantly decrease HOL blocking.
Also, allowing the developer to actually choose what are the most important requests, based on characteristics other than their size, it could be tremendously helpful in improving the overall user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  What's the problem with TCP?
&lt;/h2&gt;

&lt;p&gt;TCP needs a handshake to establish a session between server and client, and TLS needs its own handshake to ensure that the session is secured. QUIC only needs a single handshake to establish a secure session. As simple as that, you get the connection establishment time cut in half.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F11eysceayfj7egt0uxmf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F11eysceayfj7egt0uxmf.jpg" alt="http2 vs http3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it possible to use HTTP/3 at this very moment?
&lt;/h2&gt;

&lt;p&gt;At this time few sites are compatible with this new protocol and most browsers are not yet ready.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3y75gm8ff3ur0qlfh0xm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3y75gm8ff3ur0qlfh0xm.jpg" alt="HTTP/3 browser support"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Source: &lt;a href="https://caniuse.com/http3" rel="noopener noreferrer"&gt;https://caniuse.com/http3&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To check which websites are compatible, enter &lt;a href="https://http3check.net/" rel="noopener noreferrer"&gt;here&lt;/a&gt; and search for your favorite website.&lt;/p&gt;




&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>http3</category>
      <category>http</category>
      <category>quic</category>
      <category>internet</category>
    </item>
    <item>
      <title>Let's Encrypt SSL with auto-renew on GoDaddy in 4 steps</title>
      <dc:creator>Ezequiel Esnaola</dc:creator>
      <pubDate>Thu, 16 Apr 2020 15:50:49 +0000</pubDate>
      <link>https://dev.to/eesnaola/let-s-encrypt-ssl-with-auto-renew-on-godaddy-in-4-steps-2ebe</link>
      <guid>https://dev.to/eesnaola/let-s-encrypt-ssl-with-auto-renew-on-godaddy-in-4-steps-2ebe</guid>
      <description>&lt;p&gt;I recently tried to install a Let's Encrypt SSL certificate on GoDaddy and I did'n find enough information to configure auto-renew.&lt;/p&gt;

&lt;p&gt;It is simplified in 4 simple steps steps everything you need to install a free certificate and save some 💸💸💸&lt;br&gt;
 &lt;/p&gt;
&lt;h3&gt;
  
  
  1. Connecting via SSH to your server
&lt;/h3&gt;

&lt;p&gt;You must enable SSH access from your cPanel and log in with your credentials.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ssh &lt;span class="o"&gt;[&lt;/span&gt;username]@[hostname]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  2. Install &lt;a href="https://get.acme.sh"&gt;acme.sh&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Download &lt;a href="https://github.com/Neilpang/acme.sh"&gt;this repo&lt;/a&gt; and install it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;curl https://get.acme.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  3. Issue the certificate
&lt;/h3&gt;

&lt;p&gt;You only need write access to the web root folder to issue the certificate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;acme.sh &lt;span class="nt"&gt;--force&lt;/span&gt; &lt;span class="nt"&gt;--issue&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; example.com &lt;span class="nt"&gt;-d&lt;/span&gt; www.example.com  &lt;span class="nt"&gt;-w&lt;/span&gt; /home/[username]/public_html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  4. Deploy the certificate
&lt;/h3&gt;

&lt;p&gt;There are 2 ways to implement the certificate and both leave the cronjob configured.&lt;/p&gt;

&lt;h4&gt;
  
  
  a. Deploy SSL to cPanel using UAPI (GoDaddy option)
&lt;/h4&gt;

&lt;p&gt;This hook is using UAPI and works in cPanel &amp;amp; WHM version 56 or newer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;acme.sh &lt;span class="nt"&gt;--deploy&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; example.com &lt;span class="nt"&gt;-d&lt;/span&gt; www.example.com &lt;span class="nt"&gt;--deploy-hook&lt;/span&gt; cpanel_uapi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  b. Deploy SSL to cPanel (other cPanel version)
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;DEPLOY_CPANEL_USER&lt;/code&gt; and &lt;code&gt;DEPLOY_CPANEL_PASSWORD&lt;/code&gt; is required only once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DEPLOY_CPANEL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myusername
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DEPLOY_CPANEL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;PASSWORD
&lt;span class="nv"&gt;$ &lt;/span&gt;acme.sh &lt;span class="nt"&gt;--deploy&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; example.com &lt;span class="nt"&gt;-d&lt;/span&gt; www.example.com &lt;span class="nt"&gt;--deploy-hook&lt;/span&gt; cpanel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;For more documentation see the &lt;a href="https://github.com/acmesh-official/acme.sh/wiki"&gt;GitHub Wiki&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I hope this may help you!&lt;/p&gt;

</description>
      <category>ssl</category>
      <category>godaddy</category>
      <category>letsencrypt</category>
      <category>cpanel</category>
    </item>
    <item>
      <title>Manage SSH access with AWS IAM</title>
      <dc:creator>Ezequiel Esnaola</dc:creator>
      <pubDate>Tue, 28 May 2019 13:23:47 +0000</pubDate>
      <link>https://dev.to/eesnaola/manage-ssh-access-with-aws-iam-6a</link>
      <guid>https://dev.to/eesnaola/manage-ssh-access-with-aws-iam-6a</guid>
      <description>&lt;p&gt;When I started working at my current job I found that all the developers used the same key to access all the servers by ssh.&lt;/p&gt;

&lt;p&gt;Looking for a solution I found a &lt;a href="https://github.com/widdix/aws-ec2-ssh"&gt;script&lt;/a&gt; that synchronizes the ssh keys with the users of IAM.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7WK01LpK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ymxvjdqgic8gt1u30x9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7WK01LpK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ymxvjdqgic8gt1u30x9g.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The problem was that all our infrastructure was based on Elastic Beanstalk and the solution was designed for EC2. If it was installed manually as in EC2 it would be erased when the instance is rebuilt.&lt;/p&gt;

&lt;p&gt;To solve this problem, create a script that installs the package after each deploy (in case it is not installed previously) and then configure it.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;To use this script it is necessary to save it in the &lt;code&gt;.ebextensions&lt;/code&gt; folder and then make a new build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update June 2019:&lt;/strong&gt; Check out &lt;a href="https://aws.amazon.com/es/blogs/compute/new-using-amazon-ec2-instance-connect-for-ssh-access-to-your-ec2-instances/"&gt;Amazon EC2 Instance Connect&lt;/a&gt; as a replacement for this script.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For more documentation see the &lt;a href="https://github.com/widdix/aws-ec2-ssh"&gt;GitHub&lt;/a&gt; repository.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>productivity</category>
      <category>devops</category>
      <category>ssh</category>
    </item>
    <item>
      <title>How to store private keys securely in AWS S3 for use with Elastic Beanstalk</title>
      <dc:creator>Ezequiel Esnaola</dc:creator>
      <pubDate>Fri, 24 May 2019 14:09:30 +0000</pubDate>
      <link>https://dev.to/eesnaola/how-to-store-private-keys-securely-in-aws-s3-for-use-with-elastic-beanstack-22lc</link>
      <guid>https://dev.to/eesnaola/how-to-store-private-keys-securely-in-aws-s3-for-use-with-elastic-beanstack-22lc</guid>
      <description>&lt;p&gt;The private keys that you use in a project should not be compromised with the source code. The best option is to configure Elastic Beanstalk to download the file from AWS S3 during the deploy of the application.&lt;/p&gt;

&lt;p&gt;The following example shows an Elastic Beanstalk's &lt;a href="https://docs.aws.amazon.com/en_en/elasticbeanstalk/latest/dg/ebextensions.html"&gt;configuration file&lt;/a&gt; getting a private key file from an S3 bucket.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .ebextensions/serverkey.config&lt;/span&gt;
Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          &lt;span class="nb"&gt;type&lt;/span&gt;: &lt;span class="s2"&gt;"s3"&lt;/span&gt;
          buckets: &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"elasticbeanstalk-region-account-id"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
          roleName: 
            &lt;span class="s2"&gt;"Fn::GetOptionSetting"&lt;/span&gt;: 
              Namespace: &lt;span class="s2"&gt;"aws:autoscaling:launchconfiguration"&lt;/span&gt;
              OptionName: &lt;span class="s2"&gt;"IamInstanceProfile"&lt;/span&gt;
              DefaultValue: &lt;span class="s2"&gt;"aws-elasticbeanstalk-ec2-role"&lt;/span&gt;
files:
  &lt;span class="c"&gt;# Private key&lt;/span&gt;
  &lt;span class="s2"&gt;"/etc/pki/tls/certs/server.key"&lt;/span&gt;:
    mode: &lt;span class="s2"&gt;"000400"&lt;/span&gt;
    owner: webapp
    group: webapp
    authentication: &lt;span class="s2"&gt;"S3Auth"&lt;/span&gt;
    &lt;span class="nb"&gt;source&lt;/span&gt;: https://s3.amazonaws.com/elasticbeanstalk-region-account-id/server.key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The instance profile "aws-elasticbeanstalk-ec2-role" must have permission to read the key object from the specified bucket. Look &lt;a href="https://docs.aws.amazon.com/en_en/elasticbeanstalk/latest/dg/iam-instanceprofile.html#iam-instanceprofile-addperms"&gt;here&lt;/a&gt; to see how to do it.&lt;/p&gt;

&lt;p&gt;You made set the url with an environment variable like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"Fn::Join"&lt;/span&gt; : &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;, &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://s3.amazonaws.com/elasticbeanstalk-region-account-id/"&lt;/span&gt;, &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"Fn::GetOptionSetting"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"Namespace"&lt;/span&gt;: &lt;span class="s2"&gt;"aws:elasticbeanstalk:application:environment"&lt;/span&gt;, &lt;span class="s2"&gt;"OptionName"&lt;/span&gt;: &lt;span class="s2"&gt;"APP_ENV"&lt;/span&gt;&lt;span class="o"&gt;}}&lt;/span&gt;, &lt;span class="s2"&gt;".key"&lt;/span&gt;&lt;span class="o"&gt;]]}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hope you have a good day!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>s3</category>
      <category>elasticbeanstalk</category>
      <category>devops</category>
    </item>
    <item>
      <title>Changing the Git history</title>
      <dc:creator>Ezequiel Esnaola</dc:creator>
      <pubDate>Thu, 09 May 2019 13:06:25 +0000</pubDate>
      <link>https://dev.to/eesnaola/changing-the-git-history-3o3m</link>
      <guid>https://dev.to/eesnaola/changing-the-git-history-3o3m</guid>
      <description>&lt;p&gt;After a month of having formatted my work computer, I noticed that my mail configured in GIT was wrong. This caused my commits to not recognize me as the author and not appear on my account activity.&lt;/p&gt;

&lt;p&gt;If this error is detected after a single commit, it can be easily solved with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;--author&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Correct Name &amp;lt;youremail@example.com&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If it is detected after several commits, as happened to me, the best solution is this:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;I hope you enjoyed my first post ever on dev.to!&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
      <category>bash</category>
      <category>script</category>
    </item>
  </channel>
</rss>
