Я пытаюсь получить реализацию Ruby's Net::HTTP
для работы с SNI.Поддержка имени сервера в Net :: HTTP?
И mail.google.com, и gmail.com живут на одном IP-адресе, поэтому при подключении через SSL сервер Google должен знать, какой сертификат использовать. По умолчанию он возвращает сертификат mail.google.com, что является проблемой, если вы пытаетесь внедрить WebFinger.
WebFinger требует, чтобы вы получили https://gmail.com/.well-known/host-meta
, чтобы получить информацию LRDD, однако из соображений безопасности крайне важно проверить информацию сертификата SSL.
Поскольку Google обслуживает по умолчанию сертификат mail.google.com в этом случае, SSL post_connection_check
не работает. Правильное решение здесь - включить указание имени сервера для Net::HTTP
, но мне не ясно, как это сделать с привязками Ruby для OpenSSL. У кого-нибудь есть идея?
Вы должны быть в состоянии увидеть проблему, запустив:
require 'open-uri'
open('https://gmail.com/.well-known/host-meta') { |f| f.read }
Я также создал суть, которая демонстрирует проблему, используя более раннюю версию локон и OpenSSL:
https://gist.github.com/7936ef38787092a22897
Я все, но убежден, после работы над этим весь день напролет, а некоторые из вчерашнего , что это упражнение бесполезно. Я уверен, что даже если бы мне удалось заставить SNI работать, мне пришлось бы использовать патчи для обезьян, чтобы сделать это для сложного сценария развертывания. –
Есть ли другие возможности, совместимые с Ruby, для решения этой проблемы? Например, поддерживает ли Net :: HTTPS 'subjectAltName'? –
Другой предложенный вариант заключается в том, чтобы написать собственную реализацию 'post_connection_check', которая проверила имена хостов против белого списка общих имен. Если мы это сделаем, есть ли какие-либо последствия для безопасности? –