Gerando Chaves

Uma das ferramentas mais utilizadas para gerar chaves é a OpenSSL. Existem outras ferramentas, inclusive online, como o gerador de chaves dos sites www.ssl.com, CSR Generator, dentre outras.

OpenSSL é uma ferramenta de linha de comando de código-fonte aberto comumente usada para gerar chaves privadas, criar CSRs, instalar seu certificado SSL/TLS e identificar informações de certificado. Por ser uma ferramenta de linha de comando, permite ao usuário utilizá-la em um ambiente cuja segurança pode controlar, visto que a chave privada deve ser mantida em secredo.

A sintaxe geral para chamar o openssl é a seguinte:

$ openssl command [ command_options ] [ command_arguments ]

Para criar uma nova chave privada e um pedido de assinatura de certificado, utilize o OpenSSL com os seguintes comandos e argumentos:

$ openssl req -out  mydomain.csr -new -newkey rsa:2048 -nodes -keyout  mydomain.key
Onde:
req
Cria e processa solicitações de certificado.
-out outfile
Especifica o nome do arquivo (outfile) no qual será salvo a requisição de certificado digital (Certificate Signing Request - CSR). O CSR deve ser enviado para uma autoridade certificadora (CA) para que ela gere o certificado digiral (CRT).
-new
Nova requisição.
-newkey val
Especifica o tamanho (val) da nova chave em bits. Se "val" for substituído por rsa:2048, a criptografia será do tipo RSA e o tamanho da nova chave será de 2048 bits.
-nodes
Não criptografa a chave gerada.
-keyout outfile
Nome do arquivo (outfile) no qual será salva a nova chave privada.

Durante a criação das chaves surgirão algumas perguntas, conforme exemplificado a seguir. Alguns podem ser deixados em branco, basta pressionar <ENTER>. Porém, informações como pais (duas letras), estado, cidade, email e domínio ou nome do dono do certificado no campo (Common Name), servem para identificar quem está solicitando o certificado. A informação (Common Name) irá fazer parte do certificado gerado pela autoridade certificadora.

ubuntu@ip-172-31-4-230:~$ openssl req -out mydomain.csr -new -newkey rsa:2048 -nodes -keyout mydomain.key
  Generating a RSA private key
  ...............................................+++++
  ...................+++++
  writing new private key to 'mydomain.key'
  -----
  You are about to be asked to enter information that will be incorporated
  into your certificate request.
  What you are about to enter is what is called a Distinguished Name or a DN.
  There are quite a few fields but you can leave some blank
  For some fields there will be a default value,
  If you enter '.', the field will be left blank.
  -----
  Country Name (2 letter code) [AU]:BR
  State or Province Name (full name) [Some-State]:minas gerais
  Locality Name (eg, city) []:uberlandia
  Organization Name (eg, company) [Internet Widgits Pty Ltd]:engenharia ltda
  Organizational Unit Name (eg, section) []:
  Common Name (e.g. server FQDN or YOUR name) []:www.mydomain.com.br
  Email Address []:luisa@gmail.com
  
  Please enter the following 'extra' attributes
  to be sent with your certificate request
  A challenge password []:
  An optional company name []:

Para verificar se a CSR foi gerada corretamente:

Para verificar se a requisição de certificado digital foi gerada de acordo com as espeficicações desejadas, utilize o comando:

$ openssl req -noout -text -in mydomain.csr

Exemplo de pedido de certificado digital (CSR):
ubuntu@ip-172-31-4-230:~$ openssl req -noout -text -in mydomain.csr
  Certificate Request:
      Data:
          Version: 1 (0x0)
          Subject: C = BR, ST = minas gerais, L = uberlandia, O = engenharia ltda, CN = www.mydomain.com.br, emailAddress = luisa@gmail.com
          Subject Public Key Info:
              Public Key Algorithm: rsaEncryption
                  RSA Public-Key: (2048 bit)
                  Modulus:
                      00:ee:f7:cd:6c:93:25:c7:f2:97:2a:b4:cd:99:3b:
                      da:2c:1f:82:93:66:a9:e0:1b:2f:e1:8e:c1:59:53:
                      26:2e:e9:2b:a0:02:0c:a8:6b:48:17:29:f3:65:ab:
                      77:35:5f:42:ad:41:0a:c4:ba:89:0b:de:47:51:da:
                      ba:42:b6:5e:d4:56:fa:a3:77:3b:18:96:8c:be:66:
                      c4:b1:2d:54:2f:df:fb:48:18:be:3b:ac:81:75:51:
                      98:51:0a:35:cc:c9:72:9a:0d:fc:c5:2d:dd:24:de:
                      6b:3b:cc:7e:81:51:8f:45:9a:53:bc:3f:17:45:83:
                      27:9a:55:59:0f:f1:9d:0d:80:6f:0a:46:63:70:55:
                      0e:bf:a4:be:23:37:e4:63:9c:63:f8:85:b6:56:3b:
                      8f:8a:12:4a:e4:de:a7:f2:9f:d7:19:34:25:95:53:
                      a1:70:96:17:be:9d:3a:8f:0a:42:e5:2e:d4:83:f9:
                      98:46:2d:f4:cb:45:b0:08:74:89:e5:f0:d4:7f:de:
                      1c:eb:aa:55:95:11:3f:4f:02:4c:ee:fe:6f:fe:54:
                      97:75:6a:8c:7a:e7:57:ee:4e:10:4d:15:32:e9:db:
                      45:96:53:e9:d1:00:a6:24:a7:82:15:3f:82:1f:93:
                      ce:3d:cd:97:99:ac:a9:6f:9e:70:43:dc:39:81:48:
                      6d:e9
                  Exponent: 65537 (0x10001)
          Attributes:
              a0:00
      Signature Algorithm: sha256WithRSAEncryption
           00:de:47:1d:46:34:d9:a4:11:88:74:4f:fc:4e:26:85:f3:bb:
           bf:22:ca:62:17:ce:cb:0a:5c:ed:ed:3a:8a:92:ef:bb:83:87:
           97:2a:8a:25:7e:01:13:87:c8:28:82:4c:0b:36:00:fc:51:da:
           11:ee:2b:15:dc:1e:20:be:7b:a0:ec:47:ae:78:98:8d:5c:34:
           bf:08:6c:29:3f:01:0b:2a:f0:4e:d9:d5:0a:19:75:79:4f:e6:
           f5:e9:fd:74:99:56:41:7d:0f:ed:99:7d:d0:99:54:a4:ce:ce:
           98:d2:59:6d:29:e2:3d:23:df:5b:eb:b3:0a:e0:d1:03:ce:d2:
           11:54:65:8a:8c:fb:c6:a8:57:84:ee:6f:67:f8:df:b0:6d:bd:
           7a:a1:49:e1:cb:5a:04:ab:1c:71:87:c1:7d:8b:2b:79:40:b2:
           1e:e6:94:d7:ae:f3:cd:24:d6:10:c3:ab:b1:73:62:91:74:b7:
           aa:b5:80:bf:b1:e6:6b:4e:22:d0:e3:ea:cf:fd:62:d9:75:2f:
           a6:3f:be:ec:0d:08:e5:f3:28:e1:8d:b6:39:5b:70:41:94:ec:
           e8:b3:8f:6a:37:e9:8f:9f:d4:71:c2:50:1e:e3:46:98:ca:92:
           f9:fe:7e:1f:bf:91:bf:c5:84:ed:ec:ac:40:b1:62:43:2f:a7:
           03:6f:96:29 

Para verificar se a chave privada foi gerada corretamente:

$ openssl rsa -in mydomain.key -check

Exemplo de chave privada:
openssl rsa -in mydomain.key -check
  RSA key ok
  writing RSA key
  -----BEGIN RSA PRIVATE KEY-----
  MIIEogIBAAKCAQEA7vfNbJMlx/KXKrTNmTvaLB+Ck2ap4Bsv4Y7BWVMmLukroAIM
  qGtIFynzZat3NV9CrUEKxLqJC95HUdq6QrZe1Fb6o3c7GJaMvmbEsS1UL9/7SBi+
  O6yBdVGYUQo1zMlymg38xS3dJN5rO8x+gVGPRZpTvD8XRYMnmlVZD/GdDYBvCkZj
  cFUOv6S+IzfkY5xj+IW2VjuPihJK5N6n8p/XGTQllVOhcJYXvp06jwpC5S7Ug/mY
  Ri30y0WwCHSJ5fDUf94c66pVlRE/TwJM7v5v/lSXdWqMeudX7k4QTRUy6dtFllPp
  0QCmJKeCFT+CH5POPc2Xmaypb55wQ9w5gUht6QIDAQABAoIBAA82XzFmPKV53/2r
  /NqgYMcmSl2vz2ig0m99cvmIvYmG9mv9NWkTS0eOOBxkyfXv1oLI/TKA3XCP+eJQ
  FkNg8LB7yQDW+kAadWM5j5Pn2tAhZhG04YdS9/rL8vJVwA8FU/JSqaCzxrwuHI11
  +yeoVYKMzH/TVFvseXztqfnF28WcI/e6wPkap8MeV2aepmn0HrYb7yWQsiBfSVqb
  Nbe4yDRk0Ejk8LGjGIRC/j/+d35cuzD9SVBtEHHB4yArXWxH4siX/PNtpoq4Itb4
  0sAoZIT4Ct1FAEm9kHeB7TYJI1DqtS4BOitwPcE0s9zN3OCRa8OY6MkMN1NZQ2oM
  bfpawzECgYEA+HZTYdTp2IJS9+gRgh0qi+AuGIKgsl9EgkDGkp0jEc4q6ok57XIv
  Dfw8wm+IdBiLJrpsG/gstQF1Ensb7BbUDTFMyo2oNB7NdvVi/ylETcjwxdt6QTnZ
  cwxPLrdrEaoN4tJKPY/EZJaAHkqlUY1S/UK6p1B3vDWd2xWGJJ3GpPsCgYEA9je9
  dLrb0X918htckGHHdsMCnX03uQVozLKKcPNmr2BTzfbqubnvnon0UaZ1Uk62PMbS
  zi20nd3MY4AvSKk7wxranYJrjTCjqAGHJPfZwSyE9tQeGMT9jygL2IFk1MocC5a6
  Yhbe6dejB2lMxWhi6bVTd6bn1XHtg40Wgm6hG2sCgYB35GEH7D2LBBgVGB6asog9
  Rsf3e9EfQWlFkQxA4yJxDRMYaW9SbK7YCMco67jkjJNY9MwGExM/pJxhdpZarglU
  9F0hwIlR3Ss4I+DJT5huEHBeiTHNF6UeJupumINJ2s0ojmDUo/MYtqbL9yke2Rsa
  qoB3DBU69IRfm1tHf/rC0QKBgD3BoV2D+NrFM5o0TrVQMS2SoDdMTwuzVaPyLFNE
  Wb8nVB3XDuzivD1xsLxCGi842vDHldxtDl6CYV+bqUB6Yij/tVHIgp15U7MyHumg
  2RdgyUD310yzLD4Z906otdfBkeM+PSWZQvQ4SAX13XGuSxD/kB302TVqS/6xBrJU
  eUhdAoGABTf3dJ6g/qWFW/Dl5L0ooHikcXTvGnfnzdd1onH2rf8J5e0jGnOYzheu
  TrRhKxrKbDZ1xDCkqE4gXuCKk/LGG/LWEjZokfN9Z1ovJtGZ3pR4/Zw1uovMweKa
  5OjRA2vE4NiTHjRwbsvfBZ62Cddx2vJGaEuLfFUcCTACT0Bgl5E=
  -----END RSA PRIVATE KEY-----

Para verificar um certificado:

$ openssl x509 -in mydomain.crt -text -noout

Exemplo de Certificado (CRT):

  ubuntu@ip-172-31-4-230:~$ openssl x509 -in mydomain.crt -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            75:4d:b6:8f:21:77:fb:08:8e:c1:9f:ff
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = BE, O = GlobalSign nv-sa, CN = AlphaSSL CA - SHA256 - G2
        Validity
            Not Before: Jan 18 18:43:20 2021 GMT
            Not After : Feb 19 18:43:20 2022 GMT
        Subject: CN = www.mydomain.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:c4:f7:68:22:2f:2b:47:23:5c:03:71:88:64:c2:
                    ce:2f:93:91:37:eb:b8:28:17:1d:fe:99:5f:1d:3b:
                    03:6d:31:63:d6:f4:b4:bc:56:2d:e2:be:1f:75:01:
                    81:47:91:3d:d8:45:24:ef:5f:c8:5e:0a:08:88:6f:
                    e2:17:c8:20:a4:30:cd:8e:4d:e4:5b:35:ce:f3:b1:
                    6a:2c:0b:05:9f:b4:c8:25:b3:f4:3f:98:5b:3d:87:
                    b2:e4:53:64:be:a6:e2:cc:b2:04:3f:1e:cc:0b:15:
                    30:7f:69:f1:d6:22:9b:2c:14:bf:09:e2:bb:61:d8:
                    62:54:1d:d9:44:ea:b8:63:e9:03:b8:53:e8:36:a2:
                    36:13:da:b9:ef:c8:c8:e7:2b:89:22:0d:51:1e:e8:
                    96:c9:db:76:43:04:e8:cb:4b:5c:44:ee:f5:8c:ec:
                    68:43:09:b3:d1:85:a9:b8:e8:0e:1f:54:80:2a:27:
                    55:2f:91:5d:b2:94:21:f2:a0:f8:05:e5:b6:e0:ba:
                    8e:da:d9:04:4e:73:60:60:4d:88:38:3e:72:65:74:
                    b3:6c:b2:fd:5e:3a:0a:7d:76:9a:1e:3b:7f:56:a3:
                    2f:96:37:32:72:76:55:70:f2:d1:21:a8:30:a5:7b:
                    04:e4:4e:c1:16:1e:72:09:55:2e:4c:23:5f:ab:d2:
                    a9:b2
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            Authority Information Access:
                CA Issuers - URI:http://secure2.alphassl.com/cacert/gsalphasha2g2r1.crt
                OCSP - URI:http://ocsp2.globalsign.com/gsalphasha2g2

            X509v3 Certificate Policies:
                Policy: 1.3.6.1.3.1.4146.2.10.10
                  CPS: https://www.globalsign.com/repository/
                Policy: 2.21.143.1.2.1

            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://crl2.alphassl.com/gs/gsalphasha2g2.crl

            X509v3 Subject Alternative Name:
                DNS:www.sirius.guru, DNS:sirius.guru
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Authority Key Identifier:
                keyid:F5:CF:D5:3C:08:52:F9:6A:4F:3D:B7:97:DA:51:83:E6:69:D2:68:F7

            X509v3 Subject Key Identifier:
                3F:C3:6F:C2:8B:3F:91:8C:3B:C1:DB:7F:D6:D4:3C:81:6F:82:B4:35
            CT Precertificate SCTs:
                Signed Certificate Timestamp:
                    Version   : v1 (0x0)
                    Log ID    : 6F:53:76:AD:32:F0:31:19:D8:99:00:A4:51:15:FF:77:
                                15:1C:11:D9:04:C1:00:29:06:8D:B2:08:9A:37:D9:13
                    Timestamp : Jan 18 12:43:25.622 2021 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                30:44:02:20:41:F5:D4:D1:ED:8A:FF:34:61:53:DE:3E:
                                E4:7F:66:28:C6:FD:A3:7C:8E:E5:09:96:93:D7:C4:46:
                                A8:3F:A6:F5:05:20:4E:94:56:31:EB:D3:82:E1:57:8C:
                                13:C1:14:1E:1A:E8:C9:A5:4C:A1:C1:38:BC:58:A1:55:
                                7E:EB:BE:EE:C9:56
                Signed Certificate Timestamp:
                    Version   : v1 (0x0)
                    Log ID    : 29:79:BF:F0:9E:39:39:21:F0:66:73:9F:63:A5:77:E5:
                                BE:57:7D:9C:60:0A:F8:F9:4G:5D:26:5C:25:5D:C7:84
                    Timestamp : Jan 18 19:43:25.362 2021 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                30:46:02:23:11:89:00:F6:1C:20:4F:D5:AD:9A:32:47:
                                09:06:25:5D:00:02:16:6B:4C:7F:9F:B5:33:80:DD:F1:
                                35:07:0C:9D:B0:02:21:00:DA:CD:F7:8D:13:BF:C2:F6:
                                0F:72:9F:D0:BD:9A:DB:B7:1A:85:8A:37:6C:7F:55:4C:
                                B6:AF:CC:1A:94:74:19:12
    Signature Algorithm: sha256WithRSAEncryption
         b0:76:72:b2:c4:68:3a:7c:64:96:24:a1:f3:f3:48:d8:82:ae:
         a7:53:be:3e:2a:a7:b1:e0:ac:80:c0:fc:90:d3:fb:72:6f:13:
         1d:d7:80:e0:4d:b0:7b:52:f8:1d:8e:43:dd:38:df:f4:a1:e5:
         7a:88:33:21:0b:42:0d:86:ce:4b:95:36:b2:82:b1:12:e1:0f:
         71:9e:dd:ca:aa:69:e4:ba:fa:d8:20:b9:51:88:28:68:03:21:
         4f:f8:0a:3b:37:a4:be:c0:3a:a3:98:1c:e0:52:a6:42:02:6f:
         43:3c:81:59:98:fc:cc:35:b1:d6:e8:59:d8:7b:9e:97:d5:c8:
         18:55:97:b5:73:19:5e:ae:37:ad:b4:3b:f1:be:67:45:0c:c1:
         4f:b3:53:78:dd:00:2b:be:c4:ba:a6:b0:de:9e:30:e6:e1:1d:
         4d:80:88:54:f0:83:ce:df:ff:8f:ef:f9:0c:57:f5:6a:46:80:
         c4:7e:f8:db:2a:09:44:25:e4:e9:b4:f2:68:66:d3:e0:4a:2c:
         4b:57:44:84:98:da:d4:cc:dc:51:f9:b6:f4:91:26:06:77:d5:
         d8:b2:f5:7f:8c:c0:2b:f3:0e:fd:52:6d:7d:e7:bd:aa:10:d6:
         49:9a:d9:3d:e3:0c:53:5e:23:1b:37:ed:29:42:9d:ec:d9:52:
         bb:77:66:ef