การกําหนดค่า TLS สําหรับ API BaaS

Edge สำหรับ Private Cloud เวอร์ชัน 4.18.01

TLS (Transport Layer Security (Transport Layer Security) ซึ่งมีรุ่นก่อนหน้าคือ SSL) เป็นเทคโนโลยีการรักษาความปลอดภัยมาตรฐานที่ช่วยรับประกันการรับส่งข้อความที่ปลอดภัยและเข้ารหัสในสภาพแวดล้อม API ของคุณ คุณกำหนดค่า TLS บน API BaaS พอร์ทัลและโหนด API BaaS Stack ได้

รูปภาพต่อไปนี้แสดงแผนภาพการทำให้ใช้งานได้ทั่วไปสำหรับ API BaaS ที่มีโหนดพอร์ทัล BaaS เดี่ยวและโหนด API BaaS Stack 3 โหนด

นักพัฒนาซอฟต์แวร์ใช้เบราว์เซอร์เพื่อส่งคำขอไปยังพอร์ทัล โดยค่าเริ่มต้น คำขอจะใช้โปรโตคอล HTTP บนพอร์ต 9000 ของโหนดพอร์ทัล

การทำให้ใช้งานได้นี้มีตัวจัดสรรภาระงานระหว่างพอร์ทัลและโหนดสแต็ก ในการกำหนดค่านี้ พอร์ทัลจะส่งคำขอ HTTP ไปยังตัวจัดสรรภาระงาน จากนั้นตัวจัดสรรภาระงานจะส่งต่อคำขอไปยังโหนดใดโหนดหนึ่งของสแต็ก นี่คือสภาพแวดล้อมการทำให้ใช้งานได้ที่แนะนำสำหรับระบบที่ใช้งานจริง

ตัวเลือกการกำหนดค่า TLS

เมื่อกำหนดค่า TLS สำหรับ API BaaS คุณมีตัวเลือกมากมายดังนี้

  • กำหนดค่า TLS บนพอร์ทัลและบนตัวจัดสรรภาระงานสำหรับโหนดสแต็ก

    ในการกำหนดค่านี้ นักพัฒนาซอฟต์แวร์จะใช้โปรโตคอล HTTPS เพื่อเข้าถึงพอร์ทัล และพอร์ทัลที่ทำงานในเบราว์เซอร์จะใช้ HTTPS เพื่อส่งคำขอไปยังโหนดสแต็กผ่านตัวจัดสรรภาระงาน ตัวจัดสรรภาระงานใช้ HTTP เพื่อเข้าถึงโหนดสแต็ก
  • กำหนดค่า TLS บนพอร์ทัล ตัวจัดสรรภาระงาน และโหนดสแต็ก

    กำหนดค่าตัวจัดสรรภาระงานให้ใช้ TLS เพื่อเข้าถึงโหนดสแต็กเพื่อเพิ่มความปลอดภัย
  • กำหนดค่า TLS บนพอร์ทัลและโหนดสแต็กเดียว

    ในสภาพแวดล้อมขนาดเล็ก เช่น ในสภาพแวดล้อมการทดสอบหรือการพัฒนา คุณอาจมีโหนดสแต็กเพียงโหนดเดียว ซึ่งหมายความว่าไม่จำเป็นต้องรวมตัวจัดสรรภาระงาน ในการกำหนดค่านี้ ให้กำหนดค่า TLS ทั้งบนพอร์ทัลและโหนดสแต็ก
  • กำหนดค่า TLS ในตัวจัดสรรภาระงานสำหรับพอร์ทัล

    ทางเลือกหนึ่งที่ไม่แสดงด้านบนคือการใช้ตัวจัดสรรภาระงานด้านหน้าโหนดพอร์ทัล ในการกำหนดค่าดังกล่าว คุณจะกำหนดค่า TLS บนตัวจัดสรรภาระงาน และเลือกการเชื่อมต่อระหว่างตัวจัดสรรภาระงานและพอร์ทัลได้

ตรวจสอบว่าพอร์ต TLS เปิดอยู่

ขั้นตอนด้านล่างจะกำหนดค่า TLS บนพอร์ตพอร์ทัลเริ่มต้น 9000 และโหนดสแต็กที่ 8080 แต่คุณเปลี่ยนพอร์ตนี้ได้หากต้องการ

ไม่ว่าคุณจะใช้พอร์ตใด คุณต้องตรวจสอบว่าพอร์ตนั้นเปิดอยู่ในโหนด เช่น คุณจะใช้คำสั่งต่อไปนี้เพื่อเปิดพอร์ต 8443 ได้

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT --verbose

การกำหนดค่า TLS ในกลุ่ม BaaS ของ API

โดยค่าเริ่มต้น TLS จะปิดใช้อยู่สำหรับ API BaaS Stack จากนั้นคุณจะเข้าถึง BaaS API ผ่าน HTTP โดยใช้ที่อยู่ IP หรือชื่อ DNS ของโหนดสแต็กและพอร์ต 8080 เช่น

http://stack_IP:8080

นอกจากนี้ คุณอาจกำหนดค่าการเข้าถึง TLS สำหรับ BaaS API เพื่อให้เข้าถึงผ่าน แบบฟอร์มได้ ดังนี้

https://stack_IP:8080

ในตัวอย่างนี้ คุณได้กำหนดค่าการเข้าถึง TLS เพื่อใช้พอร์ต 8080 แต่ไม่จำเป็นต้องใช้พอร์ต 8080 คุณกำหนดค่ากลุ่มให้ใช้พอร์ตอื่นได้ ข้อกำหนดเพียงอย่างเดียวคือไฟร์วอลล์ของคุณอนุญาตให้มีการรับส่งข้อมูลผ่านพอร์ตที่ระบุ

กลุ่มสามารถรองรับคำขอประเภทเดียว (HTTP หรือ HTTPS) ผ่านพอร์ตเดียว ดังนั้น หากกำหนดค่าการเข้าถึง HTTPS บนพอร์ต 8080 คุณจะใช้ HTTP เพื่อเข้าถึงพอร์ต 8080 ไม่ได้ หากคุณกำหนดค่ากลุ่มให้ใช้พอร์ต 8443 กับ HTTPS สแต็กจะไม่ตรวจจับบนพอร์ต 8080 อีกต่อไป

ใช้ขั้นตอนต่อไปนี้เพื่อกำหนดค่าการเข้าถึง TLS สำหรับกลุ่ม

  1. สร้างไฟล์ JKS คีย์สโตร์ที่มีการรับรอง TLS และคีย์ส่วนตัว โปรดดูการกำหนดค่า TLS/SSL สำหรับ Edge ภายในองค์กร
    หมายเหตุ: ตรวจสอบว่ารหัสผ่านของคีย์สโตร์และสำหรับคีย์เหมือนกัน
  2. คัดลอกไฟล์ JKS สำหรับคีย์สโตร์ไปยังไดเรกทอรีในโหนดสแต็ก เช่น /opt/apigee/customer/application ผู้ใช้ "apigee" ต้องเข้าถึงไดเรกทอรีได้
  3. เปลี่ยนการเป็นเจ้าของไฟล์ JKS เป็นผู้ใช้ "apigee":
    > chown apigee:apigee /opt/apigee/customer/application/keystore.jks

    โดยที่ keystore.jks คือชื่อไฟล์คีย์สโตร์ของคุณ
  4. แก้ไขไฟล์ /opt/apigee/customer/application/usergrid.properties เพื่อตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ รวมถึงเส้นทางไปยังไฟล์ JKS และรหัสผ่านบนคีย์สโตร์และคีย์ หากไม่มีไฟล์ดังกล่าว ให้สร้างไฟล์ดังนี้
    tomcat-server_scheme=https
    tomcat-server_secure=true
    tomcat-server_ssl.enabled=true
    tomcat-server_keystore.type=JKS
    tomcat-server_keyserver.file=/opt/apigee/customer/application/keystore.jks




    /opt/apigee/customer/application/keystore.jks
    # ใช้พร็อพเพอร์ตี้นี้เพื่อระบุพอร์ตอื่น
    # tomcat-server_port=8080


    คำเตือน: ค่ารหัสผ่านต้องเป็นข้อความธรรมดา ดังนั้นคุณควรปกป้อง usergrid.properties จากการเข้าถึงที่ไม่ได้รับอนุญาต

    ใช้พร็อพเพอร์ตี้ tomcat-server_keyalias เพื่อระบุชื่อแทนคีย์สโตร์ โดยจะกำหนดชื่อแทนคีย์ได้ในเวลาที่สร้างคีย์ ตัวอย่างเช่น คุณจะตั้งค่าได้โดยใช้ตัวเลือก -alias ในคำสั่ง keytool

    ใช้ tomcat-server_ssl.protocols เพื่อตั้งค่าโปรโตคอล TLS ที่กลุ่มรองรับ ดูรายการโปรโตคอลที่ Java 8 รองรับได้ที่ http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename
  5. กำหนดค่าโหนดสแต็ก ดังนี้
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergridconfigure
  6. รีสตาร์ทสแต็ก BaaS ดังนี้
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergridRestart
  7. ยืนยันว่า TLS ทํางานอยู่โดยเรียกใช้คำสั่ง cURL ต่อไปนี้ในโหนดสแต็กโดยใช้ HTTPS
    > curl -k https://localhost:8080/status -v

    หากกําหนดค่า TLS ถูกต้องดี คุณควรจะเห็นการตอบกลับที่มีข้อมูลสถานะ

    หากคุณกำหนดค่าการเข้าถึง TLS ผ่านพอร์ตอื่นที่ไม่ใช่พอร์ต 8080 ให้แก้ไขคำสั่งด้านบนเพื่อใช้พอร์ตที่ถูกต้อง
  8. ทำซ้ำกับโหนดสแต็กทั้งหมด
  9. หากคุณมีตัวจัดสรรภาระงานอยู่ด้านหน้าโหนดสแต็ก ให้กำหนดค่าตัวจัดสรรภาระงานเพื่อส่งคำขอไปยังโหนดสแต็กผ่าน HTTPS ดูเอกสารเกี่ยวกับตัวจัดสรรภาระงานสำหรับข้อมูลเพิ่มเติม

    หากพอร์ทัลส่งคำขอไปยังกลุ่มโดยตรง ให้กำหนดค่าพอร์ทัลเพื่อเข้าถึงกลุ่มผ่าน HTTPS ตามที่อธิบายในส่วนต่อไปนี้
  10. ใช้กระบวนการด้านล่างใน "กำหนดค่าโหนด API BaaS สำหรับ TLS ในสแต็กหรือพอร์ทัล" เพื่อให้มั่นใจว่าโหนดสแต็กมี URL TLS ที่ถูกต้องเมื่อสร้างการตอบกลับของผู้ใช้

การกำหนดค่าพอร์ทัลเพื่อเข้าถึงสแต็กผ่าน TLS

พอร์ทัล BaaS ที่ทำงานในเบราว์เซอร์ฟังก์ชันด้วยการเรียก API ไปยัง BaaS Stack หากกำหนดค่า BaaS Stack ให้ใช้ TLS คุณต้องกำหนดค่าพอร์ทัลเพื่อทำให้เรียกใช้ผ่าน HTTPS ด้วย

โดยทั่วไป การติดตั้ง API BaaS จะได้รับการกำหนดค่าเป็นอย่างใดอย่างหนึ่งต่อไปนี้

  • ใช้ตัวจัดสรรภาระงานระหว่างพอร์ทัลและโหนดในสแต็ก

    กําหนดค่าตัวจัดสรรภาระงานเพื่อส่งคำขอไปยังโหนดสแต็กผ่าน HTTPS ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับตัวจัดสรรภาระงาน

    ในการกำหนดค่านี้ พอร์ทัลจะเข้าถึงตัวจัดสรรภาระงานผ่าน HTTP หรือ HTTPS ได้โดยขึ้นอยู่กับวิธีที่คุณกำหนดค่าตัวจัดสรรภาระงาน หากตัวจัดสรรภาระงานใช้ TLS ให้ใช้ขั้นตอนด้านล่างเพื่อกำหนดค่าพอร์ทัลเพื่อส่งคำขอไปยังตัวจัดสรรภาระงานของ HTTPS
  • ให้พอร์ทัลส่งคำขอไปยังกลุ่มโดยตรง

    กำหนดค่าพอร์ทัลเพื่อเข้าถึงกลุ่มผ่าน HTTPS ตามที่อธิบายด้านล่าง

ใช้ขั้นตอนต่อไปนี้ในการกำหนดค่า API BaaS สำหรับทำการเรียก API ผ่าน HTTPS

  1. กำหนดค่าการเข้าถึง TLS บน BaaS Stack ตามที่อธิบายข้างต้น หรือบนตัวจัดสรรภาระงานสำหรับโหนดสแต็กตามที่อธิบายในเอกสารประกอบสำหรับตัวจัดสรรภาระงาน
  2. แก้ไข /opt/apigee/customer/application/portal.properties เพื่อตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ หากไม่มีไฟล์ดังกล่าว ให้สร้างไฟล์โดยทำดังนี้
    baas.portal.config.overrideUrl=https://stackIP:port

    ระบุเป็นค่าของพร็อพเพอร์ตี้นี้เป็นที่อยู่ IP หรือชื่อ DNS และพอร์ตของโหนด API Stack สำหรับการติดตั้งโหนดเดี่ยว หรือกับตัวจัดสรรภาระงานหากคุณมีตัวจัดสรรภาระงานอยู่หน้าโหนด API BaaS Stack
  3. กำหนดค่าโหนดพอร์ทัลดังนี้
    > /opt/apigee/apigee-service/bin/apigee-service baas-portalconfigure
  4. รีสตาร์ทพอร์ทัลโดยใช้คำสั่งต่อไปนี้
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal reCAPTCHA
  5. หากคุณใช้ใบรับรองแบบ Self-signed เมื่อกำหนดค่าการเข้าถึง TLS สำหรับกลุ่มด้านบน เบราว์เซอร์อาจไม่อนุญาตให้ส่งคำขอถึงกลุ่มจากพอร์ทัล หากคุณเห็นข้อผิดพลาดในเบราว์เซอร์ที่ระบุว่าไม่อนุญาตให้เข้าถึงกลุ่ม HTTPS ให้ส่งคำขอ URL ต่อไปนี้ในเบราว์เซอร์ แล้วเพิ่มข้อยกเว้นความปลอดภัยเพื่ออนุญาตการเข้าถึง
    https://stackIP:port/status

    ระบุที่อยู่ IP หรือชื่อ DNS และพอร์ตของโหนด API สแต็กหรือตัวจัดสรรภาระงาน

การกำหนดค่า TLS บนพอร์ทัล API BaaS

โดยค่าเริ่มต้น ผู้ใช้จะเข้าถึงพอร์ทัลได้โดยสร้างคำขอ HTTP ที่ไม่ได้เข้ารหัสที่พอร์ต 9000 ในเซิร์ฟเวอร์พอร์ทัล คุณกำหนดค่าพอร์ทัลให้ใช้ HTTPS ในการเข้ารหัสข้อมูลที่ส่งไปยังและส่งจากพอร์ทัลได้

โดยค่าเริ่มต้น คุณจะเข้าถึงพอร์ทัลผ่าน HTTP ได้โดยใช้ที่อยู่ IP หรือชื่อ DNS ของโหนดพอร์ทัลและพอร์ต 9000 เช่น

http://portal_IP:9000

นอกจากนี้ คุณอาจกำหนดค่าการเข้าถึง TLS สำหรับพอร์ทัลเพื่อให้คุณเข้าถึงผ่าน แบบฟอร์มได้ ดังนี้

https://portal_IP:9443

ในตัวอย่างนี้ คุณได้กำหนดค่าการเข้าถึง TLS เพื่อใช้พอร์ต 9443 แต่ไม่จำเป็นต้องใช้พอร์ต 9443 คุณกำหนดค่าพอร์ทัลให้ใช้พอร์ตอื่นได้

พอร์ทัลสามารถรองรับคำขอประเภทเดียว (HTTP หรือ HTTPS) ผ่านพอร์ตเดียว ดังนั้น หากกำหนดค่าการเข้าถึง HTTPS บนพอร์ต 9000 คุณจะใช้ HTTP เพื่อเข้าถึงพอร์ต 9000 ไม่ได้ หากคุณกำหนดค่าพอร์ทัลให้ใช้พอร์ต 9443 กับ HTTPS พอร์ทัลจะไม่รอฟังบนพอร์ต 9000 อีกต่อไป

วิธีกำหนดค่า TLS สำหรับพอร์ทัล

  1. สร้างไฟล์คีย์และไฟล์ใบรับรองในรูปแบบ PEM
    หมายเหตุ: ตรวจสอบว่าไม่มีรหัสผ่าน/ข้อความรหัสผ่านบนคีย์หรือใบรับรอง
  2. คัดลอกไฟล์ PEM ไปยังไดเรกทอรีบนโหนดพอร์ทัล เช่น /opt/apigee/customer/application ผู้ใช้ "apigee" ต้องเข้าถึงไดเรกทอรีได้
  3. เปลี่ยนการเป็นเจ้าของไฟล์ PEM เป็นผู้ใช้ "apigee":
    > chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. แก้ไขไฟล์ /opt/apigee/customer/application/portal.properties เพื่อตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ หากไม่มีไฟล์ดังกล่าว ให้สร้างไฟล์ดังนี้
    baas.portal.ssl=on
    baas.portal.ssl.certificate=/opt/apigee/customer/application/defaultcert.pem
    baas.portal.ssl.key=/opt/apigee/customer/application/defaultkey.pem
    TLS.vbaas access

    # ใช้พร็อพเพอร์ตี้นี้เพื่อระบุพอร์ตอื่น
    # baas.portal.listen=9000


    ใช้ baas.portal.ssl.protocols เพื่อตั้งค่าโปรโตคอล TLS ที่พอร์ทัลรองรับ ดูรายการโปรโตคอลที่รองรับได้ที่รายการชื่อโปรโตคอล SSL ที่กำหนดโดย Nginx ที่ http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols
  5. กำหนดค่าโหนดพอร์ทัลดังนี้
    > /opt/apigee/apigee-service/bin/apigee-service baas-portalconfigure
  6. เริ่มต้นพอร์ทัลใหม่ดังนี้
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal reCAPTCHA
  7. ใช้ขั้นตอนด้านล่างใน "กำหนดค่าโหนด API BaaS สำหรับ TLS ในสแต็กหรือพอร์ทัล" เพื่อตรวจสอบว่าโหนดสแต็กมี URL TLS ที่ถูกต้องสำหรับพอร์ทัล

กำหนดค่าโหนด API BaaS สำหรับ TLS บนสแต็กหรือพอร์ทัล

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

  • การใส่ URL ในการตอบกลับในคำขอ BaaS API
  • เพิ่มลิงก์ในเทมเพลตอีเมลเมื่อรีเซ็ตรหัสผ่านหรือส่งการแจ้งเตือนอื่นๆ
  • กำลังเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าพอร์ทัลที่เจาะจง

หากคุณใช้ตัวจัดสรรภาระงานด้านหน้าโหนดสแต็กหรือกำหนดค่า TLS บนโหนดสแต็ก ให้ตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ใน /opt/apigee/customer/application/usergrid.properties

usergrid-deployment_usergrid.api.url.base=http://localhost:8080

แทนที่ http://localhost:8080 ด้วย URL ของตัวจัดสรรภาระงาน หากตัวจัดสรรภาระงานมีการกำหนดค่าให้ใช้ TLS ให้ใช้โปรโตคอล HTTPS คุณต้องรวมพอร์ตเฉพาะในกรณีที่ใช้พอร์ตที่ไม่ใช่แบบมาตรฐาน ซึ่งหมายถึงพอร์ตอื่นที่ไม่ใช่พอร์ต 80 สำหรับ HTTP และพอร์ต 443 สำหรับ HTTPS

นอกจากนี้คุณยังต้องตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ใน /opt/apigee/customer/application/portal.properties ในกรณีที่ใช้ตัวจัดสรรภาระงานด้านหน้าโหนดสแต็ก

baas.portal.config.overrideUrl=http://localhost:8080

แทนที่ http://localhost:8080 ด้วย URL ของตัวจัดสรรภาระงานสำหรับสแต็ก

หากคุณใช้ตัวจัดสรรภาระงานด้านหน้าโหนดพอร์ทัลหรือกำหนดค่า TLS บนโหนดสแต็ก ให้ตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ใน usergrid.properties

usergrid-deployment_portal.url=http://localhost:9000

แทนที่ http://localhost:9000 ด้วย URL ของตัวจัดสรรภาระงาน หากตัวจัดสรรภาระงานมีการกำหนดค่าให้ใช้ TLS ให้ใช้โปรโตคอล HTTPS คุณต้องระบุพอร์ตเฉพาะในกรณีที่ใช้พอร์ตที่ไม่ใช่แบบมาตรฐาน ซึ่งหมายถึงพอร์ต 80 สำหรับ HTTP และพอร์ต 443 สำหรับ HTTPS

หลังจากแก้ไข usergrid.properties

  1. กำหนดค่าโหนดสแต็ก ดังนี้
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergridconfigure
  2. รีสตาร์ทสแต็ก BaaS ดังนี้
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergridRestart
  3. หากแก้ไข portal.properties ให้กำหนดค่าโหนดพอร์ทัล:??
    > /opt/apigee/apigee-service/bin/apigee-service baas-และอุปกรณ์กำหนดค่า
  4. รีสตาร์ทพอร์ทัล BaaS:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal reCAPTCHA