Tag: ssl

在ruby中保护Websocket客户端

如何使用Ruby中的Faye-websocket建立安全(TLS)websocket客户端连接? 我在我的脚本中使用faye / websocket gem。 require ‘faye/websocket’ require ‘eventmachine’ EM.run { ws = Faye::WebSocket::Client.new(‘wss://aws.com/gateway’,:ssl => { :private_key_file => ‘path/to/ssl.key’, :cert_chain_file => ‘path/to/ssl.crt’ }, :headers => { ‘Authorization’ => ‘Basic bXl1c2VyOm15cGFzc3dvcmQ=’}) ws.on :open do |event| p [:open] ws.send(‘Hello, world!’) end ws.on :message do |event| p [:message, event.data] end ws.on :close do |event| p [:close, event.code, event.reason] […]

用于双向ssl身份validation的Ruby客户端

我有java web服务支持2路ssl auth 。 所以我在可信商店中拥有服务器证书的客户端密钥存储区( client.p12 )和在受信任存储区中具有客户端证书的服务器密钥存储区。 我可以使用浏览器或邮递员轻松调用我的服务(只需要在浏览器证书管理中导入client.p12 )但我遇到了ruby客户端的问题。 我目前的版本: require ‘rest_client’ p12 = OpenSSL::PKCS12.new(File.read(‘client.p12’), ‘password’) client = RestClient::Resource.new(‘https://localhost:8080/service’, :ssl_client_cert => p12.certificate, :ssl_cert_key => p12.key, :verify_ssl => OpenSSL::SSL::VERIFY_NONE, :ssl_version => ‘TLSv1_2’, :ssl_ciphers => ‘ECDHE-RSA-AES128-GCM-SHA256′).get 失败了: connect_nonblock’: SSL_connect SYSCALL returned=5 errno=0 state=unknown state (OpenSSL::SSL::SSLError) 我的客户端代码有什么问题? openssl s_client输出: $ openssl s_client -connect localhost:8080 …. SSL-Session: Protocol : […]

如何在Ruby中使用PKI(公钥/私钥)加密?

我想加密一个字符串,以便最终用户可以validation它是否由我加密,但是他们不能自己加密它。 例如,我有一个私钥’private’,一个公钥’public’,一个消息’hello world’,并希望做类似的事情: private_key = ‘private’ public_key = ‘public’ message = ‘hello world’ encrypted_value = Crypto.encrypt(message, private_key) # encrypted_value is now ‘d92a01df241a3’ is_verified = Crypto.verify(message, public_key) # given just the public key and the message, is_verified will # be able to tell whether it’s accurate # note that the encrypted_value cannot be generated by just […]

Mechanize的SSL错误

我在irb上得到了这些命令 require ‘mechanize’ agent = Mechanize.new agent.get(‘https://monabo.lemonde.fr/customer/account/forgotpassword/’) 我收到了这个错误: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=unknown state: sslv3 alert handshake failure 我试过Mac,它的工作原理我没有这个错误。 但是,它在我的计算机上不起作用(运行Linux Mint 17)。 我尝试了什么: 导出此变量: export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt 设置此变量: agent.agent.http.ca_file = ‘/etc/ssl/certs/ca-certificates.crt’ 设置这个: OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 更改ruby版本(我目前正在使用ruby 2.1.5p275) 这些解决方案都没有改变这个问题。 我怀疑服务器需要一个特定的OpenSSL版本。 请注意,我可以通过mechanize请求https://google.com并确保其有效,但不是https://monabo.lemonde.fr/customer/account/forgotpassword/ 。 它在mac上工作的事实可能会假设我的配置错误。 编辑:这是此命令的输出: ➜ swiff git:(master) ✗ openssl s_client -connect monabo.lemonde.fr/customer/account/forgotpassword:443 -tls1 -servername monabo.lemonde.fr/customer/account/forgotpassword | openssl […]

如何使用Rack map在不同的端口上运行两个Thin(或其他)服务器?

我的目标是通过Rack进行HTTP和HTTPS / SSL的自动化测试,无需借助代理服务器设置或类似的东西。 我有一个我想要测试的gem,我希望其他人能够进行测试,所以我希望它尽可能地自我控制。 App的代码在自己运行时运行正常,所以它不包含在这里,问题在于Rack部分。 我想做这样的事情: app = Rack::Builder.app do map “/” do Rack::Handler::WEBrick.run App, Port: 3000 end map “/ssl” do Rack::Handler::WEBrick.run App, Port: 3001 # more options for SSL here… end end run app 我已经尝试了上面代码的几种组合,例如: http = Rack::Builder.app do map “/” do run App end end https = Rack::Builder.app do map “/ssl” do run […]

RestClient.get返回证书validation失败

我正在使用RestClient和Ruby v.2.2.1尝试使用内部测试API服务器。 这基本上是代码: url = “https://10.10.0.10/thing/i/want/to/get” header = { :content_type => “application/json”, :”x-auth-token” => “testingtoken” } response = RestClient.get url, header 这是我收到的失败消息: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (RestClient::SSLCertificateNotVerified) 如果我正确阅读,看起来Ruby无法接受SSL安全证书。 此调用适用于Chrome应用Postman,但为了使其正常工作,我必须点击Chrome中的url并接受连接不安全(但仍然继续),然后它将在邮递员中工作。 有没有办法忽略证书失败并继续在Ruby中继续?

如何针对某些路径在Rails 4中有选择地启用SSL?

如何为给定路径关闭SSL HTTPS? 我看到为某些资源操作启用SSL,但这是为单个路径启用HTTPS。 我的配置有 config.force_ssl = true 但是,当我显示一个包含iframe的页面并嵌入外部源时 <iframe src='http://www. 然后它甚至没有出现(Chrome),因为它是混合内容。 所以我想为具有iframe的单一路由禁用SSL。 (我真的想根据内容打开和关闭它。) 我尝试将其添加到我的routes.rb get ‘frame’, :constraints => { :protocol => ‘http’ } 但是这给出了一个错误http://127.0.0.1:3000/posts/136/frame No route matches [GET] “/posts/136/frame” 即使路线出现了 frame_post GET /posts/:id/frame(.:format) posts#frame {:protocol=>”http”} 我还看到了Rails 3.1中特定路由的强制SSL并尝试过 gem ‘rack-ssl-enforcer’ # Gemfile config.middleware.use Rack::SslEnforcer, :except => [ /\/frame$/ ], :strict => true # application.rb 但它仍然总是重定向到https。 我也试过了 […]

在Mac OS上安装Rails失败,出现多个错误

我正在尝试在我的Mac OS v10.10.4系统上安装Rails,当我运行brew install rbenv ruby-build时它失败了。 错误是: Error: Permission denied – /usr/local/etc/openssl Warning: Bottle installation failed: building from source. 在过程结束时它说: installing man3/d2i_SSL_SESSION.3ssl i2d_SSL_SESSION.3ssl => d2i_SSL_SESSION.3ssl installing man3/ssl.3ssl Cannot create directory /usr/local/etc/openssl: Permission denied 以下是我在此尝试期间尝试的所有内容的完整日志: Mac-213978b7b1793718b9:ROR developer$ brew install rbenv ruby-build Warning: rbenv-0.4.0 already installed ==> Installing ruby-build dependency: openssl ==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2d_1.yosemite.bottle.tar.gz ######################################################################## 100.0% ==> […]

使用Ruby实现HTTPS证书/ pubkey固定

我有自己的HTTPS服务,我正在与另一个Ruby应用程序交谈。 我想在我的app repo中的已知时间点保存它的公钥证书,并将服务发送给我的公钥与存储的副本进行比较。 要在外部服务器上安装证书,我可能需要将其转换为某种格式,因此服务器发送的文件不会相同。 我想对那个特定的公钥进行各种修改。 我需要使用OpenSSL比较哪些证书字段来validation从服务收到的PK是否与从服务器收到的PK相同? 我想CN和签名必须至少匹配。 还有什么需要检查才能知道我所拥有的公共证书与我收到的证书完全一致(即证书是否相同)? 也许OSSL有一个内置的设施吗?

在Rails 3.1中强制SSL用于特定路由

我需要在我的应用程序中的所有路由上强制使用SSL,除了landing#index 。 在config/application.rb ,我有: config.force_ssl = true 然后在landing_controller.rb ,我有: force_ssl :except => :index 但是,所有路由仍然被重定向到https 。 有谁知道如何在Rails 3.1+应用程序中有条件地强制SSL? 解: 将以下内容添加到Gemfile : gem ‘rack-ssl-enforcer’ 将以下内容添加到config/application.rb : config.middleware.use Rack::SslEnforcer, :except => [ /\/$/ ], :strict => true