Como faço para obter uma solicitação HTTPS com o SSL Client Cert para trabalhar com o Ruby EventMachine?

StackOverflow https://stackoverflow.com/questions/4038636

Pergunta

Estou tentando acessar um serviço da Web HTTPS que usa a autenticação do SSL CERT usando o Ruby EventMachine, mas não estou fazendo com que funcione.

Eu escrevi o seguinte bloco de código simples para testá-lo de ponta a ponta:

require 'rubygems'
require 'em-http'

EventMachine.run do
  url = 'https://foobar.com/'
  ssl_opts = {:private_key_file => '/tmp/private.key',
    :cert_chain_file => '/tmp/ca.pem',
    :verify_peer => false}
  http = EventMachine::HttpRequest.new(url).get :ssl => ssl_opts

  http.callback do
    p http.response_header.status
    p http.response_header
    p http.response
    EventMachine.stop
  end

  http.errback do
    EventMachine.stop
    fail "Request failed"
  end
end

Executando as saídas acima <SSL_incomp> seguido pela mensagem RUNDTIME RUNDIME. Eu tentei correr com :verify_peer Defina como verdadeiro e falso e me dá o mesmo erro. Corrida EventMachine::HttpRequest#get sem o :ssl a opção faz o mesmo.

Eu também tentei enviar o pedido ao Gmail (https://mail.google.com) sem o :ssl Opção (ou seja, https simples sem cert) e que funciona, saída de código de status 200, cabeçalhos e corpo.

Eu tentei fazer o mesmo pedido para o serviço da web com o CURL e isso funciona:

curl --silent --cert /tmp/private.key --cacert /tmp/ca.pem https://foobar.com/

Estou pensando que estou usando a geme em-http-request ou o EventMachine incorretamente ou que os arquivos SSL estão em um formato que funciona com o CURL, mas não o EventMachine.

Alguém sabe como resolver o exemplo acima ou fornecer um exemplo semelhante usando o EventMachine diretamente seria muito apreciado!

Foi útil?

Solução

O arquivo passou para o Curl's --cert contém o certificado e a chave (a menos que você passe em um --key separadamente). Apenas use /tmp/private.key Como argumento para ambos :private_key_file e :cert_chain_file

Ver http://github.com/eventmachine/eventmachine/issues/#issue/115 Para obter mais detalhes sobre o problema e um patch que expõe o erro subjacente (em vez de apenas imprimir ssl_incomp).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top