JP.*_*JP. 1 ruby ssl amazon-ec2 sinatra amazon-web-services
好吧,我决定确保在构建 api 之前我可以让这个 ssl 东西正常工作..我感觉已经完成了 95%。
\n\n所以,我有来自 namecheap 的证书和密钥。那里一切都应该很好。
\n\n这是我的 app.rb
\n\nrequire \'sinatra/base\'\nrequire \'webrick\'\nrequire \'webrick/https\'\nrequire \'openssl\'\n\nclass MyServer < Sinatra::Base\n set :bind, \'0.0.0.0\'\n\n get \'/\' do\n "Hello, world!\\n"\n end\nend\n\nCERT_PATH = \'./ssl\'\n\nwebrick_options = {\n :Port => 443,\n :Logger => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG),\n :DocumentRoot => "/ruby/htdocs",\n :SSLEnable => true,\n :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,\n :SSLCertificate => OpenSSL::X509::Certificate.new( File.open(File.join(CERT_PATH, "server.crt")).read),\n :SSLPrivateKey => OpenSSL::PKey::RSA.new( File.open(File.join(CERT_PATH, "server.key")).read),\n :SSLCertName => [ [ "CN",WEBrick::Utils::getservername ] ],\n :app => MyServer\n}\nRack::Server.start webrick_options\n
Run Code Online (Sandbox Code Playgroud)\n\n我运行程序
\n\nsudo ruby app.rb\n
Run Code Online (Sandbox Code Playgroud)\n\n有趣的是,在 localhost 上(从我的 macbook pro 进行测试,运行 El Capitan),我可以访问https://localhost,它只是说证书不受信任,并询问我是否想进去。伟大的。
\n\n但是,我现在可以通过域名访问我的 ec2 实例,当然域名与证书匹配。但该网站仅返回 ERR_CONNECTION_REFUSED (这就是 Chrome 中显示的内容)
\n\n当然,这显示了我是否运行 sinatra 服务器。
\n\n好吧,听起来很简单。安全组吧?
\n\n嗯,根据 ec2,我使用的安全组在入站时启用了 tpc 端口 443。(HTTPS)
\n\n那么,什么给出呢?我什么地方做得不对?为什么它在 localhost 上执行了我期望的操作,但在 ec2 实例上却执行不了?
\n\n任何帮助将不胜感激。
\n\n其他信息:
\n\n服务器似乎正在运行。sudo ruby app.rb 为我提供了有关我的证书的有效信息,然后是
\n\n[2016-01-22 03:36:52] DEBUG WEBrick::HTTPServlet::FileHandler 安装在 /.\n[2016-01-22 03:36:52] DEBUG Rack::Handler::WEBrick 安装在/.\n[2016-01-22 03:36:52] 信息 WEBrick::HTTPServer#start: pid=2499 端口=443
如果我删除 webrick 并将端口更改为 80,则一切正常。我可以从我的网站域访问这个应用程序,当然是通过 http(不是 https)。
从本地计算机,我收到响应。
$ wget https://localhost
\n\n--2016-01-22 04:11:48-- https://localhost/ \nResolving localhost (localhost)... 127.0.0.1 \nConnecting to localhost (localhost)|127.0.0.1|:443... connected. \nERROR: cannot verify localhost\'s certificate, issued by \xe2\x80\x98/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA\xe2\x80\x99: \nUnable to locally verify the issuer\'s authority. \nERROR: no certificate subject alternative name matches requested host name \xe2\x80\x98localhost\xe2\x80\x99. \nTo connect to localhost insecurely, use `--no-check-certificate\'.\n
Run Code Online (Sandbox Code Playgroud)\n\n这似乎是正确的!所以,这似乎确实与服务器设置有关。我无法连接到它。=/ 再次。安全组允许443和80。
\n\n自从我最初提出问题以来添加了一些内容,但仍然没有解决问题:
\n\n一般来说,您不希望任何 Ruby Web 服务器实际处理 SSL。您让它们提供纯 HTTP(只能通过本地主机访问)。然后安装一个反向代理来处理所有 SSL 通信。
例如
一个非常简单的 nginx 配置可以帮助您入门:
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/your.key;
ssl on;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
server {
listen 443 ssl;
server_name you.example.com;
location / {
proxy_pass http://localhost:8080; # your ruby appserver
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1650 次 |
最近记录: |