Você está na página 1de 6

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:

capaz de se comunicar usando SSL. Para instalar o OpenSSL: Vamos criar um diretório para trabalhar.

Vamos criar um diretório para trabalhar.

mkdir CA cd CA mkdir newcerts private
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
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.

OpenSSL, vamos usar um que já foi ajustado pelo professor. Exercício a – Criando um par

Exercício a – Criando um par de chaves

1. Para criar uma chave privada, use o comando:

de chaves 1. Para criar uma chave privada, use o comando: As opções indicam o seguinte:

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:

Verifying - Enter pass phrase for private/CA.key:

[DIGITE SUA PASSWORD]

[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á

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:

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

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:

4.

Agora vamos gerar a chave pública com o comando abaixo:

Agora vamos gerar a chave pública com o comando abaixo: Exercício b – Criando um certificado

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
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

-extensions v3_ca indica extensão necessária para criar um certificado raiz

pede para criar um novo certificado no formato X.509

-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: ----- BR [DIGITE SUA PASSWORD] COINFO Paraiba CEFET-PB You are
Enter pass phrase for private/CA.key: ----- BR [DIGITE SUA PASSWORD] COINFO Paraiba CEFET-PB You are
Enter pass phrase for private/CA.key: ----- BR [DIGITE SUA PASSWORD] COINFO Paraiba CEFET-PB You are

Enter pass phrase for private/CA.key:

-----

Enter pass phrase for private/CA.key: ----- BR [DIGITE SUA PASSWORD] COINFO Paraiba CEFET-PB You are about
BR
BR

[DIGITE SUA PASSWORD]

COINFO

Paraiba
Paraiba
----- BR [DIGITE SUA PASSWORD] COINFO Paraiba CEFET-PB You are about to be asked to enter
CEFET-PB
CEFET-PB
----- BR [DIGITE SUA PASSWORD] COINFO Paraiba CEFET-PB You are about to be asked to enter

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

State or Province Name (full name) [Some-State]:

Locality Name (eg, city) []:

Joao Pessoa

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

Organizational Unit Name (eg, section) []:

Common Name (eg, YOUR name) []:

Email Address []:

SEUEMAIL

SEUNOMECOMPLETO

Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []: Email Address []: SEUEMAIL
Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []: Email Address []: SEUEMAIL

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:

2. Podemos visualizar o certificado com o comando: Exercício c – Criando um Pedido de Assinatura

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:

A

saída do comando conterá várias perguntas necessárias para a criação do CSR. Indique-as

da seguinte forma:

Email Address []:

A challenge password []:

Generating a 1024 bit RSA private key

Paraiba
Paraiba

Web Site

++++++

SEUNOME
SEUNOME

++++++ 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.

BR
BR

Country Name (2 letter code) [AU]:

State or Province Name (full name) [Some-State]:

Locality Name (eg, city) []:

Joao Pessoa

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

Organizational Unit Name (eg, section) []:

Common Name (eg, YOUR name) []:

Please enter the following 'extra' attributes to be sent with your certificate request

(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:

visualizar o pedido de certificado (CSR), use o comando: Exercício d – Criando um Certificado a

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:

o cliente solicitante ( www.SEUNOME.com.br ) com o comando: As opções são as seguintes: IFPB ♦

As opções são as seguintes:

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

4 15:30:50 2008 GMT

Subject:

Not After : Feb

countryName

= BR

stateOrProvinceName

= Paraiba

organizationName

= SEUNOME

organizationalUnitName

= Web Site

commonName

= www.SEUNOME.com.br

emailAddress

= contato@SEUNOME.com.br

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/emailAddress=jjubiraba@gmail.com

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] Write out database with 1 new entries Data Base Updated

[DIGITE y e ENTER]

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

newcerts . 3. Veja que o arquivo serial foi incrementado 4. Veja que o arquivo index.txt

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

index.txt contém infomações sobre o certificado gerado 5. Veja que existe uma cópia do certificado no

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.

cópias acompanham as informações contidas em index.txt . 6. Faça o comando abaixo para ver o

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

o comando abaixo para ver o arquivo www.SEUNOME.pem gerado Observe que o arquivo de certificado contém

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:

mv www.SEUNOME.pem tmp.pem openssl x509 -in tmp.pem -out www.SEUNOME.pem rm tmp.pem
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:

é possível visualizar o certificado gerado com o comando: Exercício e – Testando o Certificado 1.

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.

uma conexão SSL quando um browser contactá-lo. ATENÇÃO: Deixe o comando executando. Ele está no modo

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

2. Agora abra um

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:

browser

na

mesma

máquina

e

acesse o seguinte URL:

mostrada: browser na mesma máquina e acesse o seguinte URL: Voce tem a opção de fechar

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:

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

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" >
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:

o arquivo gmail.cert.pem contém um certificado codificado: 9. Agora vamos ver o conteúdo do certificado que

9. Agora vamos ver o conteúdo do certificado que obtivemos:

9. Agora vamos ver o conteúdo do certificado que obtivemos: Exercício g – Outros comandos interessantes

Exercício g – Outros comandos interessantes do OpenSSL

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

desempenho) do OpenSSL no seu computador, digite o comando: FIM DO EXERCÍCIO Referências: 1. Debian Administration.

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/