Como você configura o SSL no Ubuntu com Apache2 e Ruby on Rails?

1

Quais são as etapas necessárias para configurar o SSL em um aplicativo Ruby on Rails hospedado no Apache2 / Ubuntu?

    
por Adam Brand 29.08.2009 / 21:09

1 resposta

7

NOTA: eu mudei isso de um post anterior de "wiki da comunidade".

No outro dia, alguns dos nossos desenvolvedores do Rails me pediram para ativar o SSL em um aplicativo.

Existem muitas fontes no Google para configurar o SSL com o Ubuntu e o Apache, e algumas no Rails, e algumas com o Ubuntu / Apache / Rails, mas não consegui encontrar uma que eu ache que fosse direta e abrangente.

Então, depois de gastar um pouco de tempo para descobrir a combinação exata das etapas necessárias para fazer o SSL funcionar nessa configuração popular, decidi fazer uma entrada do ServerFault sobre como fazer o SSL entrar no seu aplicativo Rails no Apache2 / Ubuntu. / p>

Sinta-se à vontade para editar / adicionar / comentar com base nas suas experiências!

Neste caso, estamos supondo que você esteja obtendo um certificado do GoDaddy (não um certificado autoassinado), mas você pode obter seu certificado de qualquer autoridade de certificação e as etapas devem ser as mesmas.

Usarei www.seudominio.com como o domínio de exemplo que queremos proteger.

Configure o seu diretório de certificados

Existem quatro arquivos relacionados a criptografia para SSL que precisam de uma casa: 1) o CSR (você envia para o GoDaddy), 2) a chave privada (que você mantém), 3) o certificado real enviado a você pelo GoDaddy, e 4) o certificado intermediário (o GoDaddy lhe enviará).

Se você tem Ubuntu, você provavelmente tem uma pasta / etc / apache2. Então crie uma pasta lá chamada ssl.

Crie sua chave particular

Você precisa de openssl para isso, então faça primeiro:

sudo apt-get install openssl

Então você realmente cria sua chave privada, assim:

sudo openssl genrsa -des3 -out www.yourdomain.com.key 1024

Ele pedirá uma senha. Você removerá isso mais tarde, mas, por enquanto, basta digitar algo que você vai lembrar. Essa chave será mantida localmente (não a envie para o GoDaddy).

Crie seu CSR

Este é o arquivo que você envia para o GoDaddy para obter seu certificado:

sudo openssl req -new -key www.yourdomain.com.key -out www.yourdomain.com.csr

Obtenha seu Cert e Cert Intermediate

Agora, você passa pelo processo da Godaddy (ou da sua autoridade de certificação) para obter seu certificado e seu certificado intermediário. Você enviará seu CSR para obtê-lo. Solte-os na sua pasta / etc / apache2 / ssl.

Remova a senha da sua chave particular

Esta etapa é opcional, mas se você não fizer isso, o Apache não será iniciado automaticamente na reinicialização (ele solicitará uma senha).

sudo mv www.yourdomain.com.key www.yourdomain.com.passkey

sudo openssl rsa -in www.yourdomain.com.passkey -out www.yourdomain.com.key

Defina permissões adequadas nos seus arquivos de chave

Você não quer que pessoas aleatórias roubem suas chaves. Neste ponto, se você fizer um ls -l na pasta / etc / apache2 / ssl, você verá que os arquivos são de propriedade de root. Agora só precisamos alterar as permissões para que somente o root possa lê-las:

sudo chmod 400 /etc/apache2/ssl/*

Prepare o Apache instalando os Mods

Sua instalação do Apache provavelmente não tem mod_ssl ou mod_headers instalados, então você precisará fazer:

sudo a2enmod ssl
sudo a2enmod headers

Ajustar o arquivo de configuração do site no Apache

Supondo que seu site já esteja operacional com http, você deve ter um arquivo de configuração já em / etc / apache2 / sites-available (como padrão). Edite esse arquivo para que pareça:

<VirtualHost *:443>
  ServerName  www.yourdomain.com
  ServerAlias www.yourdomain.com
  DocumentRoot /var/apps/yourapp/public

  SSLEngine On
  SSLCertificateFile    /etc/apache2/ssl/www.yourdomain.com.crt
  SSLCertificateKeyFile /etc/apache2/ssl/www.yourdomain.com.key
  SSLCertificateChainFile /etc/apache2/ssl/gd_bundle.crt

  #For RoR "Mongrel"
  RequestHeader set X-Forwarded-Proto "https"

  #Hack for IE
  SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
</VirtualHost>

... é claro que você precisará colocar seu domínio onde for aplicável e também colocar o nome dos seus arquivos de chave nele também.

Reinicie o Apache

Essas alterações não são efetivadas até que você reinicie o apache, assim:

sudo /etc/init.d/apache2 restart

Ajustar sua aplicação Rails

Agora, precisamos ajustar seu aplicativo de trilhos para que ele ofereça suporte a SSL. Edite seu /app/controllers/application_controller.rb e adicione isso na parte inferior:

  def ssl_required?
    true
  end

Se você quiser se interessar, adicione um código para retornar false se local_request ou RAILS_ENV == ‘test’ .

É isso! Espero que isso salve alguém mais alguma pesquisa na web!

    
por 29.08.2009 / 21:10