Рейтинг:1

Как включить HTTPS для моей торговой площадки

флаг de

Я создаю рыночную платформу, которая позволит многим продавцам продавать товары своим клиентам. На данный момент я обслуживаю магазины на собственном домене вот так https://storeA.mydomain.com или же https://storeB.mydomain.com (Я могу использовать поддомен, чтобы определить, какой магазин обслуживать).Тем не менее, я хотел бы, чтобы мои продавцы могли использовать свои собственные домены на моей платформе, в то же время имея возможность защищать сайт через HTTPS. Как я могу добиться этого автоматически? В прошлом я пробовал CNAME для CNAME, но это не позволяет использовать HTTPS.

РЕДАКТИРОВАТЬ: Если вы знаете о каких-либо посреднических услугах (которые предлагают какую-то маскировку домена), которые продавцы могли бы использовать, это было бы здорово!

Lex Li avatar
флаг vn
Если ваша компания сама не является ЦС или не имеет тесных отношений с ЦС, чтобы вы могли запрашивать сертификаты для своих клиентов на их поведение со строгими ограничениями (Cloudflare делает это), вы не можете поддерживать HTTPS для пользовательских доменов, не принадлежащих вам. . Обходной путь — попросить ваших клиентов запросить сертификаты самостоятельно и поделиться ими с вами, но это также длительный процесс. Всякий раз, когда безопасность является самой большой проблемой, автоматизация шагов практически невозможна.
Owen avatar
флаг de
@LexLi Я видел функцию сертификата Cloudflare, но она очень дорогая (будучи частью их корпоративного плана) и, к сожалению, не подходит для небольших стартапов программного обеспечения.
флаг jp
@LexLi: Вы когда-нибудь слышали о Let's Encrypt и Certbot?
Lex Li avatar
флаг vn
@EsaJokinen Я точно знаю об этом. Это по-прежнему ручной процесс, так как любой клиент должен изменить DNS на своей стороне, чтобы помочь (и разные поставщики DNS требуют очень разных шагов), которые Cloudflare как поставщик услуг DNS может автоматизировать.
Owen avatar
флаг de
Я немного покопался и нашел это возможное решение с помощью Caddy, но я еще не экспериментировал с ним. (https://www.indiehackers.com/post/generating-ssl-certs-on-demand-with-caddy-server-69ad07a3fb)
Рейтинг:2
флаг jp

Должна быть возможность автоматизировать это с помощью Let's Encrypt с помощью Certbot, но я боюсь, что для этого не существует готового к использованию решения. Следовательно, для этого требуется некоторый сценарий, и вам может потребоваться нанять кого-то, поскольку вы задали этот вопрос.

Я бы предложил что-то вроде этого (примеры для веб-сервера Apache 2.4):

  1. Создайте универсальную конфигурацию, которая указывает http://*/.well-known/acme-challenge/ в тот же каталог с любым доменом и с виртуальным хостом по умолчанию для остальных. Это возможно при глобальном Псевдоним который можно было бы поместить в /etc/apache2/conf-enabled/acme-challenge.conf:

    <IfModule alias_module>
      Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
    </IfModule>
    
  2. Позвольте вашим клиентам вводить свои пользовательские домены для проверки и сохранять информацию где-нибудь со ссылкой на правильного клиента. База данных была бы идеальной для этого, не так ли? Возможно, ограничьте это одним пользовательским именем хоста (& www) для каждого клиента.

  3. Проинструктируйте своих клиентов указывать в своих доменах правильный IP-адрес. В случае субдомена CNAME запись будет работать, но на вершине домена вам нужно будет предоставить инструкции для А записывать.

    Здесь в примерах просто предполагается, что каждый домен имеет оба пример.com и www.example.com, но вы можете изменить это в соответствии с вашими требованиями.

  4. Не запускать вызов HTTP-01 немедленно, но создайте скрипт, запускаемый с cronjob или Системный таймер. Сценарий должен сначала проверить, указывают ли домены, ожидающие проверки, на ваш сервер или нет, и запустить вызов ACME только для доменов, которые соответствуют условию. В противном случае кто-то может злоупотребить этой функцией и заставить ваш сервер выполнять ненужные проверки Let’s Encrypt.

    #!/бин/баш
    МОЙСЕРВЕРIP="192.0.2.123"
    
    если [ "$#" -ne 1 ]; тогда
      printf "\n%s\n\n" "Использование: $0 example.com" >&2
      выход 1
    фи
    
    хост "$1" 2>&1 > /dev/null
    если [$? -ne 0]; тогда
      printf "\n%s\n\n" "Данный домен не является допустимым полным доменным именем." >&2
      выход 1
    фи
    IPAPEX=$(копировать "$1" +short | хвост -n 1)
    IPWWW=$(копировать "www.$1" +short | хвост -n 1)
    
    если [ "$IPAPEX" = "$MYSERVERIP" ]; тогда
      если [ "$IPWWW" = "$MYSERVERIP" ]; тогда
        certbot точно --quiet --webroot -w /var/www/letsencrypt -d $1 -d www.$1
        если [$? -ne 0]; тогда
          printf "\n%s\n\n" "Certbot не удалось выполнить вызов HTTP-01." >&2
          выход 1
        фи
      еще
        printf "\n%s\n\n" "Ошибка: www.$1 не указывает на $MYSERVERIP." >&2
        выход 1
      фи
    еще
      printf "\n%s\n\n" "Ошибка: $1 не указывает на $MYSERVERIP." >&2
      выход 1
    фи
    
  5. После завершения проверки сценарий также может добавить конфигурацию на веб-сервер. Вы можете использовать макрос, например /etc/apache2/conf-enabled/custdomain-macro.conf:

    <Macro CustomWebShopDomain $customer $domain>
        <VirtualHost *:80>
            ServerName $domain
            ServerAlias www.$domain
            Redirect permanent / https://$domain/
        </VirtualHost>
        <VirtualHost *:443>
            ServerName $domain
            SSLEngine on
            SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
            SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
            SSLVerifyClient None
            DocumentRoot /path/to/webshop/$customer
        </VirtualHost>
        <VirtualHost *:443>
            ServerName www.$domain
            SSLEngine on
            SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
            SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
            SSLVerifyClient None
            Redirect permanent / https://$domain/
        </VirtualHost>
    </Macro>
    

    В этом случае добавить новый домен клиента будет просто:

    Используйте идентификатор клиента CustomWebShopDomain example.com
    

    Ваш сценарий может добавить эту строку в конфигурацию, а затем перезагрузить веб-сервер Apache:

    printf "%s\n" "Использовать CustomWebShopDomain $2 $1" \
      >> /etc/apache2/conf-enabled/custdomain-use.conf
    systemctl перезагрузить apache2
    

Обязательно удаляйте просроченные домены

Certbot добавляет все домены для автоматического продления. Если эти продления начинают давать сбои, вы не хотите, чтобы эти домены оставались в конфигурации навсегда. Лучше всего автоматизировать удаление, т.е.

  1. Удалить конфигурацию Certbot /etc/letsencrypt/renewal/example.com
  2. Удалить Используйте идентификатор клиента CustomWebShopDomain example.com линия.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.