quarta-feira, 25 de maio de 2011

CA e Apache com SSL

Configuração de um servidor como CA e web SSL
Pretende-se com este trabalho configurar um servidor como Autoridade de Certificação (CA) e como servidor web com SSL.
O servidor usado é o ubuntu 10.04 (Lucid Lynx) server. O cliente pode ser qualquer um que permita a utlização de um browser com suporte para SSL. Neste trabalho foi usado o Mozilla Firefox a correr em ubuntu 11.04 (Natty Narwhal).
O servidor precisa que estejam instalados os pacotes openssl e apache2.
Vamos assumir que o servidor funciona no endereço www.redes.pt.
Para este trabalho foi criada uma entrada no ficheiro hosts tanto do servidor como do cliente, para que o endereço www.redes.pt apontasse para o ip do servidor.
Depois de cumpridos estes requisitos é necessário:

  1. Gerar autoridade de certificação
  2. Instalar a autoridade de certificação
    1. no cliente
    2. no servidor
  3. Criar um certificado para o servidor
  4. Configurar o site seguro usando o certificado gerado.

1. Gerar autoridade de certificação
Primeiro é necessário criar um par de chaves de encriptação. Vamos usar o algoritmo 3DES com 4096 bits.
openssl genrsa -des3 -out ca.key 4096
As chaves ficam armazenadas no ficheiro ca.key.
De seguida vamos usar essa chave para criar um certificado autoassinado, isto é, a própria entidade que requere o certificada é a entidade que o assina. O certificadao é do tipo X.509 com uma validade de 365 dias.
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
O certificado fica em ca.crt.
2. Instalar a autoridade de certificação
2.1. Cliente
É necessário enviar o ficheiro ca.crt (através de pen, e-mail, etc) para o cliente.
No Firefox ir a Editar » Preferências » Avançado » Ver certificados » Importar, e importar o certificado.
2.2. Servidor
Copiar o ficheiro ca.crt para /etc/ssl/certs e ca.key para /etc/ssl/private
3. Criar um certificado para o servidor
Primeiro é preciso criar um par de chaves para o servidor web. Vamos criar chaves 3DES com 2048 bits.
openssl genrsa -des3 -out www.redes.pt.key 2048
O nome do servidor foi usado como nome do ficheiro, mas tal não é obrigatório.
Vamos agora fazer um pedido para que a CA assine digitalmente a chave de encriptação.
openssl req -new -key www.redes.pt.key -out www.redes.pt.csr
O requerimento fica em www.redes.pt.csr
Agora a CA vai assinar o pedido, criando o certificado:
openssl x509 -req -days 365 -in www.redes.pt.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out www.redes.pt.crt
O certificado fica em www.redes.pt.crt.
O Common Name (CN) do certificado do servidor TEM de ser www.redes.pt.
Copiamos agora o ficheiro www.redes.pt.crt para /etc/ssl/certs e o ficheiro www.redes.pt.key para /etc/ssl/private
4. Configurar o site seguro usando o certificado
É preciso activar o módulo SSL no Apache, copiando os ficheiros ssl.conf e ssl.load de /etc/apache2/mods-available para /etc/apache2/mods-enabled.
Editamos o ficheiro /etc/apache2/mods-enabled/ssl.conf e criamos um virtualhost, dentro da secção IfModule.../IfModule.
Vamos criar o site www.redes.pt, alojado em /var/www/seguro.
O virtualhost deve conter pelo menos, as seguintes directivas:
VirtualHost exemplo.dominio.topo:443

DocumentRoot “/var/www/seguro”
ServerName www.redes.pt:443
ServerAdmin root@redes.pt
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
SSLEngine on
SSLCipherSuite
ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/certs/www.redes.pt.crt
SSLCertificateKeyFile /etc/ssl/private/www.redes.pt.key
/VirtualHost
Nota: faltam os sinais "maior" e "menor" nas tags VirtualHost, porque o Blogspot as retira automaticamente.
Outros comandos de interesse

openssl rsa -noout -text -in server.key
Mostra o conteúdo da chave server.key


openssl req -noout -text -in server.csr
Mostra o conteúdo do pedido de certificado server.csr


openssl x509 -noout -text -in ca.crt
Mostra o conteúdo do certificado ca.crt


openssl rsa -in server.key -out server-nopass.key
Retira a password da chave.

sábado, 21 de maio de 2011

Mail do Moodle através do GMail

Para evitar SPAM, muito serviços de e-mail não aceitam mensagens de servidores "desconhecidos".
Portanto, se temos um servidor com Moodle, quando tenta enviar as mensagens (fóruns, mensagens de registo, etc) estas mensagens são rejeitadas pelos servidores de mail do GMail, HotMail, etc.
Para ultrapassar isto, basta definir uma conta de GMail no Moodle, para poder enviar os e-mails através do GMail e não diretamente a partir do servidor.
As instruções seguintes servem para Moodle 1.9.x, versão 1.9.2 ou superior. É possível fazer o mesmo para versões anteriores ou posteriores, mas os passos são diferentes.

Passo 1

É conveniente actualizar o Moodle para a última versão estável do ramo 1.9.

Passo 2

Editar o ficheiro /lib/phpmailer/class.smtp.php e procurar a linha 83, ou como as linhas podem mudar ligeiramente, logo a seguir à linha

function Connect($host,$port=0,$tval=30) {

acrescentar:

$host = 'ssl://' . $host;

Gravar o ficheiro.

Passo 3

Convém agora criar uma conta de GMail para usar especificamente para enviar o e-mail do Moodle.
Na página de configuração do e-mail, em Administração » Servidor » Correio electrónico (http://endereço_do_servidor/admin/settings.php?section=mail) acrescentar os seguintes dados:
  • Servidores de SMTP: smtp.gmail.com:465
  • Nome de utilizador de SMTP: endereço da conta gmail, incluindo a parte @gmail.com
  • Senha de SMTP: a password da conta gmail usada.

Passo 4

Testar para verificar se o e-mail é enviado corretamente.
Notar que as mensagens dos fóruns são enviadas após um tempo de espera (tipicamente 30 minutos) e que normalmente os resumos dos fóruns só são enviados uma vez por dia (tipicamente às 17:00), por isso pode ser necessário esperar algum tempo (~ 24 h) para verificar se as mensagens são realmente enviadas.

Pagina de administração do Moodle não aparece

No Moodle 1.8 e 1.9 acontece um irritante bug, não sei porquê, mas a página de admin fica completamente em branco, sem nenhum conteúdo.
Não consegui descobrir o que causa isto, mas descobri como resolver.
Editar o ficheiro /enrol/internal/enrol.php e comentar as linhas da classe enrolment_plugin (a linha com a definição da classe e a linha com o } ).
E pronto, subitamente já aparece tudo.

terça-feira, 10 de maio de 2011

Windows XP como terminal server

Como usar um modesto Windows XP (SP3) e transformá-lo num servidor de terminais.
O Windows XP tem já instalado um Remote Desktop Server que está artificialmente limitado a servir apenas um utilizador de cada vez. Este patch permite retirar essa limitação e deixa o XP servir vários clientes em simultâneo.
Após instalar o patch é preciso verificar se:
  1. O Fast User Switch está ligado
  2. Os utilizadores pertencem ao grupo Remote Desktop Users
  3. Os utilizadores têm password definida
Para adicionar os utilizadores ao grupo Remote Desktop Users ir a Painel de Controle » Administration Tools » Computer management » Local users and groups » Users