目标: 让ssl在开发模式下工作(ssl在heroku上的生产工作正常)
我的设置: Ubuntu 16.04 Rails 5.0.1 Puma 3.6.2
配置/环境/ development.rb
config.force_ssl = true
我尝试跟随这个美洲狮ssl如何: https://gist.github.com/tadast/9932075 (我不确定github procol在这里粘贴上面的链接内容与引用它有什么关系)
如果我然后使用命令行方法运行puma
puma -b 'ssl://127.0.0.1:3000?key=/home/sean/.ssh/server.key&cert=/home/sean/.ssh/server.crt'
我正在使用Chrome' Not Secure'尝试将证书添加到ubuntu后尝试通过浏览器访问时出错。
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 block,我会收到控制台错误:
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解析错误,格式错误的请求():# 2017-01-23 10:04:43 -0500:ENV:{&#34; rack.version&#34; =&gt; [1,3],&#34; rack.errors&#34; =&gt;#&gt; ;,&#34; rack.multithread&#34; =&gt; true,&#34; rack.multiprocess&#34; =&gt; false,&#34; rack.run_once&#34; =&gt; false,&#34 ; SCRIPT_NAME&#34; =&gt;&#34;&#34;,&#34; QUERY_STRING&#34; =&gt;&#34;&#34;,&#34; SERVER_PROTOCOL&#34; =&gt;&# 34; HTTP / 1.1&#34;,&#34; SERVER_SOFTWARE&#34; =&gt;&#34;美洲狮3.6.2困了星期天宁静&#34;,&#34; GATEWAY_INTERFACE&#34; =&gt;&#34 ; CGI / 1.2&#34;}
我也尝试将美洲狮降级为3.5.2
我哪里错了?
答案 0 :(得分:1)
我通过在Apache服务器中启用mod_ssl
并为Apache添加一些配置来侦听443端口来解决这个问题。您也可以在Puma前面使用Nginx与套接字进行通信。还有一种方法可以通过安装Puma-dev来解决此问题,https://leehblue.com/add-self-signed-ssl-google-chrome-ubuntu-16-04/会自动通过SSL提供应用程序。我会描述我做的方式,它可以帮助你/某人:
我首先制作了自签名证书,然后为我的项目创建了新的虚拟主机,例如:site1.local
。然后我启用了mod_ssl
和default-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
,然后是菜单标签授权和导入按钮。在导入 server.crt 文件之前,我检查了所有3个复选框。完成导入后,我重新启动了谷歌浏览器,并在chrome的搜索栏中获得了绿色的https锁定。
一些参考:
Getting Chrome to accept self-signed localhost certificate
我希望它有所帮助