02 Exercicio Certificado Digital OpenSSL v2
-
Upload
lucianoifpb -
Category
Documents
-
view
31 -
download
3
Transcript of 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á
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
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:
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:
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:
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/