diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-07-07 17:09:39 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-07-07 17:09:39 +0000 |
commit | 08bdbef5cabeb1a8b84b9ddf7a3137289620d46b (patch) | |
tree | 08d3fde5ac95f98c6caafcf4e6479b367eec72d3 /lib/webrick/https.rb | |
parent | 4d3d6f68989d5941f6ca30eb3911cf2a5211bb03 (diff) | |
download | ruby-08bdbef5cabeb1a8b84b9ddf7a3137289620d46b.tar.gz |
webrick: add Server Name Indication (SNI)
* lib/webrick/https.rb: servername_cb implementation.
* lib/webrick/ssl.rb: abstract servername_cb.
* test/webrick/test_https.rb: test.
[ruby-dev:50165] [Feature #13729]
Author: Tietew <tietew@gmail.com>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59281 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/webrick/https.rb')
-rw-r--r-- | lib/webrick/https.rb | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/webrick/https.rb b/lib/webrick/https.rb index 73875d7326..1494973e74 100644 --- a/lib/webrick/https.rb +++ b/lib/webrick/https.rb @@ -10,6 +10,7 @@ # $IPR: https.rb,v 1.15 2003/07/22 19:20:42 gotoyuzo Exp $ require 'webrick/ssl' +require 'webrick/httpserver' module WEBrick module Config @@ -84,4 +85,51 @@ module WEBrick # :startdoc: end + + ## + #-- + # Fake WEBrick::HTTPRequest for lookup_server + + class SNIRequest + + ## + # The SNI hostname + + attr_reader :host + + ## + # The socket address of the server + + attr_reader :addr + + ## + # The port this request is for + + attr_reader :port + + ## + # Creates a new SNIRequest. + + def initialize(sslsocket, hostname) + @host = hostname + @addr = sslsocket.addr + @port = @addr[1] + end + end + + + ## + #-- + # Adds SSL functionality to WEBrick::HTTPServer + + class HTTPServer < ::WEBrick::GenericServer + ## + # ServerNameIndication callback + + def ssl_servername_callback(sslsocket, hostname = nil) + req = SNIRequest.new(sslsocket, hostname) + server = lookup_server(req) + server ? server.ssl_context : nil + end + end end |