使用SSL、Puma和Rails进行Ubuntu开发配置

3

目标: 在开发模式中使 SSL 正常工作(在 Heroku 上的生产环境中,SSL 工作正常)

我的设置: Ubuntu 16.04, Rails 5.0.1, Puma 3.6.2。

config/environments/development.rb

config.force_ssl = true 

我尝试跟随这篇Puma SSL教程:https://gist.github.com/tadast/9932075(我不确定在这里粘贴链接内容和引用它的GitHub协议是什么)。
如果我使用命令行方法运行Puma。
puma -b 'ssl://127.0.0.1:3000?key=/home/sean/.ssh/server.key&cert=/home/sean/.ssh/server.crt'

当我尝试在浏览器中访问时,由于尝试添加证书到Ubuntu后,Chrome会显示“不安全”的错误。
sudo cp server.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

Updating certificates in /etc/ssl/certs... 
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

我应该在这里看到1吗?我还尝试将server.crt复制到/etc/ssl/certs

如果我在chrome阻止之后继续操作,我会收到控制台错误:

SSL error, peer: 127.0.0.1, peer cert: , #<Puma::MiniSSL::SSLError: OpenSSL error: error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request - 336027804>

我没有在命令行使用puma,而是尝试将其添加到config/initializers/puma.rb中。

bind 'ssl://127.0.0.1:3000?key=/home/sean/.ssh/server.key&cert=/home/sean/.ssh/server.crt'

启动命令为"rails s",但没有页面加载,控制台输出如下:

HTTP parse error, malformed request (): # 2017-01-23 10:04:43 -0500: ENV: {"rack.version"=>[1, 3], "rack.errors"=>#>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "SCRIPT_NAME"=>"", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"puma 3.6.2 Sleepy Sunday Serenity", "GATEWAY_INTERFACE"=>"CGI/1.2"}

我还尝试将puma降级到3.5.2版本,但问题依旧。

请问我哪里出错了?


你在使用Vagrant吗? - Blackcoat77
不,我没有使用Vagrant。 - Sean Kelley
1个回答

1
我通过在Apache服务器中启用mod_ssl并添加一些配置使其监听443端口来解决了这个问题。您也可以使用Nginx在Puma前面与套接字通信。还有一种方法可以通过安装Puma-dev来解决此问题,该方法会自动通过SSL使应用程序可用。我将描述我所做的方式,它可能会帮助您/其他人:
首先,我创建了自签名证书,然后为我的项目创建了新的虚拟主机,例如:site1.local。然后我启用了mod_ssldefault-ssl.conf。我在我的虚拟主机中添加了端口443和前向保密等内容:
<VirtualHost *:443>
    ServerName site1.local
    SSLEngine on
    SSLCertificateFile "/home/user/.ssh/server.crt"
    SSLCertificateKeyFile "/home/user/.ssh/server.key"
    DocumentRoot /var/www/site1.local/public

    SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2
    SSLHonorCipherOrder On
    SSLCipherSuite EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!MEDIUM:!SEED:!3DES:!CAMELLIA:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4
</VirtualHost>

当我重新启动Apache服务器时,仍然收到谷歌浏览器的不安全网站警告。我需要在chrome中手动添加根证书:chrome://settings/certificates,然后选择菜单选项卡Authoritiesimport button。在导入server.crt文件之前,我勾选了所有3个复选框。导入完成后,我重新启动了谷歌浏览器,然后在chrome的搜索栏中获得了绿色的https锁。

一些参考资料:

https://leehblue.com/add-self-signed-ssl-google-chrome-ubuntu-16-04/

让Chrome接受自签名的本地主机证书

https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04

https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-puma-and-nginx-on-ubuntu-14-04

我希望它能帮到你


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接