Você está na página 1de 6

IFPB Disciplina: Segurana de Redes Professor: Dnio Mariz

Exerccio: Criando Certificados Digitais com o OpenSSL


Preparativos iniciais
Usaremos a ferramenta OpenSSL para gerar um par de chaves pblica 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 diretrio para trabalhar. mkdir CA cd CA mkdir newcerts private O diretrio 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 diretrio CA/newcerts ir conter uma cpia de cada certificado que assinarmos. O diretrio CA/private ir conter a nossa chave privada. O prximo passo criar um banco de dados para os certificados que iremos assinar: echo '01' > serial touch index.txt Ao invs de usarmos o arquivo de configurao 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

Exerccio a Criando um par de chaves


1. Para criar uma chave privada, use o comando: openssl genrsa -des3 -out private/CA.key 1024 As opes 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 contm a chave privada com o algoritmo 3DES (-aes128 usaria o algoritmo AES). -out indica onde salvar a chave privada 1024 indica o nmero de bits da chave gerada O resultado da execuo 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] Comentrio: A proteo da chave privada importante, mas implica que voce deve fornecer sua password toda vez que us-la. Voce pode escolher no proteger sua chave privada com uma senha e deixar apenas as permisses do sistema operacional proibindo o acesso a outros usurios, mas se o sistema for comprometido (invadido) sua chave privada ser
IFPB Disciplina: Segurana de Redes Prof. Dnio Mariz

capturada e outras pessoas podero 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 pblica com o comando abaixo: openssl rsa in private/CA.key pubout out CA.pub

Exerccio b Criando um certificado Raiz


Agora ns temos um certificado Raiz e podemos criar vrios certificados para outras pessoas (clientes) ou para vrias aplicaes SSL em diferentes servidores da nossa empresa. Ou seja, podemos fazer o papel de Autoridade Certificadora. O arquivo CA_RAIZ.pem contm 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 opes so as seguintes: -new -x509 pede para criar um novo certificado no formato X.509 -extensions v3_ca indica extenso necessria 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 sada do comando conter vrias perguntas necessrias para a criao 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: Segurana de Redes Prof. Dnio Mariz

Comentrio: Arquivos com extenso .PEM usam o padro Privacy-Enhanced Mail. No caso de um certificado, suas informaes ficam entre "-----BEGIN CERTIFICATE-----" e "-----END CERTIFICATE-----". 2. Podemos visualizar o certificado com o comando: openssl x509 -in CA_RAIZ.pem -noout -text | more

Exerccio c Criando um Pedido de Assinatura de Certificado (Certificate Signing Request - CSR)


1. Um Pedido de Assinatura de Certificado (CSR) um conjunto de informaes de um cliente que so 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 tambm do certificador. Ou seja, geraremos um CSR e depois ns mesmo assinaremos. Normalmente, um cliente no tambm 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. Ento 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 sada do comando conter vrias perguntas necessrias para a criao 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 []:contato@SEUNOME.com.br 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 contm o CSR que deve ser enviado para o Certificador. O arquivo www.SEUNOME.key contm 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

Exerccio 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 opes so as seguintes:
IFPB Disciplina: Segurana de Redes Prof. Dnio Mariz

ca -out -keyfile -cert -config -infiles

subcomando do openssl para gerao de certificados o nome do certificado a ser gerado indica o arquivo contendo a chave privada do certificador indica o arquivo contendo o certificado raiz do certificador indica o nome do arquivo de configurao (com outras opes e defaults) os arquivos contendo os CSR a serem assinados

A sada do comando mostrar informaes sobre o certificado a ser gerado e pedir confirmao para gerar o certificado. A sada 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 = 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=CEFETPB/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] [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 cpia dele no diretrio newcerts. 3. Veja que o arquivo serial foi incrementado cat serial 4. Veja que o arquivo index.txt contm infomaes sobre o certificado gerado cat index.txt 5. Veja que existe uma cpia do certificado no diretrio newcerts. Os nomes das cpias acompanham as informaes contidas em index.txt. ls l newcerts 6. Faa o comando abaixo para ver o arquivo www.SEUNOME.pem gerado more www.SEUNOME.pem Observe que o arquivo de certificado contm duas partes de informaes: informaes legveis e no legveis (depois de ----- BEGIN CERTIFICATE-----). Voce pode eliminar a parte legvel com os comandos:
IFPB Disciplina: Segurana de Redes Prof. Dnio Mariz

mv www.SEUNOME.pem tmp.pem openssl x509 -in tmp.pem -out www.SEUNOME.pem rm tmp.pem 7. Sempre que desejado, possvel visualizar o certificado gerado com o comando: openssl x509 -in www.SEUNOME.pem text noout purpose | more

Exerccio e Testando o Certificado


1. Vamos simular um servidor WWW usando o OpenSSL. Ele ficar escutando na porta 4433 uma conexo e estabelecer uma conexo SSL quando um browser contact-lo. openssl s_server cert www.SEUNOME.pem www key www.SEUNOME.key ATENO: Deixe o comando executando. Ele est no modo listening. 2. Agora abra um browser na mesma mquina e acesse o seguinte URL: https://localhost:4433 . Voce pode acessar de um browser em outra mquina, usando a URL https://IP:4433, onde IP o endereo 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 no est vindo desse site, mas do endereo localhost (ou IP) e, portanto, no combina com a finalidade do certificado. Ento, o comportamento do browser varia ao lidar com uma situao dessas. No caso do Internet Explorer 7.0, a seguinte informao mostrada:

Voce tem a opo de fechar a pgina (no continuar com a conexo SSL) ou continuar, assumindo os riscos. No caso do Firefox, um aviso mostrado mas o usurio pode examinar o certificado e aceitar o rejeitar. Veja abaixo:

IFPB Disciplina: Segurana de Redes Prof. Dnio Mariz

4. Agora examine o certificado (se o browser permitir) e depois aceite o certificado. 5. Observe que o browser mostra informaes sobre a conexo SSL. 6. Cancele a execuo do comando openssl s_server com CTRL-C.

Exerccio 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 execuo do commando. Observe que o arquivo gmail.cert.pem contm um certificado codificado: cat gmail.cert.pem 9. Agora vamos ver o contedo do certificado que obtivemos: openssl x509 text in gmail.cert.pem noout | more

Exerccio 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 EXERCCIO Referncias: 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/

IFPB Disciplina: Segurana de Redes Prof. Dnio Mariz

Você também pode gostar