پیکربندی دسترسی TLS به یک API برای Private Cloud

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

یک میزبان مجازی در اج، دامنه‌ها و پورت‌هایی را که یک پروکسی API در معرض آنها قرار دارد، و به طور کلی، URL ای را که برنامه‌ها برای دسترسی به یک پروکسی API استفاده می‌کنند، تعریف می‌کند.

یک میزبان مجازی همچنین تعریف می‌کند که آیا پروکسی API با استفاده از پروتکل HTTP یا توسط پروتکل رمزگذاری شده HTTPS که از TLS استفاده می‌کند، قابل دسترسی است. هنگام پیکربندی یک میزبان مجازی برای استفاده از HTTPS و TLS، شما یک میزبان مجازی در Edge ایجاد می‌کنید و میزبان مجازی را برای استفاده از یک keystore و truststore پیکربندی می‌کنید.

بیشتر بدانید:

آنچه برای ایجاد یک میزبان مجازی نیاز دارید

قبل از ایجاد یک میزبان مجازی، باید اطلاعات زیر را داشته باشید:

  • نام دامنه‌ی عمومی میزبان مجازی. برای مثال، باید بدانید که آیا نام عمومی api.myCompany.com ، myapi.myCompany.com و غیره است یا خیر. این اطلاعات هنگام ایجاد میزبان مجازی و همچنین هنگام ایجاد رکورد DNS برای میزبان مجازی استفاده می‌شود.
  • برای TLS یک‌طرفه ، باید یک keystore ایجاد کنید که شامل موارد زیر باشد:
    • گواهی TLS - یا گواهی امضا شده توسط یک مرجع صدور گواهی (CA) یا زنجیره‌ای از گواهی‌ها که در آن آخرین گواهی توسط یک مرجع صدور گواهی امضا شده است.
    • کلید خصوصی - Edge از اندازه کلید تا ۲۰۴۸ بیت پشتیبانی می‌کند. عبارت عبور اختیاری است.
  • برای TLS دوطرفه ، به یک keystore و یک truststore برای نگهداری گواهی کلاینت و در صورت تمایل، زنجیره CA گواهی نیاز دارید. حتی اگر گواهی توسط یک CA امضا شده باشد، به 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 یک طرفه روی true تنظیم شده است و عناصر <KeyStore> و KeyAlias> کلید اصلی و کلید مورد استفاده توسط اتصال TLS را مشخص می‌کنند.

برای فعال کردن TLS دوطرفه، عنصر <ClientAuthEnabled> را روی true تنظیم کنید و با استفاده از عنصر <TrustStore> یک truststore مشخص کنید. truststore گواهی کلاینت و در صورت تمایل، زنجیره CA گواهی را در خود نگه می‌دارد.

تصمیم‌گیری در مورد نحوه مشخص کردن نام keystore و truststore در میزبان مجازی

در مثال میزبان مجازی بالا، شما با استفاده از یک ارجاع ، کلید اصلی را مشخص کردید. ارجاع متغیری است که نام کلید اصلی را در خود جای می‌دهد، نه اینکه مستقیماً نام کلید اصلی را مشخص کند.

مزیت استفاده از مرجع این است که می‌توانید مقدار مرجع را برای تغییر keystore مورد استفاده توسط میزبان مجازی تغییر دهید، معمولاً به این دلیل که گواهی موجود در keystore فعلی در آینده نزدیک منقضی می‌شود. تغییر مقدار مرجع نیازی به راه‌اندازی مجدد Edge Router ندارد.

به عنوان یک روش جایگزین، می‌توانید از یک نام کلید اصلی تحت‌اللفظی در میزبان مجازی استفاده کنید. با این حال، اگر میزبان مجازی را برای تغییر نام کلید اصلی تغییر دهید، باید روترهای لبه را مجدداً راه‌اندازی کنید.

محدودیت‌های استفاده از ارجاعات به keystoreها و truststoreها

هنگام استفاده از ارجاعات به keystoreها و truststoreها، باید محدودیت‌های زیر را در نظر بگیرید:

  • شما فقط در صورتی می‌توانید از منابع keystore و truststore در میزبان‌های مجازی استفاده کنید که از SNI پشتیبانی کنید و SSL را در روترهای Apigee خاتمه دهید.
  • اگر یک متعادل‌کننده بار در مقابل روترهای Apigee دارید و TLS را روی متعادل‌کننده بار خاتمه می‌دهید، نمی‌توانید از ارجاعات keystore و truststore در میزبان‌های مجازی استفاده کنید.

اصلاح یک میزبان مجازی موجود برای استفاده از ارجاعات به keystore و truststore

شرکت Apigee اکیداً توصیه می‌کند که میزبان‌های مجازی از ارجاع به keystoreها و truststoreها استفاده کنند. ارجاع‌ها به شما امکان می‌دهند keystore و truststore مورد استفاده توسط میزبان مجازی را بدون نیاز به راه‌اندازی مجدد روترهای لبه (Edge Routers) تغییر دهید.

اگر میزبان‌های مجازی شما در حال حاضر طوری پیکربندی شده‌اند که از نام تحت‌اللفظی فروشگاه کلید یا فروشگاه اعتماد استفاده کنند، می‌توانید آنها را به استفاده از ارجاعات تبدیل کنید. برای انجام این کار، میزبان مجازی را برای استفاده از ارجاعات به‌روزرسانی کنید و سپس روترهای لبه را مجدداً راه‌اندازی کنید.

تنظیم رمزها و پروتکل‌های TLS برای 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> از نام جاوا و JSSE رمز استفاده می‌کند. برای مثال، برای جاوا ۸ به http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites مراجعه کنید.

تعیین رمزها و پروتکل‌های TLS برای Edge نسخه‌های ۴.۱۶.۰۱ تا ۴.۱۶.۰۹

در Edge نسخه‌های ۴.۱۶.۰۱ تا ۴.۱۶.۰۹، شما رمزها و پروتکل‌های پیش‌فرض را برای میزبان‌های مجازی به صورت سراسری روی روتر تنظیم می‌کنید. این پیش‌فرض‌ها سپس برای همه میزبان‌های مجازی اعمال می‌شوند.

از توکن‌ها برای مشخص کردن پروتکل‌ها و رمزهای پیش‌فرض استفاده کنید:

  • برای مشخص کردن پروتکل‌های پیش‌فرض، از توکن 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

این تنظیم مشخص می‌کند که روتر از نسخه‌های 1.0، 1.1 و 1.2 پروتکل TLS پشتیبانی می‌کند. لیستی از مقادیر را با فاصله از هم برای توکن مشخص کنید.

مقدار پیش‌فرض توکن 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

این تنظیم مشخص می‌کند:

  • طول کلید ۱۲۸ بیت یا بیشتر مورد نیاز است ( 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 نسخه ۴.۱۷.۰۱ و بالاتر

اگر از نسخه ۴.۱۷.۰۱ و بالاتر اج استفاده می‌کنید، می‌توانید برخی از ویژگی‌های 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. با استفاده از روشی که در اینجا توضیح داده شده است، یک keystore با نام myTestKeystore ایجاد و پیکربندی کنید: Keystores and Truststores . مطمئن شوید که keystore از نام مستعار myKeyAlias ​​برای گواهی و کلید خصوصی استفاده می‌کند.
  2. از فراخوانی POST API زیر برای ایجاد مرجعی با نام 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 مشخص می‌کند.

    برای مشاهده مرجع از فراخوانی 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 یا نام دامنه گره سرور مدیریت است.

    مطمئن شوید که مرجع کلید اصلی و نام مستعار کلید را به درستی مشخص کرده‌اید:

    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 Proxy دارید، میزبان مجازی را به عنصر <HTTPConnection> در ProxyEndpoint اضافه کنید. میزبان مجازی به طور خودکار به همه API Proxy های جدید اضافه می‌شود.

    به بخش «به‌روزرسانی پروکسی 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 متفاوت اشاره کند تا گواهی 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>

از فراخوانی 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) را مشخص می‌کند.

برای مشاهده مرجع از فراخوانی API GET زیر استفاده کنید:

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