คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
โฮสต์เสมือนบน Edge กำหนดโดเมนและพอร์ตที่มีการแสดงพร็อกซี API รวมถึง URL ที่แอปใช้เพื่อเข้าถึงพร็อกซี API สำหรับส่วนขยาย
โฮสต์เสมือนยังกำหนดด้วยว่าจะเข้าถึงพร็อกซี API โดยใช้โปรโตคอล HTTP หรือโดยโปรโตคอล HTTPS ที่เข้ารหัสที่ใช้ TLS เมื่อกำหนดค่าโฮสต์เสมือนให้ใช้ HTTPS และ TLS คุณจะสร้างโฮสต์เสมือนบน Edge และกำหนดค่าโฮสต์เสมือนให้ใช้ keystore และ Truststore
ดูข้อมูลเพิ่มเติม
- เกี่ยวกับ TLS/SSL
- การใช้ TLS กับ Edge
- เกี่ยวกับโฮสต์เสมือน
- การกำหนดค่าโฮสต์เสมือนสำหรับ Private Cloud
- การอ้างอิงพร็อพเพอร์ตี้โฮสต์เสมือน
- คีย์สโตร์และ Truststore
สิ่งที่ต้องมีในการสร้างโฮสต์เสมือน
ก่อนสร้างโฮสต์เสมือน คุณควรมีข้อมูลต่อไปนี้
- ชื่อโดเมนที่เปิดเผยต่อสาธารณะของโฮสต์เสมือน เช่น คุณควรทราบว่าชื่อที่เปิดเผยต่อสาธารณะคือ
api.myCompany.com
,myapi.myCompany.com
ฯลฯ ระบบจะใช้ข้อมูลนี้เมื่อคุณสร้างโฮสต์เสมือนและเมื่อสร้างระเบียน DNS สำหรับโฮสต์เสมือน -
สำหรับ TLS ทางเดียว คุณต้องสร้างคีย์สโตร์ที่คีย์สโตร์มีข้อมูลต่อไปนี้
- ใบรับรอง TLS - ไม่ว่าจะเป็นใบรับรองที่ลงชื่อโดยผู้ออกใบรับรอง (CA) หรือชุดใบรับรองที่ CA ลงชื่อล่าสุดกำกับไว้
- คีย์ส่วนตัว - Edge รองรับคีย์สูงสุด 2,048 บิต คุณจะใส่รหัสผ่านหรือไม่ก็ได้
- สำหรับ TLS แบบ 2 ทาง คุณต้องมีคีย์สโตร์ และต้องมี Truststore เพื่อเก็บใบรับรองของไคลเอ็นต์ รวมถึงเชน CA ของใบรับรองด้วย (ไม่บังคับ) คุณจำเป็นต้องใช้ Truststore แม้ว่าใบรับรองจะลงชื่อโดย CA ก็ตาม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างคีย์สโตร์และ Truststore ที่ Keystores และ Truststores
การกำหนดค่าโฮสต์เสมือนสำหรับ TLS
หากต้องการสร้างโฮสต์เสมือน ให้สร้างออบเจ็กต์ XML ที่กำหนดโฮสต์เสมือน
ออบเจ็กต์ XML ต่อไปนี้ใช้องค์ประกอบ <SSLInfo>
เพื่อกำหนดโฮสต์เสมือนสำหรับการกำหนดค่า TLS ทางเดียวผ่าน HTTPS
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>apiTLS.myCompany.com</HostAlias> </HostAliases> <Interfaces/> <Port>9006</Port> <OCSPStapling>off</OCSPStapling> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://myTestKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo> </VirtualHost>
ในตัวอย่างนี้ องค์ประกอบ <Enabled>
ตั้งค่าเป็น "จริง" เพื่อเปิดใช้ TLS แบบทางเดียว และองค์ประกอบ <KeyStore>
และ <KeyAlias>
จะระบุคีย์สโตร์และคีย์ที่การเชื่อมต่อ TLS ใช้
หากต้องการเปิดใช้ TLS แบบ 2 ทาง ให้ตั้งค่าองค์ประกอบ <ClientAuthEnabled>
เป็น true
แล้วระบุ Truststore โดยใช้องค์ประกอบ <TrustStore>
Truststore จะเก็บใบรับรองของไคลเอ็นต์ไว้และสาย CA ของใบรับรอง (ไม่บังคับ)
กำลังตัดสินใจเกี่ยวกับวิธีระบุชื่อคีย์สโตร์และ Truststore ในโฮสต์เสมือน
ในตัวอย่างโฮสต์เสมือนข้างต้น คุณระบุคีย์สโตร์โดยใช้ข้อมูลอ้างอิง ข้อมูลอ้างอิงคือตัวแปรที่มีชื่อของคีย์สโตร์แทนการระบุชื่อคีย์สโตร์โดยตรง
ข้อดีของการใช้ข้อมูลอ้างอิงคือคุณสามารถเปลี่ยนค่าของข้อมูลอ้างอิงเพื่อเปลี่ยนคีย์สโตร์ที่ใช้โดยโฮสต์เสมือน ซึ่งโดยปกติแล้วเป็นเพราะใบรับรองในคีย์สโตร์ปัจจุบันกำลังจะหมดอายุในอนาคตอันใกล้ การเปลี่ยนค่าการอ้างอิงไม่ได้กำหนดให้คุณต้องรีสตาร์ทเราเตอร์ Edge
หรือคุณจะใช้ชื่อคีย์สโตร์แบบลิเทอรัลในโฮสต์เสมือนก็ได้ อย่างไรก็ตาม หากจะแก้ไขโฮสต์เสมือนเพื่อเปลี่ยนชื่อคีย์สโตร์ คุณจะต้องรีสตาร์ทเราเตอร์ Edge
ข้อจำกัดในการใช้การอ้างอิงคีย์สโตร์และ Truststore
คุณต้องคำนึงถึงข้อจำกัดต่อไปนี้เมื่อใช้การอ้างอิงไปยังคีย์สโตร์และ Truststore
- คุณจะใช้การอ้างอิงคีย์สโตร์และ Truststore ในโฮสต์เสมือนได้ก็ต่อเมื่อคุณรองรับ SNI และสิ้นสุด SSL ในเราเตอร์ Apigee
- หากคุณมีตัวจัดสรรภาระงานด้านหน้าเราเตอร์ Apigee และยุติ TLS บนตัวจัดสรรภาระงาน คุณจะใช้การอ้างอิงคีย์สโตร์และ Truststore ในโฮสต์เสมือนไม่ได้
การแก้ไขโฮสต์เสมือนที่มีอยู่เพื่อใช้การอ้างอิงไปยังคีย์สโตร์และ Truststore
Apigee ขอแนะนำอย่างยิ่งให้โฮสต์เสมือนใช้การอ้างถึงคีย์สโตร์และ Truststore การอ้างอิงช่วยให้คุณเปลี่ยนคีย์สโตร์และ Truststore ที่โฮสต์เสมือนใช้ได้โดยไม่ต้องรีสตาร์ทเราเตอร์ Edge
หากปัจจุบันโฮสต์เสมือนได้รับการกำหนดค่าให้ใช้ชื่อตามตัวอักษรของคีย์สโตร์หรือ Truststore คุณจะแปลงโฮสต์ดังกล่าวเพื่อใช้การอ้างอิงได้ โดยอัปเดตโฮสต์เสมือนเพื่อใช้การอ้างอิง จากนั้นรีสตาร์ทเราเตอร์ Edge
การตั้งค่าการเข้ารหัส TLS และโปรโตคอลสำหรับ Edge 4.15.07 และเวอร์ชันก่อนหน้า
หากใช้ Edge เวอร์ชัน 4.15.07 และเก่ากว่า ให้ตั้งค่าโปรโตคอล TLS และการเข้ารหัสที่โฮสต์เสมือนใช้อยู่โดยใช้แท็กย่อย <Ciphers>
และ <Protocols>
ของแท็ก <SSLInfo>
เราได้อธิบายแท็กเหล่านี้ไว้ในตารางด้านล่าง
เช่น
<SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>myTestKeystore</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>myTestKeystore</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <Ciphers> <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Cipher> <Cipher>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Cipher> </Ciphers> <Protocols> <Protocol>TLSv1.2</Protocol> </Protocols> </SSLInfo> </SSLInfo>
แท็ก <Cipher>
ใช้ชื่อ Java และ JSSE ของการเข้ารหัส ตัวอย่างเช่น สำหรับ Java 8 โปรดดู
http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites
การระบุการเข้ารหัส TLS และโปรโตคอลสำหรับ Edge 4.16.01 ถึง 4.16.09
ใน Edge 4.16.01 ถึง 4.16.09 คุณต้องตั้งค่าการเข้ารหัสและโปรโตคอลเริ่มต้นสำหรับโฮสต์เสมือนทั่วโลกบนเราเตอร์ จากนั้นค่าเริ่มต้นเหล่านี้จะมีผลกับโฮสต์เสมือนทั้งหมด
ใช้โทเค็นเพื่อระบุโปรโตคอลและการเข้ารหัสเริ่มต้น ดังนี้
- หากต้องการระบุโปรโตคอลเริ่มต้น ให้ใช้โทเค็น
conf_load_balancing_load.balancing.driver.server.ssl.protocols
- หากต้องการระบุการเข้ารหัสเริ่มต้นสำหรับเราเตอร์ ให้ใช้โทเค็น
conf_load_balancing_load.balancing.driver.server.ssl.ciphers
ค่าเริ่มต้นของโทเค็น conf_load_balancing_load.balancing.driver.server.ssl.protocols
คือ
conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
การตั้งค่านี้ระบุว่าเราเตอร์รองรับ TLS เวอร์ชัน 1.0, 1.1 และ 1.2 ระบุรายการค่าที่คั่นด้วยช่องว่างสำหรับโทเค็น
ค่าเริ่มต้นของโทเค็น conf_load_balancing_load.balancing.driver.server.ssl.ciphers
คือ
conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES
การตั้งค่านี้ระบุข้อมูลต่อไปนี้
- ความยาวคีย์เท่ากับ 128 บิตขึ้นไป (
HIGH
) - ยกเว้นการเข้ารหัสที่ไม่มีการตรวจสอบสิทธิ์ (
!aNULL
) - ไม่รวมชุดการเข้ารหัสที่ใช้ MD5 (
!MD5
) - ยกเว้นชุดการเข้ารหัสโดยใช้ DH (รวมถึง DH ที่ไม่ระบุตัวตน, DH ชั่วคราวและ DH แบบคงที่) และ DES สามรายการ (
!DH+3DES
) - ไม่รวมชุดการเข้ารหัสโดยใช้การแลกเปลี่ยนคีย์ RSA และ DES สามชุด (
!RSA+3DES
)
ดูข้อมูลเกี่ยวกับไวยากรณ์และค่าที่โทเค็นนี้อนุญาตได้ที่การเข้ารหัส OpenSSL โปรดทราบว่าโทเค็นนี้ใช้ชื่อการเข้ารหัส OpenSSL เช่น AES128-SHA256 ไม่ใช่ชื่อการเข้ารหัส Java/JSSE เช่น TLS_RSA_WITH_AES_128_CBC_SHA256
วิธีตั้งค่าโทเค็นสำหรับเราเตอร์
- แก้ไขไฟล์
/opt/apigee/customer/application/router.properties
หากยังไม่มี ให้สร้างไฟล์ดังกล่าว - ตั้งค่าโทเค็น
conf_load_balancing_load.balancing.driver.server.ssl.ciphers
เช่น หากต้องการระบุ TLSv1.2 เท่านั้นและยกเว้นชุดการเข้ารหัสโดยใช้คีย์ที่แชร์ล่วงหน้า ให้เพิ่ม!PSK
:conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1.2 conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES:!PSK
- ตรวจสอบว่าไฟล์
router.properties
เป็นของ Apigee:chown apigee:apigee /opt/apigee/customer/application/router.properties
- รีสตาร์ทเราเตอร์ Edge โดยทำดังนี้
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- ตรวจสอบค่าของโทเค็น ดังนี้
/opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers
การตั้งค่าพารามิเตอร์โฮสต์เสมือนของ TLS สำหรับ Edge เวอร์ชัน 4.17.01 ขึ้นไป
หากใช้ Edge เวอร์ชัน 4.17.01 ขึ้นไป คุณจะตั้งค่าพร็อพเพอร์ตี้ TLS บางรายการสําหรับโฮสต์เสมือนแต่ละรายการได้ เช่น โปรโตคอล TLS และการเข้ารหัส โดยใช้แท็กย่อย <Properties>
ของแท็ก <VirtualHost>
คุณสามารถดูคำอธิบายเกี่ยวกับแท็กเหล่านี้ได้ที่การอ้างอิงพร็อพเพอร์ตี้โฮสต์เสมือน
เช่น
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>apiTLS.myCompany.com</HostAlias> </HostAliases> <Interfaces/> <Port>9006</Port> <OCSPStapling>off</OCSPStapling> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://myTestKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo> <Properties> <Property name="proxy_read_timeout">50</Property> <Property name="keepalive_timeout">300</Property> <Property name="proxy_request_buffering">off</Property> <Property name="proxy_buffering">off</Property> <Property name="ssl_protocols">TLSv1.2 TLSv1.1</Property> <Property name="ssl_ciphers">HIGH:!aNULL:!MD5:!DH+3DES:!kEDH</Property> </Properties> </VirtualHost>
ดูข้อมูลเกี่ยวกับไวยากรณ์และค่าที่โทเค็น ssl_ciphers
อนุญาตได้ที่การเข้ารหัส OpenSSL
โปรดทราบว่าโทเค็นนี้ใช้ชื่อการเข้ารหัส OpenSSL เช่น AES128-SHA256 ไม่ใช่ชื่อการเข้ารหัส Java/JSSE เช่น TLS_RSA_WITH_AES_128_CBC_SHA256
การสร้างโฮสต์เสมือนที่ใช้ HTTPS
ตัวอย่างนี้ระบุคีย์สโตร์ให้กับโฮสต์เสมือนโดยใช้การอ้างอิง การใช้ข้อมูลอ้างอิงจะช่วยให้คุณเปลี่ยนคีย์สโตร์ได้โดยไม่ต้องรีสตาร์ทเราเตอร์
ใช้ขั้นตอนต่อไปนี้เพื่อสร้างโฮสต์เสมือน
- สร้างและกำหนดค่าคีย์สโตร์ชื่อ myTestKeystore โดยใช้กระบวนการซึ่งอธิบายไว้ที่นี่: Keystores และ Truststores ตรวจสอบว่าคีย์สโตร์ใช้ชื่อชื่อแทนของ myKeyAlias สำหรับใบรับรองและคีย์ส่วนตัว
-
ใช้การเรียก POST API ต่อไปนี้เพื่อสร้างข้อมูลอ้างอิงชื่อ keystoreref ไปยังคีย์สโตร์ที่คุณสร้างไว้ข้างต้น
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \ -d '<ResourceReference name="keystoreref"> <Refers>myTestKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>' -u email:password
ข้อมูลอ้างอิงระบุชื่อคีย์สโตร์และประเภทการอ้างอิงเป็น
KeyStore
ใช้การเรียก GET API ต่อไปนี้เพื่อดูข้อมูลอ้างอิง
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
สร้างโฮสต์เสมือนโดยใช้ API สร้างโฮสต์เสมือน โดยที่
<ms-IP>
คือที่อยู่ IP หรือชื่อโดเมนของโหนดเซิร์ฟเวอร์การจัดการตรวจสอบว่าได้ระบุการอ้างอิงคีย์สโตร์และชื่อแทนคีย์ที่ถูกต้องแล้ว
curl -X POST -H "Content-Type:application/xml" \ http://<ms-IP>:8080/v1/o/{org_name}/environments/{env_name}/virtualhosts \ -d '<VirtualHost name="newTLSTrustStore2"> <HostAliases> <HostAlias>apiTLS.myCompany.com</HostAlias> </HostAliases> <Interfaces/> <Port>9005</Port> <OCSPStapling>off</OCSPStapling> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://keystoreref</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo> </VirtualHost>' \ -u email:password
- สร้างระเบียน DNS สำหรับโฮสต์เสมือนที่ตรงกับชื่อแทนโฮสต์
หากคุณมีพร็อกซี API อยู่แล้ว ให้เพิ่มโฮสต์เสมือนไปยังองค์ประกอบ
<HTTPConnection>
ใน ProxyEndpoint ระบบจะเพิ่มโฮสต์เสมือนลงในพร็อกซี API ใหม่ทั้งหมดโดยอัตโนมัติโปรดดูการอัปเดตพร็อกซี API หลังจากสร้างโฮสต์เสมือนในหัวข้อเกี่ยวกับโฮสต์เสมือน
หลังจากอัปเดตพร็อกซี API เพื่อใช้โฮสต์เสมือน และสร้างระเบียน DNS สำหรับชื่อแทนโฮสต์ คุณจะเข้าถึงพร็อกซี API ได้ดังที่แสดงด้านล่าง
https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}
เช่น
https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282
การสร้างและการแก้ไขการอ้างอิงไปยังคีย์สโตร์หรือ Truststore
คุณจะกำหนดค่าโฮสต์เสมือนให้ใช้การอ้างอิงไปยังคีย์สโตร์หรือ Truststore แทนก็ได้ ข้อดีของการใช้ข้อมูลอ้างอิงคือคุณสามารถอัปเดตข้อมูลอ้างอิงให้ชี้ไปยังคีย์สโตร์หรือ Truststore อื่นเพื่ออัปเดตใบรับรอง TLS โดยไม่ต้องรีสตาร์ทเราเตอร์
ตัวอย่างด้านล่างแสดงโฮสต์เสมือนที่ใช้การอ้างอิงไปยังคีย์สโตร์
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>apiTLS.myCompany.com</HostAlias> </HostAliases> <Interfaces/> <Port>9006</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://keystoreref</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo> </VirtualHost>
ใช้การเรียก POST API ต่อไปนี้เพื่อสร้างข้อมูลอ้างอิงชื่อ keystoreref
curl -X POST -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \ -d '<ResourceReference name="keystoreref"> <Refers>myTestKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>' -u email:password
ข้อมูลอ้างอิงจะระบุชื่อของคีย์สโตร์และประเภท
ใช้การเรียก GET API ต่อไปนี้เพื่อดูข้อมูลอ้างอิง
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
หากต้องการเปลี่ยนการอ้างอิงให้ชี้ไปที่คีย์สโตร์อื่นในภายหลัง โดยให้ตรวจสอบว่าชื่อแทนมีชื่อเดียวกัน ให้ใช้การเรียกใช้ PUT ต่อไปนี้
curl -X PUT -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references/keystoreref \ -d '<ResourceReference name="keystoreref"> <Refers>myNewKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>' -u email:password