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.365 ]

Por: Bruno Lima Queiroz em 03/04/2008


Configurando o "Certificado Digital" emitido pela CA



Você só poderá seguir esses passos, depois de ter seu "Certificado Digital", emitido pelo uma CA(seja ela registrada ou não), em mãos.

Recebi meu certificado e coloquei na pasta criada para os certificado, verificando com o seguinte comando:

# ls -l /usr/local/apache2/certificado/

1 º Passo - Abrindo o arquivo de configuração:

O arquivo de configuração do Apache2 é o http.conf, porém, se observamos ele, existe uma "aliases" que aponta para o arquivo "/usr/local/apache2/conf/http-ssl.conf", ou seja, tudo que se refere a SSL, está nesse arquivo, o que torna a organização muito melhor.

Pressupondo que seu Apache já esteja funcionando como mostrado anteriormente, vamos configurar ele para funcionar também como HTTPS.

# cd /usr/local/apache2/conf/
# vi http-ssl.conf


2º Passo - Criando um VirtualHost SSL

Todas as configurações desse arquivo são padrões, não sendo necessária alterá-las. Apenas no que se refere a criação de nosso VirtualHost.

Pra quem já mexeu com VirtualHost(porta 80), ira se familiarizar rapidamente, ele é muito parecido, tanto nos comandos como no conceito.

Uma explicação simples seria de que cara VirtualHost SSL(porta 443), que iremos criar, irar apontar para um site(uma URL qualquer), que responde por um IP e tem um diretório onde está seu conteúdo já definido.

Vejamos a estrutura abaixo para melhor compreensão:

...

#Abaixo temos o IP do site, cada Site com SSL irá sair por um único IP.

<VirtualHost 10.10.100.34:443>

#   General setup for the virtual host

DocumentRoot "/srv/www/htdocs/radiojustica" #Diretório onde teremos o conteúdo do nosso site

ServerName www.seusite.com.br:443 # O nome pelo qual nosso IP responde, caso não seja um WWW, FTP, XXX, pode se colocar o nome da máquina, ou qualquer outro nome, desde que o IP configurado responda por ele

ServerAdmin suporte@bruno.com.br# E-mail que receberá alertar e informações do SITE

ErrorLog "/usr/local/apache2/logs/seu_site_error_ssl_log" # Arquivo de LOG de ERRO

TransferLog "/usr/local/apache2/logs/seu_site_ssl_access_log" # Arquivo de LOG de ACESSOS

SSLEngine on # ON indica que iremos ativar o uso do SSL

#Parâmetros de criptografia e configurações variadas(padrão para nosso caso)
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

#Nosso Certificado emitido por uma CA(.crt, .pem, .cer, qualquer extensão)
SSLCertificateFile "/usr/local/apache2/conf/certificados/meu_certificado.crt"

#Nossa Chave Privada usada pra gerar nossa requisição para esse certificado
SSLCertificateKeyFile "/usr/local/apache2/conf/certificados/chave_privada.key"

#Para mandar nosso certificado e o caminho para chegar nele para o browser do cliente

#SSLCertificateChainFile "/usr/local/apache2/conf/certificados/certicado_cliente.pem"

As configurações abaixo para  requerer autenticação de cliente, opções de diretório, tipo de arquivo, tipo do log e outros não será alterada para esse caso.(vide abaixo o padrão)

#SSLVerifyClient require
#SSLVerifyDepth  10

#<Location />
#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
#            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
#            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \
#           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>

#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache2/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "/usr/local/apache2/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

Podemos ter vários Virtuais Hosts, basta adicionamos ao fim deste uma nova estrutura dessa com novos dados(IP, nome, diretório, certificados, chaves...), e teremos outro site em nosso servidor usando SSL.

Após configurar o arquivo "http-ssl.conf", iremo fazer com que ele seja carregado pelo apache.

Vamos abrir o arquivo de configuração "http.conf" e iremos descomentar a seguinte linha:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Pronto, esse arquivo será lido e carregado na nossa inicialização. Nosso site está configurado sendo acesso via SSL.

Agora iremos reiniciar nosso apache, vamos observar que ele irá pedir a senha que usamos na hora que geramos nossa chave privada, entre com a senha e o apache está funcionando com SSL.

Após os testes irei mostrar como automatizar esse processo de inicialização do APACHE para que ele não peça senha.

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

Introdução ao Personal Firewall (PF)

Instalação do Apache 2 no OpenSuSE 10.2

Ferramentas de detecção e NMAP

Integração Apache => Tomcat

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

Leitura recomendada

Baixando um mesmo arquivo em mais de um computador

Configuração e balanceamento de 2 links com Vivo ZAP

Apache 2.2 - Introdução ao módulo mod_rewrite

Resolvendo problema de conexão a internet ADSL (Velox)

Transações Financeiras (Warsaw vs User Agent Overrider) - Itaú Bankline 30 horas

  
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