Hoje em dia, a necessidade de fazer login em sites remotos, ou de aceder a informação sensível é generalizada. Estas comunicações fazem-se quase sempre sem serem encriptadas, pelo que estão sujeitas a serem "ouvidas" por terceiros. Se estivermos a falar de um ambiente corporativo isto ainda é mais verdade, dado que há incentivos para serem os próprios empregados a fazerem estas escutas.
Um factor na solução destes problemas é termos estes acessos encriptados. É este aspecto que vamos discutir neste documento, aplicado ao servidor Apache.
Naturalmente que não se devem esquecer os outros factores de segurança, quer físicos, quer a nível de software (firewalls, updates do sistema, desligar os serviços desnecessários, etc...). Também se deve ter o cuidado de não esquecer que termos um site encriptado não significa automaticamente que estamos imunes a ataques, as regras de segurança devem ser sempre seguidas.
Apesar deste documento ter sido escrito específicamente para o Debian, toda a informação nele contida é facilmente aplicável a qualquer outra distribuição de Linux, uma vez que se utilizam as ferramentas do próprio OpenSSL para a maior parte da configuração. Por exemplo, no SuSE, apenas muda a forma como se configura o servidor virtual do Apache e como se activa o módulo SSL.
A configuração de um servidor virtual no Apache foi discutida noutro documento. Este documento pode ser dividido em quatro partes:
Vamos agora, além de instalar a biblioteca, criar a infra-estrutura necessária para sermos a nossa própria autoridade certificadora (CA). Se só quisermos ter o nosso certificado assinado por uma CA (como a VeriSign), naturalmente que não criamos a nossa CA!
Se quisermos apenas fazer uma requisição de certificado para ser enviado a uma autoridade certificadora, deve-se sempre seguir os procedimentos descritos nos respectivos sites.
A instalação é muito fácil, basta fazer:
# apt-get install openssl
A seguir é necessário criar a infra-estrutura para as chaves publicas. É aqui que vai ser feita toda a administração das chaves geradas. Deve-se escolher uma directoria apropriada para o efeito:
# mkdir /arquivo/empresaCA # cd /arquivo/empresaCA # mkdir certs private # chmod 0700 private # echo '01' > serial # touch index.txt
As chaves privadas devem sempre ser mantidas secretas, por isso mudámos as permissões da directoria private.
O ficheiro de configuração do OpenSSL que vem com o Debian é um pouco intimidante (/etc/ssl/openssl.cnf), por isso vamos criar o nosso próprio ficheiro de configuração em /arquivo/empresaCA/openssl.cnf.
[ ca ] default_ca = empresaca [ empresaca ] dir = /arquivo/empresaCA certificate = $dir/cacert.pem database = $dir/index.txt new_certs_dir = $dir/certs private_key = $dir/private/cakey.pem serial = $dir/serial default_crl_days = 7 default_days = 365 default_md = md5 policy = empresaca_policy x509_extensions = certificate_extensions [ empresaca_policy ] commonName = supplied stateOrProvinceName = supplied countryName = supplied emailAddress = supplied organizationName = supplied organizationalUnitName = optional [ certificate_extensions ] basicConstraints = CA:false [ req ] default_bits = 2048 default_keyfile = /arquivo/empresaCA/private/cakey.pem default_md = md5 prompt = no distinguished_name = root_ca_distinguished_name x509_extensions = root_ca_extensions [ root_ca_distinguished_name ] commonName = CA de exemplo da Empresa stateOrProvinceName = Lisboa countryName = PT emailAddress = ca@empresaca.com organizationName = Autoridade de Certificacao [ root_ca_extensions ] basicConstraints = CA:true
Por omissão os utilitários da biblioteca vão utilizar o ficheiro de configuração que vem com o pacote. Por isso é necessário indicar o novo ficheiro de configuração:
# OPENSSL_CONF=/arquivo/empresaCA/openssl.cnf # export OPENSSL_CONF
Notar que toda a informação necessária para criar o certificado da CA foi incluído neste ficheiro de configuração. Isto é prático dado que ficamos com um registo completo de como foi criada a CA. No entanto não podemos usar este ficheiro de configuração para criar os pedidos de certificado!
Agora podemos criar o certificado raíz (auto assinado):
# openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM Generating a 2048 bit RSA private key ..........................................+++ .......+++ writing new private key to '/arquivo/empresaCA/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: -----
É pedida uma palavra passe, esta vai ser necessária para assinar os certificados que criarmos. Naturalmente que deve ser mantida absolutamente secreta!
Para verificar o conteúdo do certificado fazer:
# openssl x509 -in cacert.pem -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: ab:4b:c1:28:90:88:af:12 Signature Algorithm: md5WithRSAEncryption Issuer: CN=CA de exemplo da Empresa, ST=Lisboa, C=PT/emailAddress=ca@empresaca.com, O=Autoridade de Certificacao Validity Not Before: Jun 5 10:52:27 2007 GMT Not After : Jul 5 10:52:27 2007 GMT Subject: CN=CA de exemplo da Empresa, ST=Lisboa, C=PT/emailAddress=ca@empresaca.com, O=Autoridade de Certificacao Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:c3:9a:a7:9f:6a:8e:89:11:d2:1b:23:69:e4:b7: dd:58:bf:0d:48:f5:3a:e1:6a:f2:cb:1a:37:8c:2c: de:15:33:53:7d:c3:2d:04:04:9e:6c:53:33:2c:3f: a9:dd:6b:4e:57:8e:f2:ff:e7:8f:0e:d4:1e:30:d4: 67:f3:42:c8:1c:96:2c:e7:ad:e0:75:3a:4f:c2:90: 14:93:c5:7d:8b:91:e2:ef:78:e1:20:92:af:08:8c: d4:7d:cf:1d:48:56:bf:3c:df:ac:af:3c:43:db:f1: 8e:b2:ec:3f:26:d1:51:b0:18:13:d0:dd:5b:f1:ec: ff:37:fd:0d:0f:83:33:b8:f3:71:1a:fa:ca:c1:74: 23:18:95:6b:8e:db:6d:b7:af:92:ad:91:e4:1b:8f: 82:ec:99:f3:87:6e:b6:72:74:73:26:aa:1c:1a:a9: 7f:9b:5b:e4:93:cc:98:fd:f9:6c:0a:a7:f8:78:78: cc:ff:51:36:21:bc:68:24:b8:e6:5f:55:6b:44:4c: f9:c2:7e:b9:56:94:b4:49:44:80:db:47:93:d2:00: 40:9b:b1:46:c1:73:ae:21:a5:68:16:a9:5a:f5:e1: 06:3e:0e:8e:2b:bd:06:60:ac:9b:23:aa:f4:69:54: 5f:e0:66:05:cc:c6:6d:9b:1b:56:98:68:f1:bb:d7: 23:df Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE Signature Algorithm: md5WithRSAEncryption 3d:aa:42:0f:cc:cf:92:ac:7e:fe:4a:47:93:2f:b1:6e:07:50: 22:fd:62:b2:37:03:f0:c6:82:4f:cf:a4:cf:cd:d4:88:ef:a3: 12:9a:9e:56:8b:79:55:8b:90:8b:ff:10:92:b2:0e:2a:01:0e: ed:8c:8a:78:bd:f5:1e:e7:c7:69:1a:5a:7d:37:51:ff:bd:19: 02:f8:fb:0c:c6:db:93:6c:f2:39:6e:42:fb:1f:3b:cd:1c:b5: 34:79:71:fa:9f:6c:ff:35:47:ec:bb:1c:e5:c2:52:70:d4:0f: a8:9d:0a:55:35:74:3d:68:4c:ea:c3:0e:10:42:e7:c9:e7:3d: 67:a7:66:ec:0e:6e:94:a5:c7:de:38:f8:70:5e:0f:77:e2:b7: e3:00:66:fa:d1:35:cc:5d:65:27:f5:1c:aa:83:58:bd:67:77: b3:91:bb:57:bf:af:df:6c:4c:97:d8:90:aa:c0:a5:00:55:1a: da:35:b4:2f:19:18:bd:60:51:c7:5c:c6:72:76:9d:32:48:75: 3d:3a:31:c3:0a:3c:e5:86:f7:cc:68:84:50:c5:b5:64:4c:ba: 05:45:bd:72:ae:1c:0f:f0:be:5d:fb:5f:bc:7a:8f:24:85:a4: 06:26:35:14:d3:dc:53:16:16:61:5b:4e:e7:31:7f:4e:47:b4: df:51:07:62
Antes de termos o certificado vamos ter de gerar um pedido de certificado, que depois é enviado à CA, que por sua vez nos devolve o certificado assinado. Numa directoria diferente de /arquivo/empresaCA, e utilizando o ficheiro de configuração por omissão (usar por exemplo outra janela de consola), fazer:
# mkdir /arquivo/requests # cd /arquivo/requests # openssl req -newkey rsa:1024 -keyout sitekey.pem -keyform PEM -out sitereq.pem Generating a 1024 bit RSA private key ......................................++++++ ................++++++ writing new private key to 'sitekey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- 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]:PT State or Province Name (full name) [Some-State]:Lisboa Locality Name (eg, city) []:Lisboa Organization Name (eg, company) [Internet Widgits Pty Ltd]:Empresa de Exemplo Organizational Unit Name (eg, section) []:TI Common Name (eg, YOUR name) []:secreto.empresa-exemplo.com Email Address []:webmaster@empresa-exemplo.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:Teste Teste Teste An optional company name []:
Tal como para o certificado da CA, é-nos pedida uma palavra passe ao principio, esta vai ser necessária para iniciar o apache (ou qualquer outro serviço em que utilizemos o certificado). Esta palavra passe é utilizada para encriptar a chave privada. Escusado será dizer, que a palavra passe e a chave privada devem ser mantidas secretas.
Outra nota importante é o Common Name que deve corresponder ao FQDN do site para o qual estamos a requisitar o certificado.
São criados dois ficheiros:
Não esquecer de mudar as permissões da chave privada:
# chmod 0400 /arquivo/requests/sitekey.pem
A A challenge password é incluída na requisição do certificado mas, tirando isto, é ignorada pelo OpenSSL. Há no entanto algumas CA que fazem uso dela.
Podemos verificar o conteúdo da requisição fazendo:
# openssl req -in sitereq.pem -text -noout Certificate Request: Data: Version: 0 (0x0) Subject: C=PT, ST=Lisboa, L=Lisboa, O=Empresa de Exemplo, OU=TI, CN=secreto.empresa-exemplo.com/emailAddress=webmaster@empresa-exemplo.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ab:df:42:33:0a:88:e8:dc:7a:33:5b:1b:f5:d3: 84:83:49:81:95:c2:9b:34:d8:88:8b:c0:0a:74:a2: 15:1a:d7:03:9d:6c:f8:91:8e:35:3a:16:c2:33:10: 5f:5f:4b:35:2f:54:6a:f7:b8:b5:ce:42:b4:21:1b: e0:39:71:5e:c7:05:9d:1b:70:70:db:1c:d1:23:5b: e2:92:b7:cb:46:b7:26:4c:c7:f7:26:2b:02:75:54: fd:6d:68:6b:96:35:78:1c:5f:23:3f:d9:fe:fc:96: e7:c3:bf:3a:45:91:2e:71:cb:6a:77:5a:af:3d:53: 0d:04:25:a8:bf:37:d9:7b:1d Exponent: 65537 (0x10001) Attributes: challengePassword :Teste Teste Teste Signature Algorithm: sha1WithRSAEncryption a0:46:9b:85:05:51:23:2b:b1:6d:41:3d:31:88:14:40:23:33: 17:76:26:1f:09:fc:0c:72:83:05:05:74:48:9f:9f:3f:52:cb: 9b:1b:0f:b9:d0:1f:bf:2e:74:b8:bc:c4:d8:e8:cd:c0:98:4c: 6c:a7:2e:1f:95:e4:0d:20:9f:c4:26:25:6c:84:90:37:1a:eb: de:33:6a:ae:d0:c5:12:5e:3d:9b:81:75:32:9c:c2:f7:90:53: 81:80:31:54:7b:66:0f:55:40:b5:b7:00:06:52:71:f2:b1:89: dc:da:62:55:f2:47:af:ad:88:1c:02:d5:5c:2f:8b:cb:1a:ad: 96:ee
Resta-nos agora fazer com qu a nossa CA assine a requisição de certificado. Notar que devemos garantir que o ficheiro de configuração usado neste caso vai se o da CA, i.e., /arquivo/empresaCA (se seguio a sujestão dada mais atrás basta voltar para a janela onde criou a CA, se não tem de voltar a exportar a variável da shell OPENSSL_CONF, como se mostra mais acima):
# openssl ca -in /arquivo/requests/sitereq.pem -notext Using configuration from /arquivo/empresaCA/openssl.cnf Enter pass phrase for /arquivo/empresaCA/private/cakey.pem: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'PT' stateOrProvinceName :PRINTABLE:'Lisboa' localityName :PRINTABLE:'Lisboa' organizationName :PRINTABLE:'Empresa de Exemplo' organizationalUnitName:PRINTABLE:'TI' commonName :PRINTABLE:'secreto.empresa-exemplo.com' emailAddress :IA5STRING:'webmaster@empresa-exemplo.com' Certificate is to be certified until Jun 4 12:05:11 2008 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries -----BEGIN CERTIFICATE----- MIIDKTCCAhGgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhzEhMB8GA1UEAxMYQ0Eg ZGUgZXhlbXBsbyBkYSBFbXByZXNhMQ8wDQYDVQQIEwZMaXNib2ExCzAJBgNVBAYT AlBUMR8wHQYJKoZIhvcNAQkBFhBjYUBlbXByZXNhY2EuY29tMSMwIQYDVQQKExpB dXRvcmlkYWRlIGRlIENlcnRpZmljYWNhbzAeFw0wNzA2MDUxMjA1MTFaFw0wODA2 MDQxMjA1MTFaMIGcMSQwIgYDVQQDExtzZWNyZXRvLmVtcHJlc2EtZXhlbXBsby5j b20xDzANBgNVBAgTBkxpc2JvYTELMAkGA1UEBhMCUFQxLDAqBgkqhkiG9w0BCQEW HXdlYm1hc3RlckBlbXByZXNhLWV4ZW1wbG8uY29tMRswGQYDVQQKExJFbXByZXNh IGRlIEV4ZW1wbG8xCzAJBgNVBAsTAlRJMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB iQKBgQCr30IzCojo3HozWxv104SDSYGVwps02IiLwAp0ohUa1wOdbPiRjjU6FsIz EF9fSzUvVGr3uLXOQrQhG+A5cV7HBZ0bcHDbHNEjW+KSt8tGtyZMx/cmKwJ1VP1t aGuWNXgcXyM/2f78lufDvzpFkS5xy2p3Wq89Uw0EJai/N9l7HQIDAQABow0wCzAJ BgNVHRMEAjAAMA0GCSqGSIb3DQEBBAUAA4IBAQAG+ZbYLca8M6LsqggRvAob06QQ x0VVlswmFnzSl5EuTPq/ph5s+tmnz+zdGR9HHcL/2WDmzVl++g/tZG359nwyflbC +mjLeNGVmThw77E/X1Ke1Ty+fgCgl0roS6prpmxBUrThWgmMxMUNGn6dkcW0buQX fDjhxQAox0k3cBfOkGMR9CLLkmR17xSFD/Actzi5gK2mV2rjG1uJI9ExKxBHDLVv bFzjFTeIzZzFAzAI+/+rLBuXMFRds8K2HhBnThIi07k1v/l99tPYDlegPHGJjSDw AQfXeATlUb7cbXph6DpkU4/VXe/LUGQuxIYnUi5bnZpkSZNhJGCCs635E86Q -----END CERTIFICATE----- Data Base Updated
A palavra passe pedida é a da CA, necessária para ler a chave privada da CA, que por sua vez é utilizada para assinar a nossa requisição de certificado.
O certificado resultante foi escrito para a directoria /arquivo/empresaCA/certs. Além disto o ficheiro serial foi actualizado e o ficheiro index.txt contém informação sobre o certificado emitido.
Podemos agora copiar o certificado para a directoria /arquivo/requests:
# cp /arquivo/empresaCA/certs/01.pem /arquivo/requests/sitecert.pem
Por uma questão de organização, copiamos também o certificado da CA para a mesma directoria:
# cp /arquivo/empresaCA/cacert.pem /arquivo/requests/
Verificar o certificado resultante:
# openssl x509 -in /arquivo/requests/sitecert.pem -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: CN=CA de exemplo da Empresa, ST=Lisboa, C=PT/emailAddress=ca@empresaca.com, O=Autoridade de Certificacao Validity Not Before: Jun 5 12:05:11 2007 GMT Not After : Jun 4 12:05:11 2008 GMT Subject: CN=secreto.empresa-exemplo.com, ST=Lisboa, C=PT/emailAddress=webmaster@empresa-exemplo.com, O=Empresa de Exemplo, OU=TI Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ab:df:42:33:0a:88:e8:dc:7a:33:5b:1b:f5:d3: 84:83:49:81:95:c2:9b:34:d8:88:8b:c0:0a:74:a2: 15:1a:d7:03:9d:6c:f8:91:8e:35:3a:16:c2:33:10: 5f:5f:4b:35:2f:54:6a:f7:b8:b5:ce:42:b4:21:1b: e0:39:71:5e:c7:05:9d:1b:70:70:db:1c:d1:23:5b: e2:92:b7:cb:46:b7:26:4c:c7:f7:26:2b:02:75:54: fd:6d:68:6b:96:35:78:1c:5f:23:3f:d9:fe:fc:96: e7:c3:bf:3a:45:91:2e:71:cb:6a:77:5a:af:3d:53: 0d:04:25:a8:bf:37:d9:7b:1d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Signature Algorithm: md5WithRSAEncryption 06:f9:96:d8:2d:c6:bc:33:a2:ec:aa:08:11:bc:0a:1b:d3:a4: 10:c7:45:55:96:cc:26:16:7c:d2:97:91:2e:4c:fa:bf:a6:1e: 6c:fa:d9:a7:cf:ec:dd:19:1f:47:1d:c2:ff:d9:60:e6:cd:59: 7e:fa:0f:ed:64:6d:f9:f6:7c:32:7e:56:c2:fa:68:cb:78:d1: 95:99:38:70:ef:b1:3f:5f:52:9e:d5:3c:be:7e:00:a0:97:4a: e8:4b:aa:6b:a6:6c:41:52:b4:e1:5a:09:8c:c4:c5:0d:1a:7e: 9d:91:c5:b4:6e:e4:17:7c:38:e1:c5:00:28:c7:49:37:70:17: ce:90:63:11:f4:22:cb:92:64:75:ef:14:85:0f:f0:1c:b7:38: b9:80:ad:a6:57:6a:e3:1b:5b:89:23:d1:31:2b:10:47:0c:b5: 6f:6c:5c:e3:15:37:88:cd:9c:c5:03:30:08:fb:ff:ab:2c:1b: 97:30:54:5d:b3:c2:b6:1e:10:67:4e:12:22:d3:b9:35:bf:f9: 7d:f6:d3:d8:0e:57:a0:3c:71:89:8d:20:f0:01:07:d7:78:04: e5:51:be:dc:6d:7a:61:e8:3a:64:53:8f:d5:5d:ef:cb:50:64: 2e:c4:86:27:52:2e:5b:9d:9a:64:49:93:61:24:60:82:b3:ad: f9:13:ce:90
Para configurar o Apache, vão ser necessários os ficheiros cacert.pem, sitecert.pem e sitekey.pem.
Devem-se fazer backups das directorias /arquivo/requests e /arquivo/empresaCA. Este backup vai conter as nossas chaves privadas (da CA e do site), pelo que deve ser guardado em lugar seguro.
Finalmente as impressões digitais dos certificados são obtidas com:
# openssl x509 -noout -fingerprint -in /arquivo/requests/sitecert.pem -sha1 SHA1 Fingerprint=46:96:B7:79:AC:00:21:36:FC:1D:40:3C:68:A5:E0:93:54:74:B7:15 # openssl x509 -noout -fingerprint -in /arquivo/requests/sitecert.pem -md5 MD5 Fingerprint=00:BC:F5:F4:36:53:B6:6A:58:50:93:D5:FD:83:2D:AA # openssl x509 -noout -fingerprint -in /arquivo/requests/cacert.pem -sha1 SHA1 Fingerprint=3E:29:B4:1C:50:74:C3:A8:4F:79:2B:5F:B3:2A:9B:5C:97:B2:F3:CB # openssl x509 -noout -fingerprint -in /arquivo/requests/cacert.pem -md5 MD5 Fingerprint=FC:65:6D:61:5D:64:7E:FF:D6:55:B6:8B:AE:D1:4D:95
Estas impressões digitais são importantes para termos a certeza de estarmos a conectar ao site correcto. Quando ligamos a um site seguro, podemos ver as propriedades dos certificados. Quando fazemos isso o browser calcula as impressões digitais e mostra-as. Se as impressões digitais mostradas não forem iguais às que gerámos com os comandos anteriores, isso quer dizer que a cadeia de confiança entre o browser e o site foi quebrada e não podemos por isso garantir que ninguém esteja a monitorar a nossa ligação ou que a fidelidade da informação recebida esteja garantida.
Vamos seguir o procedimento descrito no documento sobre o Apache citado mais acima.
Começamos por criar as directorias que vão alojar o site:
# mkdir /arquivo/www/secreto.empresa-exemplo.com # cd /arquivo/www/secreto.empresa-exemplo.com # mkdir htdocs logs # chown www-data:www-data * # chmod o-rwx *
A seguir criamos a configuração do site virtual, em /etc/apache2/sites-available/secreto
# secreto.empresa-exemplo.com <VirtualHost *:443> ServerName secreto.empresa-exemplo.com ServerAdmin webmaster@empresa-exemplo.com ServerRoot /arquivo/www/secreto.empresa-exemplo.com DocumentRoot /arquivo/www/secreto.empresa-exemplo.com/htdocs # Logs ErrorLog /arquivo/www/secreto.empresa-exemplo.com/logs/error_log CustomLog /arquivo/www/secreto.empresa-exemplo.com/logs/access_log common CustomLog /arquivo/www/secreto.empresa-exemplo.com/logs/ssl_request_log ssl_combined # Directoria de documentos <Directory "/arquivo/www/secreto.empresa-exemplo.com/htdocs"> Options Indexes FollowSymLinks Includes # Config do htaccess AllowOverride All # Geral Order allow,deny Allow from all </Directory> # Config SSL SSLEngine on SSLProtocol all SSLCipherSuite HIGH:MEDIUM SSLCertificateFile /arquivo/requests/sitecert.pem SSLCertificateKeyFile /arquivo/requests/sitekey.pem SSLCACertificateFile /arquivo/requests/cacert.pem SSLVerifyClient none SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost>
Temos de instruir o Apache para carregar o módulo ssl:
# a2enmod ssl Module ssl installed; run /etc/init.d/apache2 force-reload to enable.
E activar o novo servidor virtual:
# a2ensite secreto Site secreto installed; run /etc/init.d/apache2 reload to enable.
Também é necessário indicar ao Apache para escutar na port 443. Para isso edita-se o ficheiro /etc/apache2/ports.conf, que vai ficar:
Listen 80 Listen 443
Resta-nos agora reiniciar o Apache:
# /etc/init.d/apache2 restart * Forcing reload of web server (apache2)... Apache/2.2.3 mod_ssl/2.2.3 (Pass Phrase Dialog) Some of your private key files are encrypted for security reasons. In order to read them you have to provide the pass phrases. Server secreto.empresa-exemplo.com:443 (RSA) Enter pass phrase: OK: Pass Phrase Dialog successful. [ OK ]
Já temos o nosso servidor seguro a funcionar. Convém em absoluto verificar se de facto a ligação que estabelecemos ao servidor é segura. Podemos fazer isto de várias formas:
Para evitar confusões eu não gosto de ter os sites seguros a funcionarem no mesmo URL dos sites normais. Assim posso ter um site de apresentação com o prefixo 'www' que dá as instruções necessárias para os utilizadores se dirigirem ao site correcto. Por outro lado, esta prática torna quase impossível que um utilizador chegue ao site sem a nossa ajuda, primeiro porque não entendem a possibilidade de um URL não ter 'www' algures, é também normal esquecerem-se do 's' no https, etc, etc, etc, ad-nauseum. Assim na escolha do URL têm de se pesar estes prós e contras. O que eu normalmente faço, em termos de URLs é o seguinte:
Quando o nosso utilizador, finalmente, conseguir chegar ao site, deve saber lidar com o facto de não termos uma CA, ou melhor, com o facto de nós sermos a nossa própria CA.
Vai ser apresentado ao utilizador um aviso, por parte do browser, indicando que este não pode assegurar que o site onde está a aceder é seguro, dado que não pode verificar a validade do certificado que lhe foi oferecido. Cerca de 99% dos utilizadores vão instruir o respectivo browser para continuar, ignorando olimpicamente todos os avisos de segurança.
Aviso dado pelo Firefox
Detalhes do certificado obtido
Mesmo assim, o utilizador poderia comparar a impressão digital do certificado do site apresentada nos detalhes do certificado com aquela fornecida por nós.
A nossa obrigação neste ponto consistem em convencer os utilizadores que, a segurança informática é algo que os pode afectar profundamente. É claro que esta é uma tarefa inglória. Para mitigar os efeitos, se for exequível, deveremos instalar o certificado da nossa CA em todos os browsers da companhia. Por exemplo para o Firefox isto faz-se da seguinte forma:
Dialogo para adicionar um novo certificado
Detalhes do certificado da CA
Importar o certificado da CA
Agora a nossa CA é reconhecida pelo browser, verificando este, automaticamente, a validade do certificado do site. Se existirem dúvidas podemos sempre aceder à informação da página e verificar os certificados aceites e as respectivas impressões digitais.
Como conclusão, quero apenas reforçar a ideia que ao termos um site seguro, não estamos automaticamente imunes a ataques e quebras de segurança. A encriptação da comunicação com o site é apenas mais uma camada do esquema de segurança que devemos ter montado. Assim a mera utilização do site seguro não nos deve deixar muito mais tranquilos. As aplicações que correrem no site poderão continuar a ter vulnerabilidades, o que implica que temos de estar a tentos a todos os updates de segurança, como é normal. Devem continuar-se a fazer auditorias da actividade do sistema, a integridade física dos servidores deve continuar a ser assegurada, etc, etc...