如何使用 Puma 配置 Rails 以使用 SSL?

问题描述 投票:0回答:6

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


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

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

1.6.3

谢谢!

ruby-on-rails ssl puma
6个回答
25
投票

仅当您使用 nginx 时,组合证书和捆绑包才有效。

没有 nginx,您可以使用

ca
verify_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


9
投票

聚会有点晚了,但是,我有另一个解决方案,您可以查看我的帖子了解更多详细信息。

首先使用 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.rb
bundle exec rails s
应该可以做到:D

如果有人有疑问,请告诉我。希望它对未来的读者有所帮助!


3
投票

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

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

希望有帮助。


3
投票


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


0
投票

代码在这里:https://gist.github.com/ouaziz/cef138ca35d13d70a5d4971077fb0703

创建文件 ssl.sh ======>

#!/bin/sh

# See https://devcenter.heroku.com/articles/ssl-certificate-self for overview

ssl_dir='ssllocal'
mkdir -p $ssl_dir
openssl genrsa -des3 -passout pass:x -out $ssl_dir/server.pass.key 2048

# be sure to use *.lvh.me as the common name, allows us to hit admin.lvh.me, etc.
openssl rsa -passin pass:x -in $ssl_dir/server.pass.key -out $ssl_dir/server.key

rm $ssl_dir/server.pass.key
openssl req -new -key $ssl_dir/server.key -out $ssl_dir/server.csr
openssl x509 -req -days 365 -in $ssl_dir/server.csr -signkey $ssl_dir/server.key -out $ssl_dir/server.crt

#==== end of file

文档

使用此 ssl 运行 Rails

# mkdir ssllocal
# chmod a+x ssl.sh
# ./ssl.sh

# 运行

# rails s -b 'ssl://0.0.0.0:3000?key=ssllocal/server.key&cert=ssllocal/server.crt&verify_mode=none&ca=ssllocal/server.crt'

# 或

# ./bin/ssl

在 bn 中创建文件 ssl ======>

# bin/ssl
#!/usr/bin/env sh

if ! gem list foreman -i --silent; then
  echo "Installing foreman..."
  gem install foreman
fi

exec foreman start -f Procfilessl.dev "$@"
#==== end of file

-8
投票

使用 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;
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.