我只找到了如何使用 SSL 启动 puma:
$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'
但是,没有关于如何在文档中包含中间 CA 证书的描述。有人能指出我正确的方向吗?我正在使用彪马1.6.3
谢谢!
我只找到了如何使用 SSL 启动 puma:
$ puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'
但是,没有关于如何在文档中包含中间 CA 证书的描述。有人能指出我正确的方向吗?我正在使用彪马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 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
如果有人有问题,请告诉我。希望对以后的读者有所帮助!
而我们也在使用 Nginx+PhusionPassenger 组合。您也不能在 nginx 中指定链证书文件。诀窍是将所有证书捆绑在一个证书中,然后将新证书文件设置为服务器配置中的证书。您将在nginx 文档中找到更多信息。检查 SLL 证书链部分。
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;
}