Định cấu hình quyền truy cập TLS vào API của Cloud riêng tư

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Máy chủ ảo trên Edge xác định các miền và cổng mà trên đó proxy API hiển thị, cũng như URL mà các ứng dụng dùng để truy cập proxy API.

Máy chủ ảo cũng xác định xem proxy API được truy cập bằng giao thức HTTP hay bằng giao thức HTTPS đã mã hoá sử dụng TLS (Bảo mật tầng truyền tải). Khi định cấu hình máy chủ ảo để sử dụng HTTPS và TLS, bạn sẽ tạo một máy chủ ảo trên Edge và định cấu hình máy chủ ảo để sử dụng keystore (kho khoá) và Truststore (kho khoá tin cậy).

Tìm hiểu thêm:

Những thứ bạn cần để tạo một máy chủ ảo

Trước khi tạo máy chủ ảo, bạn cần có những thông tin sau:

  • Tên miền công khai của máy chủ ảo. Ví dụ: bạn nên biết liệu tên hiển thị công khai có phải là api.myCompany.com, myapi.myCompany.com, v.v. Thông tin đó được dùng khi bạn tạo máy chủ ảo cũng như khi bạn tạo bản ghi DNS cho máy chủ ảo.
  • Đối với TLS một chiều, bạn cần tạo một kho khoá trong đó kho khoá chứa các nội dung sau:
    • Chứng chỉ TLS – chứng chỉ do một tổ chức phát hành chứng chỉ (CA) ký hoặc một chuỗi chứng chỉ mà chứng chỉ mới nhất do tổ chức phát hành chứng chỉ ký.
    • Khoá riêng tư – Edge hỗ trợ kích thước khoá lên đến 2048 bit. Không bắt buộc phải nhập cụm mật khẩu.
  • Đối với TLS hai chiều, bạn cần có một kho khoá và một kho lưu trữ tin cậy để lưu trữ chứng chỉ của ứng dụng khách cũng như chuỗi CA của chứng chỉ (không bắt buộc). Bạn cần kho lưu trữ tin cậy ngay cả khi chứng chỉ được ký bởi tổ chức phát hành chứng chỉ (CA).

Xem phần Kho khoá và Kho tin cậy để biết thêm thông tin về cách tạo kho khoá và kho lưu trữ tin cậy.

Cấu hình máy chủ ảo cho TLS

Để tạo máy chủ ảo, hãy tạo đối tượng XML xác định máy chủ ảo. Đối tượng XML sau đây sử dụng phần tử <SSLInfo> để xác định máy chủ ảo cho cấu hình TLS một chiều qua 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>

Trong ví dụ này, phần tử <Enabled> được đặt thành true để bật TLS một chiều, đồng thời các phần tử <KeyStore> và <KeyAlias> chỉ định kho khoá và khoá mà kết nối TLS sử dụng.

Để bật TLS hai chiều, hãy đặt phần tử <ClientAuthEnabled> thành true và chỉ định một kho lưu trữ tin cậy bằng cách sử dụng phần tử <TrustStore>. Truststore lưu giữ chứng chỉ của ứng dụng và chuỗi CA của chứng chỉ (không bắt buộc).

Quyết định cách chỉ định kho khoá và tên kho lưu trữ trong máy chủ ảo

Trong ví dụ lưu trữ ảo ở trên, bạn đã chỉ định kho khoá bằng cách sử dụng một tệp tham chiếu. Tham chiếu là một biến chứa tên kho khoá, thay vì chỉ định trực tiếp tên kho khoá.

Ưu điểm của việc sử dụng tệp tham chiếu là bạn có thể thay đổi giá trị của tham chiếu để thay đổi kho khoá mà máy chủ ảo sử dụng, thường là vì chứng chỉ trong kho khoá hiện tại sẽ hết hạn trong một thời gian sắp tới. Bạn không cần phải khởi động lại Bộ định tuyến Edge để thay đổi giá trị của tham chiếu.

Ngoài ra, bạn có thể sử dụng tên kho khoá dạng giá trị cố định trong máy chủ ảo. Tuy nhiên, nếu sửa đổi máy chủ ảo để đổi tên kho khoá, bạn sẽ phải khởi động lại Bộ định tuyến Edge.

Hạn chế trong việc sử dụng tham chiếu đến kho khoá và kho tin cậy

Bạn phải tính đến hạn chế sau đây khi sử dụng tệp tham chiếu đến kho khoá và kho lưu trữ tin cậy:

  • Bạn chỉ có thể sử dụng các tham chiếu đến kho khoá và kho lưu trữ tin cậy trong máy chủ ảo nếu bạn hỗ trợ DEX và chấm dứt SSL trên Bộ định tuyến Apigee.
  • Nếu có trình cân bằng tải trước Bộ định tuyến Apigee và kết thúc TLS trên trình cân bằng tải, thì bạn không thể sử dụng các tệp tham chiếu kho khoá và kho tin cậy trong các máy chủ ảo.

Sửa đổi một máy chủ ảo hiện có để sử dụng các tệp tham chiếu đến kho khoá và kho tin cậy

Apigee khuyên các máy chủ ảo nên tham chiếu đến kho khoá và kho lưu trữ tin cậy. Các tệp tham chiếu cho phép bạn thay đổi kho khoá và kho lưu trữ tin cậy mà máy chủ ảo sử dụng mà không phải khởi động lại Bộ định tuyến Edge.

Nếu máy chủ ảo của bạn hiện được định cấu hình để sử dụng tên cố định của kho khoá hoặc kho lưu trữ tin cậy, thì bạn có thể chuyển đổi các máy chủ đó để sử dụng tệp đối chiếu. Để thực hiện việc này, hãy cập nhật máy chủ ảo để sử dụng các tệp tham chiếu, sau đó khởi động lại Bộ định tuyến Edge.

Đặt mật mã và giao thức TLS cho Edge 4.15.07 trở xuống

Nếu đang sử dụng Edge phiên bản 4.15.07 trở về trước, thì bạn hãy đặt giao thức và thuật toán mật mã TLS mà máy chủ ảo sử dụng bằng cách dùng thẻ con <Ciphers><Protocols> của thẻ <SSLInfo>. Các thẻ này được mô tả trong bảng dưới đây.

Ví dụ:

    <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>

Thẻ <Cipher> sử dụng tên Java và JSSE của thuật toán mật mã. Ví dụ: đối với Java 8, hãy xem http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites.

Chỉ định thuật toán mật mã và giao thức TLS cho Edge 4.16.01 đến 4.16.09

Trong Edge 4.16.01 đến 4.16.09, bạn đặt thuật toán mật mã và giao thức mặc định cho các máy chủ ảo trên toàn bộ Bộ định tuyến. Sau đó, các giá trị mặc định này sẽ áp dụng cho tất cả máy chủ ảo.

Sử dụng mã thông báo để chỉ định giao thức và thuật toán mật mã mặc định:

  • Để chỉ định giao thức mặc định, hãy sử dụng mã thông báo conf_load_balancing_load.balancing.driver.server.ssl.protocols
  • Để chỉ định thuật toán mật mã mặc định cho Bộ định tuyến, hãy sử dụng mã thông báo conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Giá trị mặc định của mã thông báo conf_load_balancing_load.balancing.driver.server.ssl.protocols là:

conf_load_balancing_load.balancing.driver.server.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2

Chế độ cài đặt này chỉ định rằng Bộ định tuyến hỗ trợ TLS phiên bản 1.0, 1.1 và 1.2. Chỉ định một danh sách giá trị được phân tách bằng dấu cách cho mã thông báo.

Giá trị mặc định của mã thông báo conf_load_balancing_load.balancing.driver.server.ssl.ciphers là:

conf_load_balancing_load.balancing.driver.server.ssl.ciphers=HIGH:!aNULL:!MD5:!DH+3DES:!RSA+3DES

Chế độ cài đặt này chỉ định:

  • Yêu cầu khoá phải có độ dài từ 128 bit trở lên (HIGH).
  • Loại trừ thuật toán mật mã không cần xác thực (!aNULL)
  • Loại trừ bộ mật mã bằng MD5 (!MD5)
  • Loại trừ bộ thuật toán mật mã bằng DH (bao gồm DH ẩn danh, DH tạm thời và DH cố định) VÀ DES bộ ba (!DH+3DES)
  • Loại trừ bộ thuật toán mật mã bằng cách sử dụng phương pháp trao đổi khoá RSA VÀ DES ba lần (!RSA+3DES)

Để biết thông tin về cú pháp và các giá trị được mã thông báo này cho phép, hãy xem thuật toán mật mã OpenSSL. Xin lưu ý rằng mã thông báo này sử dụng tên mật mã OpenSSL (như AES128-SHA256) chứ không phải tên mật mã Java/JSSE, chẳng hạn như TLS_RSA_WITH_AES_128_CBC_SHA256.

Cách đặt mã thông báo cho Bộ định tuyến:

  1. Chỉnh sửa tệp /opt/apigee/customer/application/router.properties. Hãy tạo tệp nếu chưa có.
  2. Thiết lập mã thông báo conf_load_balancing_load.balancing.driver.server.ssl.ciphers. Ví dụ: để chỉ định TLSv1.2 và loại trừ bộ thuật toán mật mã bằng khoá chia sẻ trước, hãy thêm!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. Đảm bảo rằng tệp router.properties thuộc sở hữu của apigee:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Khởi động lại Bộ định tuyến Edge:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  5. Kiểm tra giá trị của mã thông báo:
    /opt/apigee/apigee-service/bin/apigee-service edge-router configure -search conf_load_balancing_load.balancing.driver.server.ssl.ciphers

Đặt tham số máy chủ ảo TLS cho Edge phiên bản 4.17.01 trở lên

Nếu đang sử dụng Edge phiên bản 4.17.01 trở lên, thì bạn có thể đặt một số thuộc tính TLS cho một máy chủ ảo riêng lẻ, chẳng hạn như giao thức TLS và thuật toán mật mã, bằng cách sử dụng thẻ con <Properties> của thẻ <VirtualHost>. Các thẻ này được mô tả tại Tài liệu tham khảo về tài sản lưu trữ ảo.

Ví dụ:

<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>

Để biết thông tin về cú pháp và các giá trị mà mã thông báo ssl_ciphers cho phép, hãy xem thuật toán mật mã OpenSSL. Xin lưu ý rằng mã thông báo này sử dụng tên mật mã OpenSSL (như AES128-SHA256) chứ không phải tên mật mã Java/JSSE, chẳng hạn như TLS_RSA_WITH_AES_128_CBC_SHA256.

Tạo máy chủ ảo sử dụng HTTPS

Ví dụ này chỉ định kho khoá cho máy chủ ảo bằng cách sử dụng tệp đối chiếu. Việc sử dụng tham chiếu cho phép bạn thay đổi kho khoá mà không phải khởi động lại Bộ định tuyến.

Sử dụng quy trình sau để tạo máy chủ ảo:

  1. Tạo và định cấu hình một kho khoá có tên là myTestKeystore bằng cách làm theo quy trình được mô tả dưới đây: Kho khoá và Kho lưu trữ tin cậy. Đảm bảo rằng kho khoá sử dụng tên đại diện là myKeyAlias cho chứng chỉ và khoá riêng tư.
  2. Sử dụng lệnh gọi API POST sau đây để tạo tệp đối chiếu có tên là keystoreref cho kho khoá bạn đã tạo ở trên:

    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
    

    Tệp đối chiếu chỉ định tên của kho khoá và kiểu tham chiếu là KeyStore.

    Hãy sử dụng lệnh gọi GET API sau đây để xem tài liệu tham khảo:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password
    
  3. Tạo máy chủ ảo bằng cách sử dụng API Create a Virtual Host (Tạo máy chủ ảo), trong đó <ms-IP> là địa chỉ IP hoặc tên miền của nút Máy chủ quản lý.

    Hãy đảm bảo chỉ định đúng tham chiếu kho khoá và bí danh khoá:

    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. Tạo bản ghi DNS cho máy chủ ảo khớp với bí danh của máy chủ.
  5. Nếu bạn hiện có bất kỳ proxy API nào, hãy thêm máy chủ ảo vào phần tử <HTTPConnection> trong ProxyEndpoint. Máy chủ ảo được tự động thêm vào tất cả các proxy API mới.

    Xem phần Cập nhật proxy API sau khi tạo máy chủ ảo trong phần Giới thiệu về máy chủ ảo.

Sau khi cập nhật proxy API để sử dụng máy chủ ảo và tạo bản ghi DNS cho bí danh máy chủ, bạn có thể truy cập vào proxy API như sau:

https://apiTLS.myCompany.com/v1/{project-base-path}/{resource-path}

Ví dụ:

https://apiTLS.myCompany.com/v1/weather/forecastrss?w=12797282

Tạo và sửa đổi tệp tham chiếu đến kho khoá hoặc kho lưu trữ tin cậy

Bạn có thể tuỳ ý định cấu hình máy chủ ảo để sử dụng tệp tham chiếu đến kho khoá hoặc kho lưu trữ tin cậy. Ưu điểm của việc sử dụng tệp tham chiếu là bạn có thể cập nhật tham chiếu để trỏ đến một kho khoá hoặc kho tin cậy khác nhằm cập nhật chứng chỉ TLS mà không phải khởi động lại Bộ định tuyến.

Ví dụ dưới đây là một máy chủ ảo sử dụng tệp tham chiếu đến kho khoá:

<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>

Sử dụng lệnh gọi API POST sau đây để tạo tệp đối chiếu có tên 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

Tệp đối chiếu chỉ định tên và loại kho khoá.

Hãy sử dụng lệnh gọi GET API sau đây để xem tài liệu tham khảo:

curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/keystoreref -u uname:password

Sau này, để thay đổi tham chiếu để trỏ đến một kho khoá khác, đảm bảo rằng bí danh có cùng tên, hãy sử dụng lệnh gọi PUT sau:

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