私はsslサポートを追加せずに正常に動作した単純なssl Webクライアントを作成しています。今、私はこのエラーメッセージを取得し、要求を取得するためにSSL機能を追加したこと:Ruby SSL_read:tlsv1警告プロトコルのバージョン
SSL_read:TLSv1の警告プロトコルバージョン
それについてグーグルでの後、私は、opensslのバージョンを確認するという結論に来たIそれがTLSv1.2をサポートしていることがわかります。私は明示的に強制的にtlsv1.2を強制するコンテキストを作成しましたが、それと同じエラーメッセージです。私のopensslのバージョン:
ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION' ===> OpenSSL 1.0.1f 6 Jan 2014
私のコード:
require 'socket'
require 'openssl'
puts "Please select:"
puts "get ==> to use GET method"
puts "post ==> to use POST method"
method = gets.chomp.downcase
case method
when "get"
print "Please enter the domain name to get the http: "
domain = "www." << gets.chomp
print "Now enter the page you want to get: "
page = gets.chomp
# opening socket
soc = TCPSocket.new domain, 443
ctx = OpenSSL::SSL::SSLContext.new
ctx.ssl_version = :TLSv1_2
ssl = OpenSSL::SSL::SSLSocket.new(soc, ctx)
ssl.sync_close = true
ssl.connect
soc.puts "GET #{page} HTTP/1.1\nHost: #{domain}\n\n\n"
while line = ssl.gets
puts line
end
when "post"
print "Please enter the domain name to post the http:"
domain = gets.chomp.downcase
print "Now enter the post form page:"
form_page = gets.chomp.downcase
puts "Please enter the parameters of POST and related values one at a time:"
puts "(\"done\" to end input)"
post_variable = []
while true
print "Parameter:"
parameter = gets.chomp.downcase
break if parameter == "done"
print "Value:"
value = gets.chomp.downcase
break if value == "done"
post_variable.push("#{parameter}=#{value}")
post_sentense = post_variable.join("&")
end
# opening socket
soc = TCPSocket.new domain, 80
soc.puts "POST #{form_page} HTTP/1.1\nHost: #{domain}\nContent-Length: #{post_sentense.length}\n\n\n#{post_variable}"
while line = soc.gets
puts line
end
else
puts "wrong input!!!"
end
私は、ドメイン名は、WWWなしで入力する必要があることを言及する必要があり、ページが正常に/index.html
です。 誰かがこれで私を助けることができますか?
これはクライアントが処理できないため、サーバーから送信されるアラートです。サーバー(つまり、外部から到達可能な場合はURL)に関する詳細情報がなくても、何が起きているのかを言うことは不可能です。 –
@grimfrog実際に私はこのコードgoogle.com yahoo.com https://msn.comをテストし、それらのすべてから同じメッセージを受け取りました – Farhad