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!