Feature #5341 » net.http.rb.ssl_session_reuse.patch
lib/net/http.rb (working copy) | ||
---|---|---|
@debug_output = nil
|
||
@use_ssl = false
|
||
@ssl_context = nil
|
||
@ssl_session = nil
|
||
@enable_post_connection_check = true
|
||
@compression = nil
|
||
@sspi_enabled = false
|
||
... | ... | |
ssl_parameters[name] = value
|
||
end
|
||
end
|
||
@ssl_context = OpenSSL::SSL::SSLContext.new
|
||
@ssl_context.set_params(ssl_parameters)
|
||
unless @ssl_context then
|
||
@ssl_context = OpenSSL::SSL::SSLContext.new
|
||
@ssl_context.set_params(ssl_parameters)
|
||
end
|
||
s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context)
|
||
s.session = @ssl_session if @ssl_session
|
||
s.sync_close = true
|
||
end
|
||
@socket = BufferedIO.new(s)
|
||
... | ... | |
if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
|
||
s.post_connection_check(@address)
|
||
end
|
||
@ssl_session = s.session
|
||
rescue => exception
|
||
D "Conn close because of connect error #{exception}"
|
||
@socket.close if @socket and not @socket.closed?
|
test/net/http/test_https.rb (working copy) | ||
---|---|---|
skip $!
|
||
end
|
||
def test_session_reuse
|
||
http = Net::HTTP.new("localhost", config("port"))
|
||
http.use_ssl = true
|
||
http.verify_callback = Proc.new do |preverify_ok, store_ctx|
|
||
store_ctx.current_cert.to_der == config('ssl_certificate').to_der
|
||
end
|
||
http.start
|
||
http.get("/")
|
||
http.finish
|
||
http.start
|
||
http.get("/")
|
||
http.finish # three times due to possible bug in OpenSSL 0.9.8
|
||
http.start
|
||
http.get("/")
|
||
socket = http.instance_variable_get(:@socket).io
|
||
assert socket.session_reused?
|
||
end
|
||
if ENV["RUBY_OPENSSL_TEST_ALL"]
|
||
def test_verify
|
||
http = Net::HTTP.new("ssl.netlab.jp", 443)
|