คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
โฮสต์เสมือนใน Edge จะกำหนดโดเมนและพอร์ตที่พร็อกซี API จะแสดง และโดย ส่วนขยายแล้ว URL ที่แอปใช้เพื่อเข้าถึงพร็อกซี API
นอกจากนี้ โฮสต์เสมือนยังกำหนดด้วยว่าพร็อกซี API จะเข้าถึงโดยใช้โปรโตคอล HTTP หรือ โดยโปรโตคอล HTTPS ที่เข้ารหัสซึ่งใช้ TLS เมื่อกำหนดค่าโฮสต์เสมือนให้ใช้ HTTPS และ TLS คุณจะสร้างโฮสต์เสมือนใน Edge และกำหนดค่าโฮสต์เสมือนให้ใช้ Keystore และ Truststore
ดูข้อมูลเพิ่มเติม
- เกี่ยวกับ TLS/SSL
- การใช้ TLS กับ Edge
- เกี่ยวกับโฮสต์เสมือน
- การกำหนดค่าโฮสต์เสมือนสำหรับ Private Cloud
- ข้อมูลอ้างอิงพร็อพเพอร์ตี้ของโฮสต์เสมือน
- Keystore และ Truststore
สิ่งที่ต้องมีในการสร้างโฮสต์เสมือน
ก่อนสร้างโฮสต์เสมือน คุณควรมีข้อมูลต่อไปนี้
- ชื่อโดเมนที่เปิดเผยต่อสาธารณะของโฮสต์เสมือน เช่น คุณควรรู้ว่าชื่อที่เปิดเผยต่อสาธารณะคือ
api.myCompany.com,myapi.myCompany.comและอื่นๆ ระบบจะใช้ข้อมูลดังกล่าวเมื่อคุณสร้างโฮสต์เสมือนและเมื่อสร้างระเบียน DNS สำหรับโฮสต์เสมือน -
**สำหรับ TLS ทางเดียว** คุณต้องสร้าง Keystore ที่มีสิ่งต่อไปนี้
- ใบรับรอง TLS - ใบรับรองที่ลงนามโดยผู้ออกใบรับรอง (CA) หรือ ชุดใบรับรองที่ใบรับรองสุดท้ายลงนามโดย CA
- คีย์ส่วนตัว - Edge รองรับคีย์ขนาดสูงสุด 2048 บิต คุณจะใช้พาสเฟรสหรือไม่ก็ได้
- สำหรับ TLS สองทาง คุณต้องมี Keystore และ Truststore เพื่อเก็บ ใบรับรองของไคลเอ็นต์และชุดใบรับรอง CA (ไม่บังคับ) คุณต้องมี Truststore แม้ว่า ใบรับรองจะลงนามโดย CA ก็ตาม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้าง Keystore และ Truststore ได้ที่ Keystore และ Truststore
การกำหนดค่าโฮสต์เสมือนสำหรับ 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> จะระบุ Keystore
และคีย์ที่การเชื่อมต่อ TLS ใช้
หากต้องการเปิดใช้ TLS สองทาง ให้ตั้งค่าองค์ประกอบ <ClientAuthEnabled> เป็น
true และระบุ Truststore
โดยใช้องค์ประกอบ <TrustStore>
Truststore จะเก็บใบรับรองของไคลเอ็นต์และชุดใบรับรอง CA
(ไม่บังคับ)
การตัดสินใจว่าจะระบุชื่อ Keystore และ Truststore ในโฮสต์เสมือนอย่างไร
ในตัวอย่างโฮสต์เสมือนด้านบน คุณระบุ Keystore โดยใช้ ข้อมูลอ้างอิง ข้อมูลอ้างอิงคือตัวแปรที่มีชื่อของ Keystore แทนที่จะระบุชื่อ Keystore โดยตรง
ข้อดีของการใช้ข้อมูลอ้างอิงคือ คุณสามารถเปลี่ยนค่าของข้อมูลอ้างอิงเพื่อเปลี่ยน Keystore ที่โฮสต์เสมือนใช้ ซึ่งมักจะเป็นเพราะใบรับรองใน Keystore ปัจจุบันกำลังจะ หมดอายุในอนาคตอันใกล้ การเปลี่ยนค่าของข้อมูลอ้างอิงไม่จำเป็นต้องให้คุณรีสตาร์ท เราเตอร์ Edge
หรือคุณจะใช้ชื่อ Keystore แบบสัญพจน์ในโฮสต์เสมือนก็ได้ อย่างไรก็ตาม หากคุณแก้ไขโฮสต์เสมือนเพื่อเปลี่ยนชื่อ Keystore คุณจะต้องรีสตาร์ทเราเตอร์ Edge
ข้อจำกัดในการใช้ข้อมูลอ้างอิงกับ Keystore และ Truststore
คุณต้องคำนึงถึงข้อจำกัดต่อไปนี้เมื่อใช้ข้อมูลอ้างอิงกับ Keystore และ Truststore
- คุณจะใช้ข้อมูลอ้างอิง Keystore และ Truststore ในโฮสต์เสมือนได้ก็ต่อเมื่อคุณรองรับ SNI และ คุณยกเลิก SSL ในเราเตอร์ Apigee
- หากคุณมีตัวจัดสรรภาระงานอยู่หน้าเราเตอร์ Apigee และยกเลิก TLS ในตัวจัดสรรภาระงาน คุณจะใช้ข้อมูลอ้างอิง Keystore และ Truststore ในโฮสต์เสมือน ไม่ได้
การแก้ไขโฮสต์เสมือนที่มีอยู่ให้ใช้ข้อมูลอ้างอิงกับ Keystore และ Truststore
Apigee ขอแนะนำอย่างยิ่งให้โฮสต์เสมือนใช้ข้อมูลอ้างอิงกับ Keystore และ Truststore ข้อมูลอ้างอิงช่วยให้คุณเปลี่ยน Keystore และ Truststore ที่โฮสต์เสมือนใช้ได้โดยไม่ต้อง รีสตาร์ทเราเตอร์ Edge
หากปัจจุบันโฮสต์เสมือนกำหนดค่าให้ใช้ชื่อ Keystore หรือ 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 3 ชั้น (
!DH+3DES) - ไม่รวมชุดการเข้ารหัสที่ใช้การแลกเปลี่ยนคีย์ RSA และ DES 3 ชั้น (
!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 เท่านั้นและไม่รวมชุดการเข้ารหัสที่ใช้คีย์ที่แชร์ไว้ล่วงหน้า เพิ่ม!PSKconf_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
ตัวอย่างนี้ระบุ Keystore ให้กับโฮสต์เสมือนโดยใช้ข้อมูลอ้างอิง การใช้ข้อมูลอ้างอิงช่วยให้คุณเปลี่ยน Keystore ได้โดยไม่ต้องรีสตาร์ทเราเตอร์
ใช้ขั้นตอนต่อไปนี้เพื่อสร้างโฮสต์เสมือน
- สร้างและกำหนดค่า Keystore ชื่อ myTestKeystore โดยใช้ ขั้นตอนที่อธิบายไว้ที่นี่: Keystores และ Truststores ตรวจสอบว่า Keystore ใช้ชื่อแทน ของ myKeyAlias สำหรับใบรับรองและคีย์ส่วนตัว
-
ใช้การเรียก API POST ต่อไปนี้เพื่อสร้างข้อมูลอ้างอิง ชื่อ keystoreref ไปยัง Keystore ที่คุณสร้างไว้ข้างต้น
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 และประเภทข้อมูลอ้างอิงเป็น
KeyStoreใช้การเรียก API GET ต่อไปนี้เพื่อดูข้อมูลอ้างอิง
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password สร้างโฮสต์เสมือนโดยใช้ API สร้าง โฮสต์เสมือน โดยที่
<ms-IP>คือที่อยู่ IP หรือชื่อโดเมนของโหนดเซิร์ฟเวอร์การจัดการตรวจสอบว่าได้ระบุข้อมูลอ้างอิง Keystore และชื่อแทนคีย์ที่ถูกต้อง
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
การสร้างและแก้ไขข้อมูลอ้างอิง ไปยัง Keystore หรือ Truststore
คุณกำหนดค่าโฮสต์เสมือนให้ใช้ ข้อมูลอ้างอิงไปยัง Keystore หรือ Truststore แทนได้ (ไม่บังคับ) ข้อดีของการใช้ข้อมูลอ้างอิงคือ คุณสามารถอัปเดตข้อมูลอ้างอิงให้ชี้ไปยัง Keystore หรือ Truststore อื่นเพื่ออัปเดตใบรับรอง TLS ได้โดยไม่ต้องรีสตาร์ทเราเตอร์
ตัวอย่างเช่น โฮสต์เสมือนที่ใช้ข้อมูลอ้างอิงไปยัง Keystore จะแสดงอยู่ด้านล่าง
<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>ใช้การเรียก API POST ต่อไปนี้เพื่อสร้างข้อมูลอ้างอิงชื่อ 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
ใช้การเรียก API GET ต่อไปนี้เพื่อดูข้อมูลอ้างอิง
curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
หากต้องการเปลี่ยนข้อมูลอ้างอิงให้ชี้ไปยัง Keystore อื่นในภายหลัง โดยตรวจสอบว่าชื่อแทนมี ชื่อเดียวกัน ให้ใช้การเรียก 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