3

プロジェクトの場合、顧客のリモートAPIにアクセスできるように、Socks5プロキシを介してHTTPS呼び出しを行う必要があります。私が使用している元のコードは次のとおりです。

url = "/proxyValidate?service=#{migration_station_verification_url}&ticket=#{service_ticket}"

if Rails.env == 'development'
  uri = URI.parse(soe_cas_url + url)
  Net::HTTP.SOCKSProxy('127.0.0.1', 1080).start(uri.host, uri.port) do |http|
    res = http.get(uri.path)
    doc = Nokogiri::XML(res)
    doc.remove_namespaces!
    doc.xpath('//sessionId').first.content
  end
else
  http = Net::HTTP.new(soe_cas_url)
  http.use_ssl = true
  req = Net::HTTP::Get.new(url)
  res = http.request(req)
  doc = Nokogiri::XML(res)
  doc.remove_namespaces!
  doc.xpath('//sessionId').first.content
end

目標は、開発環境でのみプロキシを使用することです。プロキシを使用して電話をかけると、次のエラーが発生します。

間違ったステータス行: "<!DOCTYPE

これをグーグルで検索すると、 use_sslフラグをtrueに設定する必要があることがわかります。これは、開発サイクルの外部で機能します。socksifyを使用する場合、そのようなメカニズムはありません。これをdoブロック内で呼び出すと、セッションがすでに開始されているというエラーが表示されます。ブロックの外で呼び出すと、そのような関数が存在しないという例外が返されます。

socksifyプロキシを介してSSL/HTTPSを実行する方法を教えてもらえますか?

編集:

私は現在、次のコードを使用して、必要なものを取得するために純粋なソケットで遊んでいます。

  socket = Socket::TCPSocket.open('127.0.0.1', 1080)

  ssl_context = OpenSSL::SSL::SSLContext.new
  ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
  ssl_context.ca_file = File.join(Rails.root, 'ssl', 'cacert.pem')

  ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
  ssl_socket.sync_close = true
  ssl_socket.connect

  request = "GET #{url} HTTP/1.1\r\nAccept: */*\r\nHost: #{soe_cas_url}"
  ssl_socket.puts(request)
  ssl_socket.puts("")

  response = ""
  while (line = ssl_socket.gets)
    response << line
  end

ただし、これはssl_socket.connectで失敗し、次のエラーが発生します。

ssl_connect syscallreturned = 5 errno = 0 state = sslv2 / v3 read server hello a

自己署名証明書を使用してみましたが、証明書などはありませんが、何も機能しないようです。エンドポイントがステージング環境の自己署名証明書に依存していることを私は知っています。

4

0 に答える 0