Đị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à proxy API hiển thị, và theo tiện ích mở rộng, URL mà ứng dụng dùng để truy cập proxy API.

Máy chủ ảo cũng xác định liệu có thể truy cập proxy API bằng giao thức HTTP hay không, hoặc bởi giao thức HTTPS được mã hoá có sử dụng TLS. Khi định cấu hình máy chủ ảo để sử dụng HTTPS và TLS, bạn tạo một máy chủ ảo trên Edge và định cấu hình máy chủ ảo để sử dụng một kho khoá kho tin cậy.

Tìm hiểu thêm:

Những thứ bạn cần có để 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ủ lưu trữ ảo. Ví dụ: bạn nên biết liệu tên hiển thị công khai là api.myCompany.com, myapi.myCompany.com, v.v. Thông tin đó được dùng khi bạn tạo máy chủ ảo và cũng được dùng 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á nơi kho khoá chứa như 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ỉ, trong đó chứng chỉ mới nhất được một CA ký.
    • Khoá riêng tư – Edge hỗ trợ kích thước khoá tối đa 2048 bit. Bạn 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à cần một kho tin cậy để lưu giữ chứng chỉ của ứng dụng khách và chuỗi CA của chứng chỉ (không bắt buộc). Bạn cần kho tin cậy ngay cả khi chứng chỉ được ký bởi CA.

Hãy xem bài viết Kho khoá và Truststores là nơi để bạn biết thêm thông tin về cách tạo kho khoá và kho lưu trữ uy tín.

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

Để tạo một máy chủ lưu trữ ảo, hãy tạo một đối tượng XML xác định máy chủ lưu trữ ảo đó. Đối tượng XML sau đây sử dụng phần tử <SSLInfo> để xác định một ảo lưu trữ 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 thành 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 rồi chỉ định kho tin cậy sử dụng <TrustStore> . Kho tin cậy lưu giữ chứng chỉ của ứng dụng khách và CA của chứng chỉ (không bắt buộc) của bạn.

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

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

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

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

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

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

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

Sửa đổi máy chủ lưu trữ ảo hiện có để sử dụng thông tin tham chiếu đến kho khoá và kho tin cậy

Apigee đặc biệt khuyến nghị các máy chủ ảo nên sử dụng tệp tham chiếu đến kho khoá và kho tin cậy. Tài liệu tham khảo cho phép bạn thay đổi kho khoá và kho tin cậy được máy chủ ảo sử dụng mà không cần 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 bằng chữ của kho khoá hoặc Truststore, bạn có thể chuyển đổi chúng để sử dụng tệp tham chiếu. Để thực hiện việc này, hãy cập nhật máy chủ ảo để sử dụng tham chiếu rồi khởi động lại Bộ định tuyến Edge.

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

Nếu đang sử dụng Edge phiên bản 4.15.07 trở xuống, bạn phải đặt giao thức TLS và thuật toán mật mã được máy chủ ảo sử dụng bằng cách sử dụng các 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 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 mật mã và giao thức mặc định cho máy chủ ảo trên toàn cầu trên Bộ định tuyến. Sau đó, các chế độ mặc định này sẽ áp dụng cho tất cả máy chủ ảo.

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

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 các giá trị được phân tách bằng dấu cách thành 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:

  • Cần có độ dài khoá 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ộ thuật toán 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 3 lần (!DH+3DES)
  • Loại trừ bộ thuật toán mật mã bằng cách sử dụng cơ chế trao đổi khoá RSA VÀ DES 3 lần (!RSA+3DES)

Để biết thông tin về cú pháp và các giá trị mà mã thông báo này cho phép, hãy xem phần 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 thuật toán mật mã OpenSSL, chẳng hạn như AES128-SHA256, chứ không phải Tên thuật toán mật mã Java/JSSE, chẳng hạn như TLS_RSA_WITH_AES_128_CBC_SHA256.

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

  1. Chỉnh sửa /opt/apigee/customer/application/router.properties . Nếu tệp đó không tồn tại, hãy tạo tệp.
  2. Đặt conf_load_balancing_load.balancing.driver.server.ssl.ciphers mã thông báo. Ví dụ: để chỉ định TLSv1.2 và loại trừ bộ thuật toán mật mã bằng cách sử dụng khoá được chia sẻ trước, 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 API:
    chown apigee:apigee /opt/apigee/customer/application/router.properties
  4. Khởi động lại Edge Router:
    /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

Chế độ cài đặ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, 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 <VirtualHost> . Các thẻ này được mô tả trong phần Tài liệu tham khảo về thuộc tính máy chủ 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 bài viết 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 thuật toán mật mã OpenSSL, chẳng hạn như AES128-SHA256, chứ không phải tên thuật toá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 một tệp tham chiếu. 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 kho khoá có tên myTestKeystore bằng cách sử dụng quy trình được mô tả ở đây: Kho khoá và Kho tin cậy. Đảm bảo rằng kho khoá sử dụng một tên đại diện myKeyAlias cho chứng chỉ và khoá riêng tư.
  2. Sử dụng lệnh gọi API POST sau để tạo tham chiếu có tên là keystoreref trong 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
    

    Tham chiếu chỉ định tên của kho khoá và loại tham chiếu là KeyStore.

    Sử dụng lệnh gọi API GET sau để xem tệp tham chiếu:

    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ủ lưu trữ ảo bằng cách sử dụng nút Tạo API Virtual Host, 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 chính xác tệp 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ủ lưu trữ đó.
  5. Nếu bạn đang có proxy API, hãy thêm máy chủ lưu trữ ảo vào phần tử <HTTPConnection> trong ProxyEndpoint. Máy chủ ảo được tự động thêm vào tất cả proxy API mới.

    Xem phần Cập nhật proxy API sau khi tạo máy chủ ảo trong 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 máy chủ đại diện, bạn có thể truy cập proxy API như được hiển thị dưới đây:

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 đối chiếu vào một kho khoá hoặc kho 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 cửa hàng tin cậy. Lợi ích của việc sử dụng tệp đối chiếu là bạn có thể cập nhật tệp tham chiếu thành trỏ đến một kho khoá hoặc kho tin cậy khác để cập nhật chứng chỉ TLS mà không cần 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 để tạo tệp tham 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 tham chiếu chỉ định tên và loại của kho khoá.

Sử dụng lệnh gọi API GET sau để xem tệp tham chiếu:

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, hãy đảm bảo rằng bí danh đó đã cùng một 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