Certificação Digital no Linux - Apache2

Nesse artigo iremos explicar o conceito básico de certificação digital, mostraremos como se gera uma requisição de certificado, chaves privadas e públicas e configurações https do Apache2 para que nosso site possua certificado digital.

[ Hits: 162.432 ]

Por: Bruno Lima Queiroz em 03/04/2008


Gerando uma "Requisição de Certificado"



Uma "Requisição de Certificado" se faz necessário quando queremos obter um "Certificado Digital", pois nele estaremos informando dados que serão enviados para um CA. Pode ser ela uma CA interna (não registrada pela ICP-Brasil), ou uma CA autorizada (pela ICP-Brasil), no exemplo, SERPRO.

Iremos aqui atribuir uma URL a uma máquina, a um proprietário e aos dados do mesmo. Isso servirá para que a CA, na hora de gerar o certificado, coloque essas informações, que serão vistas por todo e qualquer usuário que acessar o site em questão.

Uma "Requisição de Certificado" é um arquivo que conterá informações de nossa "chave privada" (informações da máquina onde configuraremos nosso certificado) e também informações adicionais que serão acrescidas na hora de criar o mesmo, assim como já dito anteriormente.

Vale uma ressalva para "chave pública", ela é a responsável por conseguir decriptografar as informações contidas em nossa "chave privada", que está em nosso servidor. Porém, em nosso exemplo não mandaremos apenas a "chave pública" via browser, e sim um Certificado Digital autêntico.

Usamos somente a chave pública, para o caso de estarmos usando uma CA privada, para uma rede interna por exemplo.

Com isso, se faz claro, que quando geramos uma "Requisição de Certificado", além das informações obtidas da chave privada e das informadas na hora de sua criação, ela automaticamente cria a chave pública, que voltará também juntamente com o CERTIFICADO que foi emitido pela CA, possibilitando assim que o cliente, em seu browser, consiga interpretar nosso certificado.

Gerando a "Requisição do Certificado":

1º Passo - Dentro do diretório onde criamos nossa "chave privada" iremos executar o comando abaixo. Criaremos uma "requisição de certificado", que lhe pedirá algumas informações como pode ser visto abaixo:

# openssl req -new -nodes -key chave_privada.key -out requisicao_certificado

No comando acima, estamos gerando nosso certificado ("requisicao_certificado") a partir de nossa chave privada "chave_privada.key".

Devemos ter um resultado similar ao mostrado a seguir:

# openssl req -new -nodes -key chave_privada.key -out requisicao_certificado
Enter pass phrase for chave_privada.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]:Distrito Federal
Locality Name (eg, city) []:Brasilia
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NOME DA EMPRESA OU RESPONSÁVEL PELO SITE
Organizational Unit Name (eg, section) []:ORGANIZAÇÃO, CASO HAJA
Common Name (eg, YOUR name) []:URL DO SITE, ou nome do servidor, ex: www.meusite.com, nomedomeuservidor
Email Address []:suporte@bruno.com.br

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:SENHA LEMBRETE PARA SENHA(OPCIONAL)
An optional company name []:OPÇÃO NOME DA EMPRESA OU SIGLA

Como podemos ver acima, entramos com vários dados e os mesmos gerarão nossa requisição.

O conteúdo do arquivo "requisicao_certificado"(vide abaixo) é o que devemos mandar para nossa CA (SERPRO no caso), para que ele gere nosso certificado.

O arquivo gerado (requisicao_certificado)terá como seu conteúdo similar ao mostrado abaixo:

-----BEGIN CERTIFICATE REQUEST-----
MIIDWTCCAkECAQAwgc4xCzAJBgNVBAYTAkJSMRkwFwYDVQQIExBEaXN0cml0byBG
ZWRlcmFsMREwDwYDVQQHEwhCcmFzaWxpYTExMC8GA1UEChMoTk9NRSBEQSBFTVBS
RVNBIE9VIFJFU1BPTlNBVkVMIFBFTE8gU0lURTEfMB0GA1UECxMWT1JHQU5JWkFD
QU8sIENBU08gSEFKQTEYMBYGA1UEAxMPd3d3Lm1ldXNpdGUuY29tMSMwIQYJKoZI
hvcNAQkBFhRzdXBvcnRlQGJydW5vLmNvbS5icjCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBALIhpsa3EUpvVYYRHQlurN2O3ToIK6ji2qHMJo/fmAQduR5w
eA/RLB1bn9ymIXOlKPVZ3hUM1g2+sWeVKZwwZCEHSPD6iGXzODCX4ZsaDYWK9a72
IY1S+fwt2zgMM4diw1VFE3xDq6IRrOu104DBOp2qdpQHPZcAzxY9W9ueKOAyTZYB
bJRhrpvtZhxP7xLSq2kFa3b8L2L1hVkCgFfWbnyWKhhiF2mriKq5n47XlfC1xkTy
+KdY4lulEYuQ6C8kJgnfq9CBqmpu+jG6084yza0NFuDoB0RhFcDan+8tyf+6Dg8C
0v3woCHB1U7Vyww++5slV54jni3eOh4f7O7/Fu8CAwEAAaBFMBQGCSqGSIb3DQEJ
BzEHEwVTRU5IQTAtBgkqhkiG9w0BCQIxIBMeT1BDQU8gTk9NRSBEQSBFTVBSRVNB
IE9VIFNJR0FMMA0GCSqGSIb3DQEBBQUAA4IBAQAV3ZU1xWAMu+1XfUY8FM4lbNaM
L4oD0B3TUG/plof8zewVkiPN9MgmNy6Nar6YeXDtSIdbZl/LLF/sj3ktd8zENAa8
X7n2u6jU54kPxRJcdhDdzta2xd7He1Hbs9h7Y8Q8cwvOSXmfL8GH2ZbLJ2LFqzTK
JQ+oZ7l9LNOjLvqRWvDu/4A6kJdCk8Bx/Oeko+fZ9DPELPTqskrDcOpt4ucaJHe9
m9ZhJmhOC2KN2TYQP+pucZZzGBgCDT1we5Y/fdtzb89RWEfkKkSo0negT8XVp/g/
p6pund4ycUUpBHO2yJXJGgJdRXEVz/gskv4D9/B/YDjMOeBHq+EKPSpAcxsf
-----END CERTIFICATE REQUEST-----

Esse procedimento demorará alguns dias, pois envolve pagamento e processo de registro, porém, não mais que 10 dias.

No site do SERPRO, onde podemos comprar, registrar e baixar nosso certificado, iremos colocar nossa requisição de certificado. Esse processo é muito simples e particular.

Caso você escolha outra CA, isso não terá problema, pois o que você precisa ter em mãos independentemente da CA escolhida é a sua "Requisição de Certificado", a qual você acaba de criar.

Inclusive se você for usar uma CA local (sua própria máquina), usando o Openssl você pode gerar um certificado, porém, não será um certificado válido e reconhecido, assim como já foi explicado.

Página anterior     Próxima página

Páginas do artigo
   1. Conceito geral
   2. Instalando o Open-SSL
   3. Instalando / Recompilando o Apache 2
   4. Gerando uma "Chave Privada"
   5. Gerando uma "Requisição de Certificado"
   6. Configurando o "Certificado Digital" emitido pela CA
   7. Efetuando testes
   8. Criando arquivo de Senha para inicialização do APACHE 2
   9. Mandando o "caminho" de acesso ao certificado via browser
   10. Criando um redirecionamento automático para HTTPS
   11. Criando script para inicialização automática
   12. Conclusão
Outros artigos deste autor

Solução completa para Web Server usando Apache + SSL + MOD_JK + PHP + MySQL

Introdução ao Personal Firewall (PF)

Ferramentas de detecção e NMAP

Instalação do Apache 2 no OpenSuSE 10.2

Integração Apache => Tomcat

Leitura recomendada

Configurando sua placa wireless no Linux

Sistemas Operacionais Online

Replicação e balanceamento de carga em servidores usando DNS

Servidor IM interno em 5 minutos (jabber)

DHCP e BIND9 - Se entendendo via Dynamic DNS

  
Comentários
[1] Comentário enviado por brunolimaq em 03/04/2008 - 12:43h

Disponivel para qualquer dúvida.

Att.,

Bruno Lima

[2] Comentário enviado por cvs em 03/04/2008 - 13:00h

Alteração feita de acordo com sua solicitação.

Em tempo gostaria de parabeniza-lo... Leitura interessante. Só acho que seria OpenSSL :D

[3] Comentário enviado por brunolimaq em 03/04/2008 - 13:03h

Entendo, fiquei na dúvida, mas os conceitos sobre certificação falam mais forte.
Poderei fazer algo melhor no futuro, e usar o nome OpenSSL.
Obrigado.


[4] Comentário enviado por julianjedi em 04/04/2008 - 10:55h

Gostei do artigo ... muito esclarecedor... e bem didático .. nota 10 .. e ja ta nos meus favoritos...

[5] Comentário enviado por caiogustavo15 em 04/04/2008 - 20:18h

Muito interessante esse seu artigo. Há algum tempo venho procurando algo assim, mais ainda não tinha achado. Mais como sou "iniciante" ainda tenho algumas dúvidas. No meu caso quero fazer essa implementação pois no prédio onde moro nós dividimos uma rede wirelless, mais as vezes aparece algum conhecido que quer usar a rede e temos que ficar colocando senha, liberando o MAC no ap.. essas coisas, e por isso gostaria de usar esse método para "liberar" o acesso de pessoas na rede. Você teriam mais algum artigo que pudesse me ajudar?? Alguma outra leitura pra me indicar ?? Obrigado!

[6] Comentário enviado por emarone em 04/04/2008 - 22:31h

Cara, parabéns, pelo artigo!!!!

[7] Comentário enviado por jivago em 06/04/2008 - 10:50h

Bruno, essa configuração funciona tambem em Kurumi e Slackware??

[8] Comentário enviado por brunolimaq em 07/04/2008 - 12:32h

Sim, funciona em qualquer distro, incluse em SOLARIS, basta termo o APACHE e o OPENSSL instalados.

Qualquer problema ou dúvida em outra distro, estou a disposição.

Att.,

Bruno Lima

[9] Comentário enviado por otaviozm em 08/04/2008 - 12:29h

parabens pelo artigo! um assunto muito interessante a ser discutido... agradeço pelo tempo dedicado a esclarecer algumas duvidas :)

abraços!

[10] Comentário enviado por leows em 23/12/2008 - 11:03h

Para não pedir senha caso crie um certificado seguro, basta adicionar esse script em /etc/init.d

instale o interpretador expect com o comando:
apt-get install expect

ATENÇÃO: altere o valor <password> do conteúdo do script abaixo para a senha que vc criou na sua phrase do certificado.

# crie um arquivo chamado webserver em /etc/init.d

vi /etc/init.d/webserver

#!/bin/bash
# /etc/init.d/webserver
#
set -e
set -u
test -x /etc/init.d/apache2 || exit 0
. /lib/lsb/init-functions

case "${1:-''}" in
'start')
/usr/bin/expect -c '
set force_conservative 0 ;# set to 1 to force conservative mode even if
if {$force_conservative} {
set send_slow {1 .001}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
set timeout 2
puts "\n"
spawn /etc/init.d/apache2 start
expect "phrase:"
send "<password>\r"
expect "OK"
puts "\r"
exit
'
;;

'stop')
/etc/init.d/apache2 stop
;;

'restart')
/etc/init.d/apache2 stop
sleep 5
/etc/init.d/webserver start
;;
'reload')
/etc/init.d/apache2 reload
;;
'force-reload')
/etc/init.d/apache2 force-reload
;;
*)
echo "Usage: $SELF start|stop|restart|reload|force-reload"
exit 1
;;
esac

ATENÇÃO: altere o valor <password> do conteúdo do script acima para a senha que vc criou na sua phrase do certificado.

salve e após dê permissão de escrita
chmod +x /etc/init.d/webserver


verifique qual level o seu linux está iniciando com o comando who -r
após entre no diretório do level correto em
/etc/rc<level>.d

renomeio o link do apache2 para K91apache2
mv /etc/rc<level>.d/S91apache2 ./K91apache2

após coloque o nosso script customizado para iniciar o apache2 sem pedir senha
ln -s /etc/init.d/webserver /etc/rc<level>.d/S92webserver

teste o script
/etc/init.d/webserver stop
/etc/init.d/webserver start

# Boa Sorte! :)

[11] Comentário enviado por thiagoborn em 06/06/2012 - 22:59h

Você saberia como configurar o apache 2.2 para que ele peça o certificado do cliente para fechar conexão?
Client Faz requisição -> Apache
Apache pede certificado de cliente. E por aí vai


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts