我只找到了如何使用 SSL 启动 Puma:
$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'
然而,文档中没有关于如何包含中间 CA 证书的描述。有人能指点我吗?我正在使用 Puma 1.6.3
谢谢!
我只找到了如何使用 SSL 启动 Puma:
$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'
然而,文档中没有关于如何包含中间 CA 证书的描述。有人能指点我吗?我正在使用 Puma 1.6.3
谢谢!
仅当您使用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
可能有些晚,但我有另一个解决方案,你可以查看我的文章了解更多细节。
首先使用mkcert为本地主机创建证书。
mkcert localhost
如果您想要在HTTPS上使用另一个域名,只需将localhost替换为您想要的域名,例如mkcert mylocalhost-with-a-cool-domain.com
之后,在config
文件夹下创建一个local-certs
文件夹,并将证书和密钥粘贴到其中。
现在,您应该将这些证书标记为可信任的。我使用的是Mac计算机,不确定如何在Windows或Linux发行版上处理此特定部分。请查看帖子,其中有屏幕截图。简而言之,您需要将使用mkcert
创建的证书拖到Keychain Access中。
然后,在您的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
如果有任何问题,请告诉我。希望能帮助到未来的读者!
localhost
替换为您喜欢的任何内容即可。在我的工作中,我们有几个服务,例如:api.myjob.com
、client.myjob.com
、another_name.myjob.com
。如果您也是这种情况,您可以直接运行 mkcert *.myjob.com
并使用该证书。 - MatayoshiMarianomkcert“*.myjob.com myjob.com”
。请注意通配符版本周围的引号。--更新我的评论意图,但已过5分钟-.- - swiknabaif ENV['RAILS_ENV'] == 'development'
。 - Ccastillop我们同时使用Nginx+PhusionPassenger组合。在nginx中,你无法指定链式证书文件。诀窍是将所有证书捆绑在一个证书中,然后将新的证书文件设置为服务器配置中的证书。你可以在nginx文档中查找更多信息。请检查SSL证书链部分。
cat www.example.com.crt bundle.crt > www.example.com.chained.crt
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
。
使用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;
}
force_ssl
和ACME挑战。 - Mark Boulder