17

我只找到了如何使用 SSL 启动 puma

$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'

但是,没有关于如何在文档中包含中间 CA 证书的描述。有人能指出我正确的方向吗?我正在使用彪马1.6.3

谢谢!

4

5 回答 5

21

仅当您使用 nginx 时,将证书和捆绑包结合起来才有效。

没有 nginx,你可以使用caverify_mode选项:

rails s puma -b 'ssl://0.0.0.0:9292?key=path_to_key.key&cert=path_to_cert.crt&verify_mode=none&ca=path_to_root_bundle.crt'

来源:https ://github.com/puma/puma/blob/master/lib/puma/binder.rb

于 2015-08-11T10:21:35.790 回答
5

派对迟到了,但我有另一个解决方案,你可以查看我的帖子了解更多详细信息。

首先使用mkcert为您的本地主机创建证书

mkcert localhost

如果您想让另一个域在 HTTPS 上工作,只需将 localhost 替换为您想要的域,例如mkcert mylocalhost-with-a-cool-domain.com

在此之后,我在该local-certs文件夹下创建了一个文件config夹并将证书和密钥粘贴到那里。

现在您应该将这些证书标记为受信任,我正在使用 Mac 计算机,所以不确定如何在 Windows 或 Linux 发行版上处理这个特定部分。看帖子,有截图。在简历中,您需要将创建的证书拖到mkcert钥匙串访问中。

然后在你的 puma 配置文件中,创建一个如果你没有它并命名它puma.rb,你应该有类似的东西

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['THREAD_COUNT'] || 5)
threads threads_count, threads_count

rackup      DefaultRackup
port        3001
environment ENV['RACK_ENV'] || 'production'

if ENV['RACK_ENV'] == 'development'

  # If you didn't place the cert and key under `local-certs` you should change this
  localhost_key = "#{File.join('config', 'local-certs', 'localhost-key.pem')}" 
  localhost_crt = "#{File.join('config', 'local-certs', 'localhost.pem')}"

  ssl_bind '0.0.0.0', 3000, {
    key: localhost_key,
    cert: localhost_crt,
    verify_mode: 'none'
  }
end

然后运行bundle exec puma -C puma.rbbundle exec rails s应该这样做:D

如果有人有问题,请告诉我。希望对以后的读者有所帮助!

于 2020-04-08T15:37:14.920 回答
3

而我们也在使用 Nginx+PhusionPassenger 组合。您也不能在 nginx 中指定链证书文件。诀窍是将所有证书捆绑在一个证书中,然后将新证书文件设置为服务器配置中的证书。您将在nginx 文档中找到更多信息。检查 SLL 证书链部分。

cat www.example.com.crt bundle.crt > www.example.com.chained.crt

希望它有所帮助。

于 2013-05-16T10:12:33.880 回答
2

rails s puma -b 'ssl://0.0.0.0:9292?key=certkey.key&cert=cert.crt&verify_mode=peer&ca=root_bundle.crt

只要确保你设置了verify_mode=peer.

于 2016-08-08T15:49:19.553 回答
-9

使用Phusion Passenger + Nginx 来支持 SSL可能是一个更好的主意。这个组合具有广泛可用的文档,并且非常容易设置,因为它是目前最受欢迎的应用服务器选择,并被纽约时报、赛门铁克、AirBnB 等公司使用。如果你有 Nginx 和 Phusion Passenger 的话,你可以这样做安装:

server {
    listen 443;
    server_name yourapp.local;
    ssl on;
    ssl_certificate ...;
    ssl_key ...;
    root /path-to-your-app/public;
    passenger_enabled on;
}
于 2013-05-06T09:24:29.097 回答