OpenSSL

De TuxTI

OpenSSL é uma ferramenta livre para a implementação de protocolos para Conexões Seguras (SSL - Secure Sockets Layer) e transporte seguro (TLS - Transport Layer Security) de dados em uma rede, e mecanismos de criptografica. Com essa ferramenta é possível criar certificados, chaves sumarizadas, chaves públicas e privadas e criptografar arquivos.

Sumarização

Os algorítimos de sumarização são utilizados para verificar a integrigade de arquivos e para armazenamento seguro de senhas. Sua característica principal é que não é possível saber o texto de origem a partir da chave que foi gerada.

Criando uma Chave MD5 ou SHA1

A chave é criada utilizando o comando dgst:

  # MD5 digest
  openssl dgst -md5 arquivo
  
  # SHA1 digest
  openssl dgst -sha1 arquivo

No Linux também é possível gerar chaves MD5/SHA1 por meido dos comandos md5sum e sha1sum:

md5sum

  $ openssl dgst -md5 arquivo.tar.gz
  MD5(arquivo.tar.gz)= 81eda7985e99d28acd6d286aa0e13e07
  $ md5sum arquivo.tar.gz
  81eda7985e99d28acd6d286aa0e13e07  arquivo.tar.gz

sha1sum

  $ openssl dgst -sha1 arquivo.tar.gz
  SHA1(arquivo.tar.gz)= e4eabc78894e2c204d788521812497e021f45c08
  $ sha1sum arquivo.tar.gz
  e4eabc78894e2c204d788521812497e021f45c08  arquivo.tar.gz


Criar chaves RSA

Os comandos abaixo geram chaves privadas RSA:

  # Gera uma chave padrão de 512 bits para a saída padrão (Escvreve na tela)
  $ openssl genrsa

  # Gera uma chave de 1024 bits dentro do arquivo chave.pem
  $ openssl genrsa -out chave.pem 1024

  # O mesmo que acima, mas agora com uma palavra-passe (passphrase)
  $ openssl genrsa -des3 -out chave.pem 1024

Para gerar a chave pública utilize o comando:

  openssl rsa -in chave.pem -pubout


Assinando um arquivo com uma chave privada

Se for necessário criar uma chave que garanta a integridade e também que garanta a autenticidade da mensagem, então pode ser utilizadas as chaves RSA. No exemplo abaixo vai ser gerada uma chave SHA1 para o arquivo teste.tar.gz

 # signed digest will be foo-1.23.tar.gz.sha1
 $ openssl dgst -sha1 -sign chave.pem -out teste.tar.gz.sha1 teste.tar.gz

Para verificar a assinatura, é necessário o arquivo, a chave gerada e o arquivo da chave pública:

 # Verificando o arquivo teste.tar.gz usando o arquivo teste.tar.gz.sha1 chave.pub
 $ openssl dgst -sha1 -verify chave.pub -signature teste.tar.gz.sha1 teste.tar.gz

Criptografia

Base64

O algoritimo de Base64 codifica uma mensagem, mas de forma simples, onde não é nessessário uma chave para codificar/decodificar.

Para codificar uma mensagem execute:

 $ echo -n "Teste Mensagem" | openssl enc -base64
 VGVzdGUgTWVuc2FnZW0=

Utilize a opção -d para o processo inverso:

 $ echo "VGVzdGUgTWVuc2FnZW0=" | openssl enc -base64 -d
 Teste Mensagem


AES

Os comandos abaixo são utilizados para criptografar um arquivo utilizando AES:

  # Criptografa o arquivo '''texto.txt''' para '''texto.enc''' usando '''AES 256 bits''':
  $ openssl enc -aes-256-cbc -in texto.txt -out texto.enc

  # O mesmo comando que o anterior, mas a saída é codificada em base64, que pode ser utilizado para enviar por email
  $ openssl enc -aes-256-cbc -a -in texto.txt -out texto.enc

Para descriptografar os comandos são:

  # Descriptografa o arquivo binário
  $ openssl enc -d -aes-256-cbc -in texto.enc

  # Descriptografa o arquivo base64
  $ openssl enc -d -aes-256-cbc -a -in texto.enc

A chave de segurança pode ser informada também por meio de opções do programa:

  # Informando a senha no comando
  $ openssl enc -aes-256-cbc -in texto.txt -out texto.enc -pass pass:MinhaSenha

  # Informando o arquivo com a senha, esse método é muito útil para
  # o uso via Scripts
  $ openssl enc -aes-256-cbc -in texto.txt -out texto.enc -pass file:/root/senha.txt


Certificado Digital

Um certificado digital é usado para ligar uma entidade a uma chave pública. Para garantir digitalmente, no caso de uma Infraestrutura de Chaves Públicas (ICP), o certificado é assinado pela Autoridade Certificadora (AC) que o emitiu e no caso de um modelo de Teia de Confiança (Web of trust) como o PGP, o certificado é assinado pela própria entidade e assinado por outros que dizem confiar naquela entidade. Em ambos os casos as assinaturas contidas em um certificado são atestamentos feitos por uma entidade que diz confiar nos dados contidos naquele certificado.

Criando um Certificado Auto-Assinado

Neste passo-a-passo estão instruções para criar o seu próprio certificado digital para assinatura de outros certificados, utilizando a ferramenta openssl.

O primeiro passo é gerar uma chave RSA de 4096 bits para o certificado de raiz CA, e guardar no arquivo ca.key:

 openssl genrsa -out ca.key 4096

Saída do comando:

Generating RSA private key, 4096 bit long modulus
...................................................................................++
........................................................................++
e is 65537 (0x10001)


Agora vamos criar vamos criar o certificado auto-assinado, será solicitado informações de identificação do seu CA de raiz:

 openssl req -new -x509 -days 1826 -key ca.key -out ca.crt

Saída do comando:

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) [GB]:BE
State or Province Name (full name) [Berkshire]:Brussels
Locality Name (eg, city) [Newbury]:Brussels
Organization Name (eg, company) [My Company Ltd]:https://DidierStevens.com
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:Didier Stevens (https://DidierStevens.com)
Email Address []:didier stevens Google mail


Verificação de Certificados Revogados

openssl ocsp -issuer AUTORIDADE_CERTIFICADORA -cert CERTIFICADO_VERIFICADO -nonce -url http://ocsp.site.com


Exibir informações de um certificado

Um certificado possui uma variedade de informações, como: assinatura, datas válidas, assunto entre outras. O sub-comando x509 permite retirar estas informações, abaixo seguem alguns exemplos para obter estas informações.

Usando a opção -text são retornadas todas as informações do certificado:

openssl x509 -text -in cert.pem

Outras opções retornam informações específicas

Quem assinou o Certificado?

openssl x509 -noout -in cert.pem -issuer

to whom was it issued?

openssl x509 -noout -in cert.pem -subject

Qual o período de validade?

openssl x509 -noout -in cert.pem -dates

the above, all at once

openssl x509 -noout -in cert.pem -issuer -subject -dates

Qual o valor do Hash?

openssl x509 -noout -in cert.pem -hash

what is its MD5 fingerprint?

openssl x509 -noout -in cert.pem -fingerprint

Referência

- http://www.gta.ufrj.br/grad/00_1/rodrigo/fr9right.htm

- http://www.madboa.com/geek/openssl

- http://how-to.linuxcareer.com/using-openssl-to-encrypt-messages-and-files

- http://blog.didierstevens.com/2008/12/30/howto-make-your-own-cert-with-openssl/

- https://www.openssl.org/docs/HOWTO/certificates.txt