การกําหนดค่าการเข้าถึง TLS สําหรับ API ของ Private Cloud

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

โฮสต์เสมือนบน Edge กำหนดโดเมนและพอร์ตที่มีการแสดงพร็อกซี API รวมถึง URL ที่แอปใช้เพื่อเข้าถึงพร็อกซี API สำหรับส่วนขยาย

โฮสต์เสมือนยังกำหนดด้วยว่าจะเข้าถึงพร็อกซี API โดยใช้โปรโตคอล HTTP หรือโดยโปรโตคอล HTTPS ที่เข้ารหัสที่ใช้ TLS เมื่อกำหนดค่าโฮสต์เสมือนให้ใช้ HTTPS และ TLS คุณจะสร้างโฮสต์เสมือนบน Edge และกำหนดค่าโฮสต์เสมือนให้ใช้ keystore และ 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

วิธีตั้งค่าโทเค็นสำหรับเราเตอร์

  1. แก้ไขไฟล์ /opt/apigee/customer/application/router.properties หากยังไม่มี ให้สร้างไฟล์ดังกล่าว
  2. ตั้งค่าโทเค็น 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
  3. ตรวจสอบว่าไฟล์ router.properties เป็นของ Apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. รีสตาร์ทเราเตอร์ Edge โดยทำดังนี้
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. ตรวจสอบค่าของโทเค็น ดังนี้
    /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

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

ใช้ขั้นตอนต่อไปนี้เพื่อสร้างโฮสต์เสมือน

  1. สร้างและกำหนดค่าคีย์สโตร์ชื่อ myTestKeystore โดยใช้กระบวนการซึ่งอธิบายไว้ที่นี่: Keystores และ Truststores ตรวจสอบว่าคีย์สโตร์ใช้ชื่อชื่อแทนของ myKeyAlias สำหรับใบรับรองและคีย์ส่วนตัว
  2. ใช้การเรียก 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
    
  3. สร้างโฮสต์เสมือนโดยใช้ 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
  4. สร้างระเบียน DNS สำหรับโฮสต์เสมือนที่ตรงกับชื่อแทนโฮสต์
  5. หากคุณมีพร็อกซี 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