Score:1

วิธีเปิดใช้งาน HTTPS สำหรับตลาดของฉัน

ธง de

ฉันกำลังสร้างแพลตฟอร์มตลาดที่ช่วยให้ผู้ค้าหลายรายสามารถขายให้กับลูกค้าของตนได้ ในขณะนี้ฉันให้บริการร้านค้าบนโดเมนของตัวเองเช่นนั้น https://storeA.mydomain.com หรือ https://storeB.mydomain.com (ฉันสามารถใช้โดเมนย่อยเพื่อแยกแยะร้านค้าที่จะให้บริการ)อย่างไรก็ตาม ฉันต้องการให้ผู้ค้าของฉันใช้โดเมนของตนเองบนแพลตฟอร์มของฉันในขณะที่สามารถรักษาความปลอดภัยของไซต์ผ่าน HTTPS ฉันจะทำสิ่งนี้โดยอัตโนมัติได้อย่างไร ก่อนหน้านี้ ฉันได้ลองใช้ CNAME เป็น CNAME แต่วิธีนี้ไม่อนุญาต HTTPS

แก้ไข: หากคุณรู้จักบริการตัวกลางใด ๆ (ที่เสนอการปิดบังโดเมนบางประเภท) ที่ผู้ค้าจะสามารถใช้ได้นั่นจะดีมาก!

Lex Li avatar
vn flag
ยกเว้นกรณีที่บริษัทของคุณเป็น CA เอง หรือมีความสัมพันธ์ใกล้ชิดกับ CA เพื่อให้คุณสามารถขอใบรับรองสำหรับลูกค้าของคุณเกี่ยวกับพฤติกรรมของพวกเขาภายใต้ข้อจำกัดที่เข้มงวด (Cloudflare ทำเช่นนั้น) คุณจะไม่สามารถสนับสนุน HTTPS สำหรับโดเมนแบบกำหนดเองที่คุณไม่ได้เป็นเจ้าของ . วิธีแก้ปัญหาคือขอให้ลูกค้าขอใบรับรองด้วยตนเองและแชร์กับคุณ แต่นั่นก็เป็นกระบวนการที่ใช้เวลานานเช่นกัน เมื่อใดก็ตามที่ความปลอดภัยเป็นปัญหาใหญ่ที่สุด การทำให้ขั้นตอนต่างๆ เป็นไปโดยอัตโนมัติแทบจะเป็นไปไม่ได้เลย
Owen avatar
de flag
@LexLi ฉันเคยเห็นคุณสมบัติใบรับรองของ Cloudflare แต่มันมีราคาแพงมาก (เป็นส่วนหนึ่งของแผนองค์กรของพวกเขา) และไม่ใช่ตัวเลือกสำหรับการเริ่มต้นซอฟต์แวร์ขนาดเล็ก
jp flag
@LexLi: คุณเคยได้ยิน Let's Encrypt & Certbot ไหม
Lex Li avatar
vn flag
@EsaJokinen ฉันรู้เรื่องนี้อย่างแน่นอน นั่นยังคงเป็นกระบวนการที่ต้องดำเนินการด้วยตนเอง เนื่องจากลูกค้าต้องแก้ไข DNS ในฝั่งของตนเพื่อช่วยเหลือ (และผู้ให้บริการ DNS แต่ละรายต้องการขั้นตอนที่แตกต่างกันมาก) ซึ่ง Cloudflare ในฐานะผู้ให้บริการ DNS สามารถทำให้เป็นอัตโนมัติได้
Owen avatar
de flag
ฉันทำการขุดและพบวิธีแก้ปัญหาที่เป็นไปได้นี้โดยใช้แคดดี้ แต่ฉันยังไม่ได้ทดลองกับมัน (https://www.indiehackers.com/post/generating-ssl-certs-on-demand-with-caddy-server-69ad07a3fb)
Score:2
ธง jp

ควรทำให้สิ่งนี้เป็นอัตโนมัติด้วย Let's Encrypt โดยใช้ Certbot แต่ฉันเกรงว่าจะไม่มีวิธีแก้ปัญหาที่พร้อมใช้งานสำหรับสิ่งนี้ ดังนั้นจึงต้องมีการเขียนสคริปต์ และคุณอาจต้องจ้างใครสักคน เนื่องจากคุณถามคำถามนี้

ฉันจะแนะนำสิ่งนี้ (ตัวอย่างสำหรับเว็บเซิร์ฟเวอร์ Apache 2.4):

  1. สร้างการกำหนดค่า catch-all ที่ชี้ 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 ที่ถูกต้อง ในกรณีของโดเมนย่อย a CNAME บันทึกจะทำงาน แต่ ที่จุดสูงสุดของโดเมน คุณจะต้องให้คำแนะนำสำหรับ บันทึก.

    ในที่นี้ ตัวอย่างจะถือว่าทุกโดเมนมีทั้งสองอย่าง ตัวอย่าง.คอม และ www.example.comแต่คุณสามารถแก้ไขได้ตามความต้องการของคุณ

  4. อย่าเปิดตัว ความท้าทาย HTTP-01 ทันที แต่สร้างสคริปต์ที่เปิดตัวด้วย a ครอนจ็อบ หรือ ก จับเวลาระบบ. สคริปต์ควรตรวจสอบก่อนว่าโดเมนที่รอการตรวจสอบชี้ไปที่เซิร์ฟเวอร์ของคุณหรือไม่ และเปิดใช้ความท้าทาย ACME สำหรับโดเมนที่ตรงตามเงื่อนไขเท่านั้น มิฉะนั้น อาจมีคนใช้ฟีเจอร์นี้ในทางที่ผิดและทำให้เซิร์ฟเวอร์ของคุณดำเนินการตรวจสอบความถูกต้องของ Letâs Encrypt โดยไม่จำเป็น

    #!/bin/bash
    MYSERVERIP="192.0.2.123"
    
    ถ้า [ "$#" -ne 1 ]; แล้ว
      printf "\n%s\n\n" "การใช้งาน: $0 example.com" >&2
      ทางออก 1
    ไฟ
    
    โฮสต์ "$1" 2>&1 > /dev/null
    ถ้า [ $? -เน่ 0 ]; แล้ว
      printf "\n%s\n\n" "โดเมนที่ระบุไม่ใช่ FQDN ที่ถูกต้อง" >&2
      ทางออก 1
    ไฟ
    IPAPEX=$(ขุด "$1" +short | หาง -n 1)
    IPWWW=$(ขุด "www.$1" +short | หาง -n 1)
    
    ถ้า [ "$IPAPEX" = "$MYSERVERIP" ]; แล้ว
      ถ้า [ "$IPWWW" = "$MYSERVERIP" ]; แล้ว
        certbot certonly --quiet --webroot -w /var/www/letsencrypt -d $1 -d www.$1
        ถ้า [ $? -เน่ 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 ไลน์.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา