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

Edge for Private Cloud v4.18.01

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

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

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

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

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

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

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

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

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

    ในสภาพแวดล้อมขนาดเล็ก เช่น ในสภาพแวดล้อมการทดสอบหรือสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ คุณอาจมีโหนด Stack เพียงโหนดเดียว ซึ่งหมายความว่าไม่จำเป็นต้องรวมตัวจัดสรรภาระงาน ในการกำหนดค่านี้ ให้กำหนดค่า 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 ใน API BaaS Stack

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

http://stack_IP:8080

หรือจะกำหนดค่าการเข้าถึง TLS ไปยัง BaaS API เพื่อให้เข้าถึงได้ในรูปแบบต่อไปนี้ก็ได้

https://stack_IP:8080

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

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

ใช้ขั้นตอนต่อไปนี้เพื่อกำหนดค่าการเข้าถึง TLS ไปยัง Stack

  1. สร้างไฟล์ JKS ของคีย์สโตร์ที่มีใบรับรอง TLS และคีย์ส่วนตัว ดูข้อมูลเพิ่มเติมได้ที่การกำหนดค่า TLS/SSL สำหรับ Edge On Premises
    หมายเหตุ: ตรวจสอบว่ารหัสผ่านของคีย์สโตร์และคีย์เหมือนกัน
  2. คัดลอกไฟล์ JKS ของคีย์สโตร์ไปยังไดเรกทอรีในโหนด Stack เช่น /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_keystore.file=/opt/apigee/customer/application/keystore.jks
    tomcat-server_keystore.password=password
    tomcat-server_keyalias=keystore_alias
    tomcat-server_clientauth.enabled=false
    tomcat-server_ssl.protocols=TLSv1,TLSv1.1,TLSv1.2
    # โดยค่าเริ่มต้น การเข้าถึง TLS จะใช้พอร์ต 8080
    # ใช้พร็อพเพอร์ตี้นี้เพื่อระบุพอร์ตอื่น
    # tomcat-server_port=8080


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

การกำหนดค่า 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
    baas.portal.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
    # โดยค่าเริ่มต้น การเข้าถึง TLS จะใช้พอร์ต 9000
    # ใช้พร็อพเพอร์ตี้นี้เพื่อระบุพอร์ตอื่น
    # 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-portal configure
  6. รีสตาร์ทพอร์ทัล:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  7. ใช้ขั้นตอนด้านล่างใน "กำหนดค่าโหนด API BaaS Stack สำหรับ TLS ใน Stack หรือพอร์ทัล" เพื่อให้แน่ใจว่าโหนด Stack มี URL ของ TLS ที่ถูกต้องสำหรับพอร์ทัล

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

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

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

หากคุณใช้ตัวจัดสรรภาระงานที่ด้านหน้าโหนด Stack หรือกำหนดค่า TLS ในโหนด Stack ให้ตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ใน /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 หากคุณใช้ตัวจัดสรรภาระงานหน้าโหนด Stack

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

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

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

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

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

หลังจากแก้ไข usergrid.properties แล้ว ให้ทำดังนี้

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