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

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

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

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

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

  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

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

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

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

การสร้างและแก้ไขข้อมูลอ้างอิง ไปยัง 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