SERVREDES - Aula 12 - VERSAO 3 - HTTP Conceito, funcionamento e Aplic. com Apache no DEBIAN.pdf
-
Upload
antonio-higino-manoel-machado -
Category
Documents
-
view
634 -
download
4
description
Transcript of SERVREDES - Aula 12 - VERSAO 3 - HTTP Conceito, funcionamento e Aplic. com Apache no DEBIAN.pdf
HTTP – HyperText Transport Protocol
Serviços de Rede – UNATEC
prof: Bruno Roberto V. [email protected]
Conceitos de HTTP
É um dos serviços de rede mais populares do mundo
A famosa “World Wide Web” é toda baseada em servidores que são acessados pelo protocolo HTTP
Utiliza conexões TCP, na famosa porta 80
Cliente x Servidor HTTP
Estação A – “Preciso do Site XXXXX”
Servidor HTTP
“Segue o conteúdo solicitado”
Cliente HTTP
Tcp 80
Tcp 80
Tcp 1048
Tcp 1048
Conceitos de HTTP
O protocolo HTTP é bastante simples, textual e objetivo
Baseado nas RFC´s 1945 e 2616
Seu funcionamento é baseado em requisições e respostas
Conceitos de HTTP
Assim como outros serviços de Rede, possui Cliente e Servidor
O Cliente HTTP é um Browser Internet Explorer Mozilla Netscape
Servidores HTTP ou Servidores “WWW”, são serviços de Redes que irão responder às pesquisas feitas pelos “Browsers” (clientes).
Tipos de Servidores HTTP
Linux, Unix e Derivados
APACHE – www.apache.org – “The Apache Software Foundation”
Microsoft
IIS – Internet Information Server IIS versão 6, no Windows 2003
Servidor WEB x Servidor de Aplicação
Servidores HTTP, são também conhecidos como Servidores “WEB”
Porém, quando este Servidor HTTP possui interatividade com demais aplicações como ASP, .NET, PHP, Mysql, Sql Server, etc, este servidor passa a ser um “Servidor de Aplicação”
As URL´s
Servidores WWW são em sua maioria sob o protocolo HTTP
Os Recursos disponíveis nestes servidores HTTP são denominados “URL´s – Universal Reference Locators”
As URL´s
Um URL, define em completamente em “uma linha”, um determinado serviço na Internet
Por exemplo:
http://www.tomahawk.com:80/~missel/index.html
Componentes de uma URL
protocolo: forma de comunicação usada para acessar o recurso. Pode ser FTP, HTTP, LDAP, ...
servidor: nome da máquina que provê o serviço desejado.
domínio: complemento do nome do servidor, especificando em que rede se encontra.
porta: porta a conectar no servidor. Pode ser omitida se for a porta default para o serviço desejado.
caminho: localização do recurso dentro do servidor. recurso: nome do recurso dentro do servidor.
Analisando URL´s
PROTOCOLO SERVIDOR
DOMÍNIOPORTA
CAMINHORECURSO
http://www.tomahawk.com:80/~missel/index.html
O Protocolo HTTP
Operando em TCP/80, tem o objetivo de enviar REQUISIÇÕES (GET)a servidores, na forma de URL´s (http://).
E, obter respostas na forma de conteúdos Os conteúdos contidos nas respostas de
servidores HTTP, possuem o padrão “MIME”.
Exemplo de uma requisição (solicitação) HTTPGET /teste.html HTTP/1.0 Host: 10.1.1.29:80Accept: text/html, text/plain, image/*,
application/pdf, text/sgml, */* Accept-Encoding: gzip, compress Accept-Language: en User-Agent: Lynx/2.8.5dev.7 libwww-FM/2.14
SSL-MM/1.4.1 OpenSSL/0.9.7
Exemplo de uma Resposta à Solicitação HTTPHTTP/1.1 200 OK Date: Tue, 01 Jun 2004 01:41:08 GMT Server: Apache/2.0.41 (Debian Linux) Last-Modified: Tue, 02 Apr 2002 19:49:45 GMT ETag: "1cds24-35-aba6c840" Accept-Ranges: bytes Content-Length: 53 Connection: close Content-Type: text/html; charset=ISO-8859-1
<html> <body> <h1>OPA, No AR!!</h1> </body> </html>
Analisando o Tráfego com o “Etherreal”
A seguir, 3 exemplos de tráfegos HTTP capturados com analisador de protocolo
Exemplo de GET - Http
Exemplo de Resposta - Http
Exemplo de completo tráfego HTTP com resolução dns
Os PDU´s HTTP
PDU = Protocol Data Unit
São os comandos ou os tipos de mensagens do Protocolo HTTP
PDU´s HTTPMétodo Descrição
GET busca um objeto definido por uma URL do servidor
PUT indica que os dados no corpo da consulta devem ser armazenados na URL especificada.
POSTCria um novo objeto ligado ao objeto especificado na URL. Uma URL será alocada pelo servidor e retornada ao cliente.O conteúdo do novo objeto é o corpo de dados da consulta.
HEAD Similar ao método GET, mas retorna somente o cabeçalho da resposta do servidor
DELETE Requisita ao servidor que o mesmo apague informações correspondentes à URL
“Status de Retorno” HTTP
Os Servidores HTTP, possuem códigos associados à determinados tipos de respostas, para cada situação
Uma das mais famosas, é o “404 error –NOT FOUND”, que é exibida quando tentamos acessar uma página que não existe no servidor em questão
Error 404
Principais “Status de Retorno” do protocolo HTTP (RFC 2616)
Categoria descrição Código Descrição1** Informational 100 Continue
101 Switching protocols
2** Success 200 Ok201 Created202 Accepted
203 Non-authoritive information
226 IM used3** Redirection 300 Multiple choices
301 Moved permanently
302 Moved temporarily
4** Client error 400 Bad request401 Unauthorized402 Payment required403 Forbidden404 Not found
415 Unsupported media type
426 Upgrade Required
5** Server error 500 Internal server error
501 Not implemented
502 Bad gateway
503 Service unavailable
505 HTTP version not supported
O conteúdo das respostas HTTP O conteúdo das respostas dos servidores
HTTP seguem o padrão MIME
Especificados nas RFC´s 2045 a 2048 Exemplos Mime´s mais comuns:
Tipo MIME Significadotext/plain arquivo de texto purotext/html arquivo de texto em formato HTMLimage/gif arquivo de imagem em formato GIF
image/jpeg arquivo de imagem em formato JPEGapplication/pdf arquivo de aplicação em formato PDFvideo/quicktime arquivo de vídeo em formato QuickTime
Tipo de MIME
Apache – Serviço HTTP no Gnu/Linux – www.apache.org
Prof: Bruno Roberto V. [email protected]
O Serviço Apache
Apache no Debian 4.0 Apache 1 (apt-get install apache) Apache 2 (apt-get install apache2)
dpkg –la | grep apache
Iniciar / Parar Serviço /etc/init.d/apache /etc/init.d/apache2
O Serviço Apache
Nome do “Daemon” que irá “rodar”: “httpd”
Exemplo: ps aux | grep apache
root 2173 0.0 0.9 4888 2136 ? Ss Nov10 0:00 /usr/sbin/apachewww-data 3535 0.0 0.6 4888 1376 ? S Nov16 0:00 /usr/sbin/apachewww-data 3536 0.0 0.5 4888 1300 ? S Nov16 0:00 /usr/sbin/apachewww-data 3537 0.0 0.5 4888 1304 ? S Nov16 0:00 /usr/sbin/apachewww-data 3538 0.0 0.5 4888 1300 ? S Nov16 0:00 /usr/sbin/apachewww-data 3539 0.0 0.5 4888 1304 ? S Nov16 0:00 /usr/sbin/apachewww-data 4136 0.0 0.5 4888 1300 ? S Nov18 0:00 /usr/sbin/apacheroot 4340 0.0 0.3 2876 764 pts/0 S+ 16:26 0:00 grep apache
Os Principais Arquivos do Apache2caminhos válidos para o Debian 4.0
/etc/apache2/apache2.conf: principal arquivo de configuração
/etc/mime.types : tipos MIME e extensões de arquivos conhecidos pelo servidor
/var/log/apache2/ : arquivos de logs de acessos e erros
/var/www/ : diretório principal das páginas locais oferecidas pelo servidor
/var/www/apache2-default: páginas default do servidor (index.html) (É o “DocumentRoot” padrão no Debian 4.0, por causa de um “REDIRECT”)
/usr/lib/apache2/modules : módulos dinâmicos usados pelo servidor (plugins)
$HOME/public_html : páginas pessoais de cada usuário
O diretório de configuração do Apache2 no Debian 4.0“/etc/apache2/”
Os mais utilizados: apache2.conf
É o arquivo PRINCIPAL de configuraçãoe todos os demais dependem dele.
ports.conf É o arquivo para configuração de portas.
/sites-enabled/000-default É o arquivo de configuração do recurso
de “VIRTUAL HOSTS”. Vem ativado porpadrão, e contendo “1” virtual hosts já configurado.
Os demais arquivos e diretórios de configuração: /sites-enabled/ e /sites-available/
Ambos são similares e “abrigam” os arquivos de configuração de VIRTUAL HOSTS. Por padrão, existe o arquivo “000-default”.
httpd.conf Arquivo de configuração secundário, EM BRANCO, apenas para fins de compatibilidade.
/mods-enabled/ e /mods-available/ Ambos são similares e são responsáveis por abrigar os módulos do apache2.
/conf.d/ Possíveis configurações adicionais (uso opcional)
envvars Configuração opcional de variáveis de ambiente
Configurando o ApachePrincipais Parâmetros para se utilizar nos arquivos de configuração
Listen 80 Porta padrão que o servidor irá “escutar”
User www Group www
Usuário e Grupo Padrão que serão utilizados pelo Apache
DocumentRoot “/var/www” É o caminho “Raiz” aonde estará o site principal
hospedado
DirectoryIndex index.html index.html.var Arquivos que serão procurados, quando o cliente não
especificar na URL, quem ele gostaria de acessar: Ex: http://10.0.0.1 Será exibida a página: http://10.0.0.1/index.html ou
http://10.0.0.1/index.html.var
Configurando o ApachePrincipais Parâmetros para se utilizar nos arquivos de configuração
Arquivos de Saída (LOG´s)
/var/log/apache2/error_log Mensagens de Erro:
Acessos de Usuários com Erro Erros do Serviço
Ex: [Tue May 23 18:13:05 2006] [error] [client 201.165.38.132] File does not
exist: /home/httpd/ [Tue May 23 18:17:49 2006] [error] [client 201.165.38.132] File does not
exist: /home/httpd/ [Tue May 23 18:17:49 2006] [error] [client 201.165.38.132] File does not
exist: /home/httpd/ [Tue May 23 18:18:04 2006] [error] [client 201.165.38.132] File does not
exist: /home/httpd/ [Tue May 23 18:19:12 2006] [error] [client 201.165.38.132] File does not
exist: /home/httpd/ [Tue May 23 18:19:12 2006] [error] [client 201.165.38.132] File does not
exist: /home/httpd/
Arquivos de Saída (LOG´s)
/var/log/apache2/access_log Log´s dos acessos e requisições feitas ao Serviço:
Ex:201.15.38.132 - - [23/May/2006:19:05:37 +0000] "GET /imagens/visualizar.gif
HTTP/1.0" 200 1429201.15.38.132 - - [23/May/2006:19:05:37 +0000] "GET /imagens/visualizar2.gif
HTTP/1.0" 200190201.15.38.132 - - [23/May/2006:19:05:37 +0000] "GET
/imagens/visualizar_html.gif HTTP/1.0"200 629201.15.38.132 - - [23/May/2006:19:05:37 +0000] "GET
/imagens/visualizar_pdf.gif HTTP/1.0" 200 1039201.15.38.132 - - [23/May/2006:19:05:37 +0000] "GET /imagens/w.gif
HTTP/1.0" 200 39201.15.38.132 - - [23/May/2006:19:05:37 +0000] "GET /imagens/wink.gif
HTTP/1.0" 200 586201.15.38.132 - - [23/May/2006:19:05:37 +0000] "GET /imagens/word.gif
HTTP/1.0" 200 617
Arquivos de Saída (LOG´s)
/var/log/apache2/ssl_request_log Log´s dos acessos e requisições feitas ao Serviço SSL
(criptografado) HTTP Seguro:
[20/Aug/2005:19:34:42 +0000] 222.156.70.45 - - "GET /" 634 [20/Aug/2005:20:43:18 +0000] 218.175.168.222 - - "GET /" 634 [20/Aug/2005:20:43:18 +0000] 218.175.168.222 - - "GET /" 634 [20/Aug/2005:20:43:18 +0000] 218.175.168.222 - - "GET /" 634 [03/Sep/2005:06:07:51 +0000] 222.156.66.55 - - "GET /" 634 [03/Sep/2005:06:07:51 +0000] 222.156.66.55 - - "GET /" 634 [03/Sep/2005:06:07:52 +0000] 222.156.66.55 - - "GET /" 634 [06/Sep/2005:05:32:21 +0000] 61.129.102.56 - - "GET /" 634
Apache - VirtualHost´s
VirtualHost, é a capacidade de alocar 2 ou mais FQDN´s em um mesmo servidor APACHE.
Exemplo: www.meudominio.com.br , será apontado para
um site “X” interno.meudominio.com.br , será apontado para
um site “Y”
Apache - VirtualHost´s
É possível graças à mensagem de “GET” do Cliente HTTP
O Apache irá interpretar esta mensagem e distinguir diferentes “diretório” na mesma máquina, para cada “FQDN”
Configurando o VirtualHost´s“/etc/apache2/sites-enabled/000-default” - Passo 1
## Use name-based virtual hosting.##NameVirtualHost *
O parâmetro “NameVirtualHost *”, ATIVA o suporte ao recurso de VIRTUAL HOSTS, e no APACHE2, vem ativo por padrão
Adicionar quantos Virtuais Hosts forem necessário, seguindo o padrão:
#<VirtualHost *># ServerAdmin [email protected]# DocumentRoot /var/sites/diretorio_que_eu_quero# ServerName meufqdn.dominio.com.br# ErrorLog /var/log/apache2/dummy-host.example.com-error_log# CustomLog /var/log/apache2/dummy-host.example.com-access_log#</VirtualHost>
Configurando o VirtualHost´s“/etc/apache2/sites-enabled/000-default” - Passo 2
Mínimo Obrigatório
Os Principais Parâmetros
DocumentRoot -> É onde estão armazenadas as páginas que o apache irá servir
ServerName -> É o nome do seu servidor (hostname)
ServerAdmin -> É o e-mail do administrador do servidor
ErrorLog -> É onde serão armazenados os logs de erro
TransferLog -> É onde serão armazenados os logs de acesso
Configurando o VirtualHost´s“/etc/apache2/sites-enable/000-default”
<VirtualHost 10.19.40.40:80>ServerAdmin [email protected] /srv/www/default/dominio1ServerName interno.dominio.com
</VirtualHost>
Ip_do_servidor_apacheou simplesmente “ * ”
Diretório Root do FQDN queesta sendo configuradoFQDN desejado
Configurando o VirtualHost´s“/etc/apache2/sites-enable/000-default” - exemplos de 2 domínios diferentes configurados
<VirtualHost *>ServerAdmin [email protected] /srv/www/default/ServerName www.havaianadepau.com.br
</VirtualHost>
<VirtualHost *>ServerAdmin [email protected] /srv/www/default/cadeotrocoServerName www.cadeotroco.com.br
</VirtualHost>
O HTTPS (Serviço HTTP Seguro)
Opera na Porta 443 / TCP
É baseado em Chaves e Certificados
O Apache2, vem com suporte habilitado ao HTTPS
Ativando o Serviço HTTPS no Apache
Uma vez que você já possui o APACHE2 instalado e funcionando, é necessário basicamente providenciar 3 coisas:
1. GERAR ou IMPORTAR um certificado 2. Habilitar o suporte à SSL do Apache2 3. Configurar suas opções do HTTPS (SSL)
Ativando o Serviço HTTPS no Apache
Certifique-se de que os pacotes “openssl” e “ssl-cert” se encontram instalados juntamente com o Servidor Apache2.
Para instalar os mesmos, caso já não estejam:
slot-etch:/etc/apache2# dpkg -la | grep sslii libssl0.9.8 0.9.8c-4etch3 SSL shared librariesii openssl 0.9.8c-4etch4 Secure Socket Layer (SSL) binary and relatedii ssl-cert 1.0.14 Simple debconf wrapper for opensslslot-etch:/etc/apache2#
apt-get install openssl ssl-cert
Passo 1: Gerando um Certificado
Para gerar o seu próprio certificado, é necessário utilizar o aplicativo “openssl”, utilizando o comando (em uma única linha):
openssl req $@ -new -x509 -days 365 -nodes –out/etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
Será gerado um novo certificado em “/etc/apache2/apache.pem”, e é recomendável protegê-lo por questões de segurança, utilizando a permissão “600”:
chmod 600 /etc/apache2/apache.pem
Configurando o Certificado
Ao executar o comando do slide anterior, para gerar o certificado, será solicitado os dados do mesmo:
Country Name (2 letter code) [AU]:BRState or Province Name (full name) [Some- State]:MinasGeraisLocality Name (eg, city) []:Belo HorizonteOrganization Name (eg, company) [Ltd]:Nome_empresaOrganizational Unit Name (eg, section) []:MyEmpresaCommon Name (eg, YOUR name) []:MeuNomeEmail Address []:[email protected]
Testando o HTTPS e certificado
Utilize o “Cliente do SSL”:
openssl s_client -connect servidor.meudominio:443
Se OK, irá aparecer a mensagem de conexão bem sucedida: SSL handshake has read 1278 bytes and written 340 bytes
Coloque o seu FQDN ou seu IP
Passo 2: Habilitando o Suporte SSL do Apache2 Habilite a porta 443/tcp no arquivos “ports.conf”, seguindo o mesmo
padrão já utilizado para a 80/tcp
Listen 80 Listen 443
Execute o comando “a2enmod ssl” e reinicie o seu apache, para habilitar o “módulo SSL” do Apache2
a2enmod ssl /etc/init.d/apache2 restart
Passo 3: Configurando o VirtualHost para trabalhar com HTTPS Por último, basta escolher quais “virtualhosts” irão trabalhar com o
HTTPS e adicionar os parâmetros desejados aos mesmos.
Exemplo de configuração de um virtualhosts com o suporte ao HTTPS habilitado:
<VirtualHost *:443>DocumentRoot "/var/www/site2"ServerName www.havaianadepau.com.brServerAdmin [email protected] onSSLCertificateFile /etc/apache2/apache.pem
</VirtualHost>
Reinicie o seu Apache2
Principais diferenças!
Testando o HTTPS e certificado
Agora o seu Servidor Apache esta configurado para HTTP Seguro:
https://nome.seudominio.com.br
Endereço configurado no seu “VirtualHost”
Finish Him!
Bibliografia: Douglas Comer – Tcp/IP Dominando RedHat Linux9 Windows 2003 Server – A bíblia http://www.ppgia.pucpr.br