def post_connection_check(hostname)
check_common_name = true
cert = @socket.io.peer_cert
cert.extensions.each { |ext|
next if ext.oid != "subjectAltName"
ext.value.split(%r,\s+/).each{ |general_name|
if %r\ADNS:(.*)/ =~ general_name
check_common_name = false
reg = Regexp.escape($1).gsub(%r\\\*/, "[^.]+")
return true if %r\A#{reg}\z/ =~ hostname
elsif %r\AIP Address:(.*)/ =~ general_name
check_common_name = false
return true if $1 == hostname
end
}
}
if check_common_name
cert.subject.to_a.each{ |oid, value|
if oid == "CN"
reg = Regexp.escape(value).gsub(%r\\\*/, "[^.]+")
return true if %r\A#{reg}\z/ =~ hostname
end
}
end
raise OpenSSL::SSL::SSLError, "hostname does not match"
end