02 Exercicio Certificado Digital OpenSSL v2

6
IFPB Disciplina: Segurança de Redes Prof. Dênio Mariz 1 IFPB Disciplina: Segurança de Redes Professor: Dênio Mariz Exercício: Criando Certificados Digitais com o OpenSSL Preparativos iniciais Usaremos a ferramenta OpenSSL para gerar um par de chaves pública e privada e para gerar o certificado. Depois, disponibilizaremos o certificado digital criado para o servidor web Apache, para que ele seja capaz de se comunicar usando SSL. Para instalar o OpenSSL: apt-get install openssl Vamos criar um diretório para trabalhar. mkdir CA cd CA mkdir newcerts private O diretório CA irá conter: O certificado raiz do certificador (seremos um Certificate Authority (CA)) O banco de dados de certificados que assinaremos As chaves, pedidos de assinatura de certificados e certificados gerados O diretório CA/newcerts irá conter uma cópia de cada certificado que assinarmos. O diretório CA/private irá conter a nossa chave privada. O próximo passo é criar um banco de dados para os certificados que iremos assinar: echo '01' > serial touch index.txt Ao invés de usarmos o arquivo de configuração que vem com o OpenSSL, vamos usar um que já foi ajustado pelo professor. wget www.coinfo.cefetpb.edu.br/professor/denio/seg/openssl.cnf Exercício a – Criando um par de chaves 1. Para criar uma chave privada, use o comando: openssl genrsa -des3 -out private/CA.key 1024 As opções indicam o seguinte: genrsa indica ao OpenSSL que voce quer gerar um par de chaves -des3 indica que a chave privada deve ser criptografada. Vai pedir uma password e vai cifrar o arquivo que contém a chave privada com o algoritmo 3DES (-aes128 usaria o algoritmo AES). -out indica onde salvar a chave privada 1024 indica o número de bits da chave gerada O resultado da execução é algo parecido com o mostrado abaixo. 625152 semi-random bytes loaded Generating RSA private key, 1024 bit long modulus .....++++++ .........................++++++ e is 65537 (0x10001) Enter pass phrase for private/CA.key: [DIGITE SUA PASSWORD] Verifying - Enter pass phrase for private/CA.key: [DIGITE SUA PASSWORD] Comentário: A proteção da chave privada é importante, mas implica que voce deve fornecer sua password toda vez que usá-la. Voce pode escolher não proteger sua chave privada com uma senha e deixar apenas as permissões do sistema operacional proibindo o acesso a outros usuários, mas se o sistema for comprometido (invadido) sua chave privada será

Transcript of 02 Exercicio Certificado Digital OpenSSL v2

Page 1: 02 Exercicio Certificado Digital OpenSSL v2

IFPB ♦ Disciplina: Segurança de Redes ♦ Prof. Dênio Mariz 1

IFPB Disciplina: Segurança de Redes Professor: Dênio Mariz

Exercício: Criando Certificados Digitais com o OpenSSL

Preparativos iniciais

Usaremos a ferramenta OpenSSL para gerar um par de chaves pública e privada e para gerar o certificado. Depois, disponibilizaremos o certificado digital criado para o servidor web Apache, para que ele seja capaz de se comunicar usando SSL.

Para instalar o OpenSSL: apt-get install openssl

Vamos criar um diretório para trabalhar. mkdir CA

cd CA

mkdir newcerts private

O diretório CA irá conter: • O certificado raiz do certificador (seremos um Certificate Authority (CA)) • O banco de dados de certificados que assinaremos • As chaves, pedidos de assinatura de certificados e certificados gerados

O diretório CA/newcerts irá conter uma cópia de cada certificado que assinarmos. O diretório CA/private irá conter a nossa chave privada.

O próximo passo é criar um banco de dados para os certificados que iremos assinar: echo '01' > serial

touch index.txt

Ao invés de usarmos o arquivo de configuração que vem com o OpenSSL, vamos usar um que já foi ajustado pelo professor.

wget www.coinfo.cefetpb.edu.br/professor/denio/seg/openssl.cnf

Exercício a – Criando um par de chaves

1. Para criar uma chave privada, use o comando: openssl genrsa -des3 -out private/CA.key 1024

As opções indicam o seguinte: genrsa indica ao OpenSSL que voce quer gerar um par de chaves -des3 indica que a chave privada deve ser criptografada. Vai pedir uma password e vai

cifrar o arquivo que contém a chave privada com o algoritmo 3DES (-aes128 usaria o algoritmo AES).

-out indica onde salvar a chave privada 1024 indica o número de bits da chave gerada

O resultado da execução é algo parecido com o mostrado abaixo.

625152 semi-random bytes loaded

Generating RSA private key, 1024 bit long modulus

.....++++++

.........................++++++

e is 65537 (0x10001)

Enter pass phrase for private/CA.key: [DIGITE SUA PASSWORD]

Verifying - Enter pass phrase for private/CA.key: [DIGITE SUA PASSWORD]

Comentário: A proteção da chave privada é importante, mas implica que voce deve fornecer sua

password toda vez que usá-la. Voce pode escolher não proteger sua chave privada com uma senha e deixar apenas as permissões do sistema operacional proibindo o acesso a outros usuários, mas se o sistema for comprometido (invadido) sua chave privada será

Page 2: 02 Exercicio Certificado Digital OpenSSL v2

IFPB ♦ Disciplina: Segurança de Redes ♦ Prof. Dênio Mariz 2

capturada e outras pessoas poderão se passar por voce. Caso deseje desproteger a chave, use o comando: openssl rsa -in CHAVE.key -out CHAVE.unsecure

2. No comando anterior, o arquivo private/CA.key foi gerado. Voce pode vê-lo com o comando: cat private/CA.key

A chave privada se parece com o texto abaixo: -----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,0947F49BB28FE5F4

jlQvt9WdR9Vpg3WQT5+C3HU17bUOwvhp/r0+viMcBUCRW85UqI2BJJKTi1IwQQ4c

tyTrhYJYOP+A6JXt5BzDzZy/B7tjEMDBosPiwH2m4MaP+6wTbi1qR1pFDL3fXYDr

ZsuN08dkbw9ML6LOX5Rl6bIBL3i5hnGiqm338Fl52gNstThv0C/OZhXT3B4qsJn8

qZb3mC6U2nRaP/NpZPcEx4lv2vH7OzHTu1TZ7t0asSpgpuH58dfHPw775kZDep2F

LXA3Oeavg0TLFHkaFBUx2xaeEG6Txpt9I74aAsw1T6UbTSjqgtsK0PHdjPNfPGlY

5U3Do1pnU9hfoem/4RAOe0cCovP/xf6YPBraSFPs4XFfnWwgEtL09ReFqO9T0aSp

5ajLyBOYOBKQ3PCSu1HQDw/OzphInhKxdYg81WBBEfELzSdMFQZgmfGrt5DyyWmq

TADwWtGVvO3pEhO1STmCaNqZQSpSwEGPGo5RFkyFvyvyozWX2SZg4g1o1X40qSg9

0FMHTEB5HQebEkKBoRQMCJN/uyKXTLjNB7ibtVbZmfjsi9oNd3NJNVQQH+o9I/rP

wtFsjs+t7SKrsFB2cxZQdDlFzD6EBA+5ytebGEI1lJHcOUEa6P+LTphlwh/o1QuN

IKX2YKHA4ePrBzdgZ+xZuSLn/Qtjg/eZv6i73VXoHk8EdxfOk5xkJ+DnsNmyx0vq

W53+O05j5xsxzDJfWr1lqBlFF/OkIYCPcyK1iLs4GOwe/V0udDNwr2Uw90tefr3q

X1OZ9Dix+U0u6xXTZTETJ5dF3hV6GF7hP3Tmj9/UQdBwBzr+D8YWzQ==

-----END RSA PRIVATE KEY-----

3. O OpenSSL permite visualizar detalhes da sua chave privada com o comando: openssl rsa -text -in private/CA.key | more

4. Agora vamos gerar a chave pública com o comando abaixo: openssl rsa –in private/CA.key –pubout –out CA.pub

Exercício b – Criando um certificado Raiz

Agora nós temos um certificado Raiz e podemos criar vários certificados para outras pessoas (clientes) ou para várias aplicações SSL em diferentes servidores da nossa empresa. Ou seja, podemos fazer o papel de Autoridade Certificadora. O arquivo CA_RAIZ.pem contém o certificado raiz.

1. Para criar uma certificado raiz, use o comando: openssl req -new -x509 –key private/CA.key -extensions v3_ca -out CA_RAIZ.pem

-days 3650

As opções são as seguintes: -new -x509 pede para criar um novo certificado no formato X.509 -extensions v3_ca indica extensão necessária para criar um certificado raiz -days 3650 indica a validade do certificado (10 anos) -out indica o nome do arquivo que conterá o certificado

A saída do comando conterá várias perguntas necessárias para a criação do certificado. Indique-as da seguinte forma: Enter pass phrase for private/CA.key: [DIGITE SUA PASSWORD]

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]:Paraiba

Locality Name (eg, city) []:Joao Pessoa

Organization Name (eg, company) [Internet Widgits Pty Ltd]:CEFET-PB

Organizational Unit Name (eg, section) []:COINFO

Common Name (eg, YOUR name) []:SEUNOMECOMPLETO

Email Address []:SEUEMAIL

Page 3: 02 Exercicio Certificado Digital OpenSSL v2

IFPB ♦ Disciplina: Segurança de Redes ♦ Prof. Dênio Mariz 3

Comentário: Arquivos com extensão .PEM usam o padrão Privacy-Enhanced Mail. No caso de um

certificado, suas informações ficam entre "-----BEGIN CERTIFICATE-----" e "-----END CERTIFICATE-----".

2. Podemos visualizar o certificado com o comando: openssl x509 -in CA_RAIZ.pem -noout -text | more

Exercício c – Criando um Pedido de Assinatura de Certificado (Certificate Signing Request - CSR)

1. Um Pedido de Assinatura de Certificado (CSR) é um conjunto de informações de um cliente que são enviados para um Certificate Authority (CA) para serem assinadas, ou seja, para que seja criado um certificado para esse cliente.

Aqui, faremos o papel do cliente solicitante e também do certificador. Ou seja, geraremos um CSR e depois nós mesmo assinaremos. Normalmente, um cliente não é também um certificador e, nesses casos, ele enviaria o CSR para um certificador e receberia o certificado.

2. Assuma que somos um cliente e queremos criar um certificado para um site na web. Então vamos criar um pedido de assinatura de um certificado (CSR) para o site www.SEUNOME.com.br com o comando: openssl req -new -nodes -out www.SEUNOME.csr –keyout www.SEUNOME.key

A saída do comando conterá várias perguntas necessárias para a criação do CSR. Indique-as da seguinte forma: Generating a 1024 bit RSA private key

.........................................................++++++

.........++++++

writing new private key to 'www.SEUNOME.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]:Paraiba

Locality Name (eg, city) []:Joao Pessoa

Organization Name (eg, company) [Internet Widgits Pty Ltd]:SEUNOME

Organizational Unit Name (eg, section) []:Web Site

Common Name (eg, YOUR name) []:www.SEUNOME.com.br

Email Address []:[email protected]

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []: (ENTER)

An optional company name []:SEUNOME

3. O arquivo www.SEUNOME.csr contém o CSR que deve ser enviado para o Certificador. O arquivo www.SEUNOME.key contém a chave privada do cliente e deve ser mantida em segredo pelo cliente.

4. Para visualizar o pedido de certificado (CSR), use o comando: openssl req -in www.SEUNOME.csr -text -verify -noout

Exercício d – Criando um Certificado a partir de um CSR (ou assinando um certificado)

1. Agora assuma que somos a autoridade certificadora e que recebemos o CSR do cliente (gerado no item anterior). Vamos criar o certificado para o cliente solicitante (www.SEUNOME.com.br) com o comando: openssl ca –out www.SEUNOME.pem –keyfile private/CA.key –cert CA_RAIZ.pem

–config ./openssl.cnf –infiles www.SEUNOME.csr

As opções são as seguintes:

Page 4: 02 Exercicio Certificado Digital OpenSSL v2

IFPB ♦ Disciplina: Segurança de Redes ♦ Prof. Dênio Mariz 4

ca subcomando do openssl para geração de certificados -out o nome do certificado a ser gerado -keyfile indica o arquivo contendo a chave privada do certificador -cert indica o arquivo contendo o certificado raiz do certificador -config indica o nome do arquivo de configuração (com outras opções e defaults) -infiles os arquivos contendo os CSR a serem assinados

A saída do comando mostrará informações sobre o certificado a ser gerado e pedirá confirmação para gerar o certificado. A saída é da seguinte forma: Using configuration from ./openssl.cnf

Enter pass phrase for privado/CA.key:

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 1 (0x1)

Validity

Not Before: Feb 4 15:30:50 2007 GMT

Not After : Feb 4 15:30:50 2008 GMT

Subject:

countryName = BR

stateOrProvinceName = Paraiba

organizationName = SEUNOME

organizationalUnitName = Web Site

commonName = www.SEUNOME.com.br

emailAddress = [email protected]

X509v3 extensions:

X509v3 Basic Constraints:

CA:FALSE

Netscape Comment:

OpenSSL Generated Certificate

X509v3 Subject Key Identifier:

BC:48:50:2C:4E:41:3C:53:B7:7A:21:00:1F:D2:66:09:A5:6A:5C:C3

X509v3 Authority Key Identifier:

keyid:CB:4B:5A:33:32:66:A6:A1:0E:07:53:E0:E9:98:4E:CF:E4:F4:75:DB

DirName:/C=BR/ST=Paraiba/L=Joao Pessoa/O=CEFET-

PB/OU=COINFO/CN=Jose Jubiraba/[email protected]

serial:F5:E1:CA:8E:66:E7:EF:A8

Certificate is to be certified until Feb 4 15:30:50 2008 GMT (365 days)

Sign the certificate? [y/n]: [DIGITE y e ENTER]

1 out of 1 certificate requests certified, commit? [y/n] [DIGITE y e ENTER]

Write out database with 1 new entries

Data Base Updated

2. Este processo atualizou o banco de dados de certificados e produziu dois arquivos: a) o certificado www.SEUNOME.pem e uma cópia dele no diretório newcerts.

3. Veja que o arquivo serial foi incrementado cat serial

4. Veja que o arquivo index.txt contém infomações sobre o certificado gerado cat index.txt

5. Veja que existe uma cópia do certificado no diretório newcerts. Os nomes das cópias acompanham as informações contidas em index.txt. ls –l newcerts

6. Faça o comando abaixo para ver o arquivo www.SEUNOME.pem gerado more www.SEUNOME.pem

Observe que o arquivo de certificado contém duas partes de informações: informações legíveis e não legíveis (depois de “----- BEGIN CERTIFICATE-----). Voce pode eliminar a parte legível com os comandos:

Page 5: 02 Exercicio Certificado Digital OpenSSL v2

IFPB ♦ Disciplina: Segurança de Redes ♦ Prof. Dênio Mariz 5

mv www.SEUNOME.pem tmp.pem

openssl x509 -in tmp.pem -out www.SEUNOME.pem

rm tmp.pem

7. Sempre que desejado, é possível visualizar o certificado gerado com o comando: openssl x509 -in www.SEUNOME.pem –text –noout –purpose | more

Exercício e – Testando o Certificado

1. Vamos simular um servidor WWW usando o OpenSSL. Ele ficará escutando na porta 4433 uma conexão e estabelecerá uma conexão SSL quando um browser contactá-lo. openssl s_server –cert www.SEUNOME.pem –www –key www.SEUNOME.key

ATENÇÃO: Deixe o comando executando. Ele está no modo “listening”.

2. Agora abra um browser na mesma máquina e acesse o seguinte URL: https://localhost:4433 . Voce pode acessar de um browser em outra máquina, usando a URL https://IP:4433, onde IP é o endereço IP do host que está rodando o openssl s_server.

3. Temos dois problemas com o certificado. Primeiro ele foi emitido por um certificador raiz desconhecido pelo browser. Segundo, ele foi emitido para www.SEUNOME.com.br mas não está vindo desse site, mas do endereço localhost (ou IP) e, portanto, não combina com a finalidade do certificado. Então, o comportamento do browser varia ao lidar com uma situação dessas. No caso do Internet Explorer 7.0, a seguinte informação é mostrada:

Voce tem a opção de fechar a página (não continuar com a conexão SSL) ou continuar, assumindo os riscos.

No caso do Firefox, um aviso é mostrado mas o usuário pode examinar o certificado e aceitar o rejeitar. Veja abaixo:

Page 6: 02 Exercicio Certificado Digital OpenSSL v2

IFPB ♦ Disciplina: Segurança de Redes ♦ Prof. Dênio Mariz 6

4. Agora examine o certificado (se o browser permitir) e depois aceite o certificado.

5. Observe que o browser mostra informações sobre a conexão SSL.

6. Cancele a execução do comando “openssl s_server” com CTRL-C.

Exercício f – Recuperando certificados de outros sites

7. Agora vamos recuperar e analisar um certificado de algum site. Vamos escolher um site que use SSL (https), por exemplo, o Gmail do Google. Use o comando: echo quit | openssl s_client –connect mail.google.com:443 2>&1 | sed –ne

"/BEGIN/,/END/p" > gmail.cert.pem

8. Aguarde o fim da execução do commando. Observe que o arquivo gmail.cert.pem contém um certificado codificado: cat gmail.cert.pem

9. Agora vamos ver o conteúdo do certificado que obtivemos: openssl x509 –text –in gmail.cert.pem –noout | more

Exercício g – Outros comandos interessantes do OpenSSL

10. Para fazer um benchmarking (teste de desempenho) do OpenSSL no seu computador, digite o comando: openssl speed

FIM DO EXERCÍCIO Referências:

1. Debian Administration. Creating and Using a self signed SSL Certificates in debian. http://www.debian-administration.org/articles/284

2. Daniel Lopez. Setting Up a Secure Apache 2 Server. SAMS, 2002. http://www.samspublishing.com/articles/article.asp?p=30115&rl=1

3. Ralf S. Engelschall. mod_ssl 2.8 User Manual (Chapter 6: FAQ). http://www.modssl.org/docs/2.8/ssl_faq.html

4. Paul Heinlein. OpenSSL Command-Line HOWTO. http://www.madboa.com/geek/openssl/