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

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

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

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

ดูข้อมูลเพิ่มเติม

สิ่งที่ต้องมีในการสร้างโฮสต์เสมือน

ก่อนสร้างโฮสต์เสมือน คุณควรมีข้อมูลต่อไปนี้

  • ชื่อโดเมนที่เปิดเผยต่อสาธารณะของโฮสต์เสมือน ตัวอย่างเช่น คุณควรทราบว่า ชื่อที่เปิดเผยต่อสาธารณะคือ api.myCompany.com, myapi.myCompany.com ฯลฯ ข้อมูลดังกล่าว ใช้เมื่อคุณสร้างโฮสต์เสมือน และเมื่อคุณสร้างระเบียน DNS สำหรับ โฮสต์เสมือน
  • สำหรับ TLS แบบทางเดียว คุณต้องสร้างคีย์สโตร์ซึ่งมีคีย์สโตร์ที่มี ดังต่อไปนี้
    • ใบรับรอง TLS - ใบรับรองที่ลงชื่อโดยผู้ออกใบรับรอง (CA) หรือ ชุดใบรับรองซึ่งใบรับรองฉบับสุดท้ายได้รับการลงนามจาก CA
    • คีย์ส่วนตัว - Edge รองรับขนาดคีย์สูงสุด 2,048 บิต คุณจะใส่รหัสผ่านหรือไม่ก็ได้
  • สำหรับ TLS แบบ 2 ทาง คุณจะต้องมีคีย์สโตร์และ Truststore เพื่อเก็บคีย์ ใบรับรองของไคลเอ็นต์ และเชน CA ของใบรับรอง (ไม่บังคับ) คุณต้องมี Truststore ใบรับรองนี้ลงชื่อโดย CA

ดูคีย์สโตร์และ Truststore เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างคีย์สโตร์และ 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> จะระบุคีย์สโตร์ และคีย์ที่การเชื่อมต่อ TLS ใช้

หากต้องการเปิดใช้ TLS แบบ 2 ทาง ให้ตั้งค่าองค์ประกอบ <ClientAuthEnabled> เป็น true และระบุ Truststore โดยใช้ <TrustStore> Truststore จะเก็บใบรับรองของไคลเอ็นต์และ CA ของใบรับรอง (ไม่บังคับ) เชนธุรกิจ

การตัดสินใจเลือกวิธีระบุคีย์สโตร์และชื่อ Truststore ในโฮสต์เสมือน

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

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

อีกวิธีหนึ่งคือ คุณสามารถใช้ชื่อคีย์สโตร์แบบลิเทอรัลในโฮสต์เสมือน แต่ถ้าคุณเคย แก้ไขโฮสต์เสมือนเพื่อเปลี่ยนชื่อคีย์สโตร์ คุณจะต้องรีสตาร์ท Edge Router

ข้อจำกัดในการใช้การอ้างอิงไปยังคีย์สโตร์และ Truststore

คุณต้องคำนึงถึงข้อจำกัดต่อไปนี้เมื่อใช้การอ้างอิงคีย์สโตร์และ Truststores:

  • คุณสามารถใช้การอ้างอิง keystore และ Truststore ในโฮสต์เสมือนเท่านั้นหากคุณรองรับ SNI และ คุณจะสิ้นสุด SSL บนเราเตอร์ Apigee
  • หากคุณมีตัวจัดสรรภาระงานอยู่หน้าเราเตอร์ Apigee และคุณสิ้นสุด TLS ใน ตัวจัดสรรภาระงาน คุณจึงไม่สามารถใช้การอ้างอิงคีย์สโตร์และการอ้างอิง Truststore ในระบบเสมือน ผู้จัดรายการ

การแก้ไขโฮสต์เสมือนที่มีอยู่เพื่อใช้การอ้างอิงไปยังคีย์สโตร์และ Truststore

Apigee ขอแนะนำโฮสต์เสมือนให้ใช้การอ้างอิงไปยังคีย์สโตร์และ Truststore การอ้างอิงช่วยให้คุณเปลี่ยนคีย์สโตร์และ Truststore ที่โฮสต์เสมือนใช้ได้โดยไม่ต้อง โดยต้องรีสตาร์ท Edge Router

หากมีการกำหนดค่าโฮสต์เสมือนของคุณให้ใช้ชื่อตามตัวอักษรของคีย์สโตร์ หรือ Truststore เพื่อแปลงให้ไปใช้การอ้างอิง โดยอัปเดตโฮสต์เสมือนเพื่อใช้ อ้างอิง จากนั้นรีสตาร์ท Edge Router

การตั้งค่าการเข้ารหัส 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 คงที่) และ 3 DES (!DH+3DES)
  • ไม่รวมชุดการเข้ารหัสโดยใช้การแลกเปลี่ยนคีย์ RSA AND สาม 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 Router โดยทำตามขั้นตอนดังนี้
    /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 โดยใช้เมธอด ซึ่งอธิบายไว้ที่นี่: คีย์สโตร์และ Truststore ตรวจสอบว่าคีย์สโตร์ใช้ชื่อแทน ของ myKeyAlias สำหรับใบรับรองและคีย์ส่วนตัว
  2. ใช้การเรียก 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

    ใช้การเรียก 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