Как службы SaaS предоставляют SSL для людей с "персонализированными" доменами?
Итак, я обсуждал с другом о сайтах SaaS и SSL-сертификатах, и ни один из нас не мог объяснить, как электронная коммерция или какая-либо служба, которая позволила бы клиенту иметь свои собственные домены, имела бы службы с поддержкой SSL.
Я искал сертификаты UCC и Wildcard, но ни один из них, похоже, не соответствует потребностям, потому что в случае сертификата UC вам потребуется список уже созданных доменов (что не так в модели SaaS) и в В случае с подстановочным сертификатом вам обязательно нужно сделать каждого клиента поддоменом, и многие службы предоставляют возможность использовать ваш собственный домен.
Так как же сервисы SaaS предоставляют SSL людям с "персонализированными" доменами?
2 ответа
Приведенный выше ответ может быть немного устаревшим. Современные приложения SaaS, которые хотят обслуживать SSL для нескольких пользовательских доменов, будут использовать SNI. SNI - это "Индикация имени сервера" (RFC 6066; устаревший RFC 4366, RFC 3546) - это расширение к транспортному уровню безопасности, которое позволяет клиенту сообщать серверу имя хоста, к которому он пытается подключиться.
Это гораздо эффективнее, чем старые способы обработки, например, UCC или, что еще хуже, 1 IP на сертификат. По этой же причине защита пользовательских доменов традиционно будет стоить клиенту. Это было и является довольно распространенным явлением, когда платформа взимает $X/mo за пользовательские домены в качестве дополнительной функции. Это связано с затратами на запуск пользовательских доменов.
Если вы хотите разработать что-то подобное сегодня, вы должны начать с SNI и таким образом обслуживать сертификаты. В зависимости от вашего стека это может быть очень просто (NodeJS) или очень сложно (традиционные прокси-серверы на основе apache / nginx). Обычно сложность заключается в том, чтобы принять входящий запрос SNI и сопоставить его с вашей базой данных или другой логикой приложения, чтобы убедиться, что вы обслуживаете правильный сертификат для этого запроса.
Как уже упоминалось, вам может повезти, если вы используете Node. Есть несколько замечательных библиотек, которые помогают с этим, если вы хотите обслуживать сертификаты, предоставляемые Let's Encrypt, и хотите динамически предоставлять сертификат на основе данных во входящем запросе. Например, https://git.coolaj86.com/coolaj86/greenlock.js - это библиотека, которая поможет вам в этом.
Наконец, если вы ищете стороннее решение, есть https://clearalias.com/, который в основном позволяет обойти трудности обслуживания SSL-сертификатов SNI, предлагая его в качестве службы, если вы не особенно заинтересованы в управлении и поддержание вашего собственного уровня SNI.
Как правило, они используют SSL-сертификаты UCC, что позволяет им защищать несколько доменных имен с помощью альтернативных имен субъектов. Вы можете переиздать сертификат с обновленным списком защищаемых им доменов, чтобы вы не ограничивались только доменами, которые вы защищаете при первом создании сертификата.
У некоторых провайдеров есть продукты, специально предназначенные для этого, например Globalsign: https://www.globalsign.com/cloud/ который используется Cloudflare.
Как провайдер, вы можете просто создать один SSL-сертификат для каждого вашего клиента с доменами и поддоменами, которые необходимо защитить, и переиздать его, если клиент удалил определенный домен из своей учетной записи. Как поставщик SaaS, вы, как правило, также управляете настройкой SSL-сертификатов, поэтому практически все можно автоматизировать.