Puncte:1

Cum să activez HTTPS pentru piața mea

drapel de

Construiesc o platformă de piață care permite multor comercianți să vândă clienților lor. În momentul de față deservesc magazine de pe propriul meu domeniu așa https://storeA.mydomain.com sau https://storeB.mydomain.com (Pot folosi subdomeniul pentru a distinge ce magazin urmează să fie servit).Cu toate acestea, aș dori să permit comercianților mei să-și folosească propriile domenii pe platforma mea, în timp ce pot securiza site-ul prin HTTPS, cum pot realiza acest lucru automat? În trecut, am încercat CNAME în CNAME, dar acest lucru nu permite HTTPS.

EDIT: Dacă cunoașteți vreun serviciu intermediar (care oferă un fel de mascare a domeniului) pe care comercianții le-ar putea folosi, ar fi grozav!

Lex Li avatar
drapel vn
Cu excepția cazului în care compania dvs. este un CA în sine sau are o relație strânsă cu un CA, astfel încât să puteți solicita certificate pentru clienții dvs. cu privire la comportamentul lor sub restricții stricte (Cloudflare face acest lucru), nu puteți accepta HTTPS pentru domeniile personalizate care nu sunt deținute de dvs. . Soluția este să le cereți clienților să solicite certificate pe cont propriu și să vă împărtășească, dar acesta este și un proces lung. Ori de câte ori securitatea este cea mai mare preocupare, automatizarea pașilor este aproape imposibilă.
Owen avatar
drapel de
@LexLi Am văzut caracteristica certificatului Cloudflare, dar este foarte costisitoare (făcând parte din planul lor Enterprise) și nu este o opțiune pentru startup-uri mici de software, din păcate.
drapel jp
@LexLi: Ați auzit vreodată de Let's Encrypt & Certbot?
Lex Li avatar
drapel vn
@EsaJokinen Cu siguranță știu de asta. Acesta este încă un proces manual, deoarece orice client trebuie să modifice DNS-ul de partea sa pentru a asista (și diferiți furnizori de DNS necesită pași foarte diferiți), pe care Cloudflare în calitate de furnizor de servicii DNS îi poate automatiza.
Owen avatar
drapel de
Am făcut câteva săpături și am dat peste această posibilă soluție folosind Caddy, dar nu am experimentat-o ​​încă. (https://www.indiehackers.com/post/generating-ssl-certs-on-demand-with-caddy-server-69ad07a3fb)
Puncte:2
drapel jp

Ar trebui să fie posibil să se automatizeze acest lucru cu Let's Encrypt folosind Certbot, dar mă tem că nu există o soluție gata de utilizare pentru aceasta. Prin urmare, necesită niște scripturi și poate fi necesar să angajați pe cineva, deoarece ați pus această întrebare.

Eu as sugera asa ceva (exemplele sunt pentru serverul web Apache 2.4):

  1. Creați o configurație generală care indică http://*/.well-known/acme-challenge/ în același director cu orice domeniu și cu gazda virtuală implicită pentru restul. Acest lucru este posibil cu un global Alias care ar putea fi plasat în /etc/apache2/conf-enabled/acme-challenge.conf:

    <IfModule alias_module>
      Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
    </IfModule>
    
  2. Permiteți clienților să introducă domeniile lor personalizate pentru validare și să salveze informațiile undeva, cu referire la clientul corect. O bază de date ar fi ideală pentru asta, nu-i așa. Este posibil să limitați acest lucru la un nume de gazdă personalizat (& www) per client.

  3. Instruiește-ți clienții să-și orienteze domeniile către adresa IP corectă. În cazul unui subdomeniu, a CNAME înregistrarea va funcționa, dar la vârful domeniului va trebui să oferiți instrucțiuni pentru o A record.

    Aici, exemplele presupun pur și simplu că fiecare domeniu are ambele exemplu.com și www.example.com, dar puteți modifica acest lucru în funcție de cerințele dvs.

  4. Nu lansa Provocare HTTP-01 imediat, dar creați un script lansat cu a cronjob sau a Temporizator de sistem. Scriptul ar trebui să verifice mai întâi dacă domeniile care așteaptă validarea indică serverul sau nu și să lanseze provocarea ACME numai pentru domeniile care îndeplinesc condiția. În caz contrar, cineva ar putea abuza de caracteristică și ar putea face serverul dvs. să efectueze validări inutile Letâs Encrypt.

    #!/bin/bash
    MYSERVERIP="192.0.2.123"
    
    if [ "$#" -ne 1 ]; atunci
      printf "\n%s\n\n" "Utilizare: $0 example.com" >&2
      iesirea 1
    fi
    
    gazdă „$1” 2>&1 > /dev/null
    dacă [ $? -ne 0]; atunci
      printf "\n%s\n\n" "Domeniul dat nu este un FQDN valid." >&2
      iesirea 1
    fi
    IPAPEX=$(sapă „$1” +scurt | coadă -n 1)
    IPWWW=$(sapă „www.$1” +scurt | coadă -n 1)
    
    if [ "$IPAPEX" = "$MYSERVERIP" ]; atunci
      if [ "$IPWWW" = "$MYSERVERIP" ]; atunci
        certbot certonly --quiet --webroot -w /var/www/letsencrypt -d $1 -d www.$1
        dacă [ $? -ne 0]; atunci
          printf "\n%s\n\n" "Certbot a eșuat la provocarea HTTP-01." >&2
          iesirea 1
        fi
      altfel
        printf "\n%s\n\n" "Eșuat: www.$1 nu indică către $MYSERVERIP." >&2
        iesirea 1
      fi
    altfel
      printf "\n%s\n\n" "Eșuat: $1 nu indică către $MYSERVERIP." >&2
      iesirea 1
    fi
    
  5. Odată ce validarea este finalizată, scriptul poate adăuga și configurația la serverul web. Ai putea folosi un macro, de exemplu. /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>
    

    În acest caz, adăugarea unui nou domeniu de client ar fi simplă:

    Utilizați CustomWebShopDomain customerid example.com
    

    Scriptul dvs. poate adăuga această linie la configurație și apoi reîncărca serverul web Apache:

    printf "%s\n" "Utilizați CustomWebShopDomain $2 $1" \
      >> /etc/apache2/conf-enabled/custdomain-use.conf
    systemctl reîncărcați apache2
    

Asigurați-vă că curățați domeniile expirate

Certbot adaugă toate domeniile pentru reînnoiri automate. Dacă acele reînnoiri încep să eșueze, nu doriți să păstrați acele domenii în configurație pentru totdeauna. Cel mai bine este să automatizați eliminarea, de ex.

  1. Eliminați configurația Certbot /etc/letsencrypt/renewal/example.com
  2. Scoateți Utilizați CustomWebShopDomain customerid example.com linia.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.