為 API BaaS 設定傳輸層安全標準 (TLS)

Private Cloud v. 4.17.05 專用 Edge

TLS (傳輸層安全標準,其前身是 SSL) 是標準的安全性技術 ,確保整個 API 環境中安全無虞且經過加密的訊息。您可以設定傳輸層安全標準 (TLS) 以及 API BaaS 堆疊節點上

下圖顯示透過單一 BaaS 入口網站進行 API BaaS 的一般部署圖表 和三個 API BaaS 堆疊節點

開發人員可使用瀏覽器對入口網站提出要求。根據預設,這些要求會使用 HTTP 通訊埠 9000 的通訊協定

這個部署作業會在入口網站和堆疊節點之間有一個負載平衡器。在本 負載平衡器會向負載平衡器發出 HTTP 要求,然後負載平衡器 將要求轉送至其中一個堆疊節點。這是我們建議的 Deployment 實際工作環境中的應用程式

TLS 設定選項

為 API BaaS 設定 TLS 時,您可以選擇:

  • 在入口網站和負載平衡器上為堆疊節點設定 TLS

    開發人員在這項設定中,會使用 HTTPS 通訊協定存取入口網站,以及存取入口網站 瀏覽器內執行時會使用 HTTPS,透過載入向堆疊節點發出要求 。負載平衡器使用 HTTP 存取堆疊節點。
  • 在入口網站、負載平衡器和堆疊節點上設定 TLS

    為提高安全性,請將負載平衡器設為使用傳輸層安全標準 (TLS) 存取堆疊節點。
  • 在入口網站和單一堆疊節點上設定 TLS

    在測試或開發環境等小型環境中,您可能只會 單一堆疊節點,意味著不需要加入負載平衡器。在這個設定中 請在入口網站和堆疊節點上設定 TLS。
  • 為入口網站設定負載平衡器的 TLS

    上方並未顯示一個選項,是在「入口網站」節點的前方使用負載平衡器。在這個例子中 可以在負載平衡器上設定 TLS,並視需要在 負載平衡器與入口網站之間的連線
,瞭解如何調查及移除這項存取權。

確保 TLS 通訊埠已開啟

下方的程序會在預設入口網站通訊埠 9000 和 8080 堆疊節點上設定 TLS。 不過,您可以視需求變更這個通訊埠。

無論您使用何種通訊埠,都必須確保通訊埠已在節點上開啟。適用對象 例如,您可以使用以下指令開啟通訊埠 8443:

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8443 -j ACCEPT --verbose
敬上

在 API BaaS 堆疊上設定 TLS

API BaaS 堆疊預設停用 TLS。接著,您必須透過 HTTP 透過 HTTP 存取 BaaS API 並使用堆疊節點的 IP 位址或 DNS 名稱,以及通訊埠 8080。例如:

http://stack_IP:8080

或者,您也可以設定 BaaS API 的 TLS 存取權,以便在 表單:

https://stack_IP:8080

在本例中,您要將 TLS 存取權設為使用通訊埠 8080。不過,通訊埠 8080 不需要 - 您可以將堆疊設為使用其他通訊埠。唯一的要求是 允許流量通過指定通訊埠。

堆疊僅支援透過單一通訊埠處理一種要求 (HTTP 或 HTTPS),因此 如果您在通訊埠 8080 設定 HTTPS 存取,您無法使用 HTTP 存取通訊埠 8080。如果發生以下情況: 將堆疊設為透過 HTTPS 使用 8443 通訊埠,之後堆疊就不會再監聽通訊埠 8080。

請使用下列程序設定堆疊的 TLS 存取權:

  1. 產生含有傳輸層安全標準 (TLS) 憑證和私密金鑰的 KeyStore JKS 檔案。如要 請參閱為 Edge On 設定 TLS/SSL 場所
    注意:請確認 KeyStore 和金鑰的密碼相同。
  2. 將 KeyStore JKS 檔案複製到堆疊節點上的目錄,例如 /opt/apigee/customer/application。 該目錄必須能存取「apigee」內容。
  3. 將 JKS 檔案的擁有權變更為「apigee」使用者:
    >Chown apigee:apigee /opt/apigee/customer/application/keystore.jks

    其中 keystore.jks 是名稱 。
  4. 編輯 /opt/apigee/customer/application/usergrid.properties 檔案來設定下列屬性,包括 JKS 檔案的路徑和 金鑰存放區和金鑰如果該檔案不存在,請建立一個:
    tomcat-server_scheme=https
    tomcat-server_secure=true
    tomcat-server_ssl.enabled=true
    tomcat-server_keystore.type=JKS
    tomcat-server_keystore.file=/opt/apigee/customer/application/keystore.jks
    tomcat-server_keystore.password=password
    tomcat-server_keyalias=keystore_alias
    tomcat-server_clientauth.enabled=false
    tomcat-server_ssl.protocols=TLSv1,TLSv1.1,TLSv1.2
    # 根據預設,TLS 存取會使用通訊埠 8080。
    # 請使用這個屬性指定不同的通訊埠。
    # tomcat-server_port=8080


    警告password 值必須為明文。 因此,您應防止 usergrid.properties 防範未經授權的使用者行為 資源存取權

    使用 tomcat-server_keyalias 屬性來指定 KeyStore 別名。金鑰別名會在您建立金鑰時設定。 舉例來說,您可以使用 -alias 選項搭配 keytool 指令。

    使用 tomcat-server_ssl.protocols 來設定 Stack 支援的 TLS 通訊協定。如需 Java 8 支援的通訊協定清單, 請參閱 http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#jssename
  5. 設定堆疊節點:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid 設定
  6. 重新啟動 BaaS 堆疊:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid 重新啟動
  7. 如要確認 TLS 是否正常運作,請在堆疊節點上執行下列 cURL 指令,使用下列指令: HTTPS:
    >curl -K https://localhost:8080/status -v

    如果 TLS 設定正確無誤,您應該會看到包含狀態資訊的回應。

    如果您透過 8080 以外的通訊埠設定 TLS 存取權,請修改上述指令以使用 輸入正確的通訊埠
  8. 對所有堆疊節點重複執行相同動作。
  9. 如果在堆疊節點前方設有負載平衡器,請設定 負載平衡器,透過 HTTPS 向堆疊節點發出要求。詳情請參閱 負載平衡器

    如果入口網站直接向 Stack 傳送要求,請將入口網站設為 按照下一節的說明存取 Stack over HTTPS。
  10. 請按照「在堆疊或入口網站上設定傳輸層安全標準 (TLS) 的 API BaaS 堆疊節點」一節所述的程序操作 確保產生使用者時堆疊節點擁有正確的 TLS 網址 回應。

設定中 入口網站,以便透過 TLS 存取 Stack

向 BaaS 堆疊發出 API 呼叫,以使用瀏覽器功能執行的 BaaS 入口網站。如果發生以下情況: 將 BaaS 堆疊設為使用 TLS,您必須將入口網站設為可發出這類呼叫 。

API BaaS 安裝通常設定為:

  • 在入口網站和堆疊節點之間使用負載平衡器

    設定負載平衡器,透過 HTTPS 向堆疊節點發出要求。詳情請參閱 負載平衡器的相關說明文件。

    在這項設定中,入口網站可經由 HTTP 或 HTTPS 存取負載平衡器,實際情況取決於 如何設定負載平衡器如果負載平衡器使用 TLS,請按照以下程序 設定入口網站,向 HTTPS 負載平衡器發出要求。
  • 要求入口網站直接向 Stack 傳送要求

    按照下文所述的方式,設定入口網站以透過 HTTPS 存取 Stack。

按照下列程序設定 API BaaS 入口網站,以便透過 HTTPS 發出 API 呼叫:

  1. 按照上文所述,在 BaaS 堆疊上設定 TLS 存取權,或是針對 按照負載平衡器說明文件所述的方式堆疊節點。
  2. 編輯 /opt/apigee/customer/application/portal.properties 設定下列屬性如果該檔案不存在,請建立一個:
    baas.portal.config.overrideUrl=https://stackIP:port

    指定為這個屬性的值,也就是 IP 位址,或 API 堆疊節點的 DNS 名稱與通訊埠 或是負載平衡器 以及 API BaaS 堆疊節點
  3. 設定入口網站節點:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal Configuration
  4. 使用以下指令重新啟動入口網站:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  5. 如果您使用自行簽署的憑證設定 Stack 的傳輸層安全標準 (TLS) 存取權 上方,您的瀏覽器可能不允許從入口網站向 Stack 傳送要求。如果看到 瀏覽器發生錯誤,指出系統不允許 HTTPS 存取堆疊 在瀏覽器中的網址,並新增安全性例外狀況以允許存取:
    https://stackIP:port/status

    指定 API 堆疊節點或負載平衡器的 IP 位址,或是 DNS 名稱和通訊埠。

在 API BaaS 入口網站上設定 TLS

根據預設,使用者可存取入口網站,方法是透過 入口網站伺服器。您可以設定入口網站,使用 HTTPS 加密傳入及傳出的資料 入口網站。

根據預設,您可以使用該入口網站的 IP 位址或 DNS 名稱,透過 HTTP 存取入口網站。 節點和通訊埠 9000例如:

http://portal_IP:9000

或者,您也可以設定入口網站的 TLS 存取權,以便在入口網站中存取 表單:

https://portal_IP:9443

在本例中,您要將 TLS 存取權設為使用通訊埠 9443。不過,通訊埠 9443 - 您可以設定傳送門使用其他連接埠。

入口網站只能透過單一通訊埠支援一種要求 (HTTP 或 HTTPS),因此 如果您在通訊埠 9000 設定 HTTPS 存取,就無法使用 HTTP 存取通訊埠 9000。如果發生以下情況: 將傳送門設定為透過 HTTPS 連線使用 9443,如此一來入口網站將不再監聽通訊埠 9000。

如何為入口網站設定 TLS:

  1. 建立 PEM 格式的金鑰檔案和憑證檔案。
    注意:請確認金鑰或憑證沒有密碼/通關密語。
  2. 將 PEM 檔案複製到入口網站節點的目錄,例如 /opt/apigee/customer/application。 該目錄必須能存取「apigee」內容。
  3. 將 PEM 檔案的擁有權變更為「apigee」使用者:
    >Chown apigee:apigee /opt/apigee/customer/application/*.PEM
  4. 編輯 /opt/apigee/customer/application/portal.properties 檔案設定下列屬性。如果該檔案不存在,請建立一個:
    baas.portal.ssl=on
    baas.portal.ssl.certificate=/opt/apigee/customer/application/defaultcert.pem
    baas.portal.ssl.key=/opt/apigee/customer/application/defaultkey.pem
    baas.portal.ssl.protocols=TLSv1 TLSv1.1 TLSv1.2
    # 根據預設,TLS 存取會使用通訊埠 9000。
    # 請使用這個屬性指定不同的通訊埠。
    # baas.portal.listen=9000


    使用 baas.portal.ssl.protocols 設定入口網站支援的 TLS 通訊協定。如需支援的通訊協定清單,請參閱 Nginx 定義的 SSL 通訊協定名稱清單:http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols
  5. 設定入口網站節點:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal Configuration
  6. 重新啟動入口網站:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart
  7. 請按照「在堆疊或入口網站上設定傳輸層安全標準 (TLS) 的 API BaaS 堆疊節點」一節所述的程序操作 ,確認堆疊節點擁有正確的入口網站傳輸層安全標準 (TLS) 網址。

在以下環境設定 TLS 的 API BaaS 節點: 堆疊或入口網站

如果您在堆疊或入口網站節點前方納入負載平衡器,或是已啟用 TLS 請直接在入口網站或堆疊節點上設定節點,並將網址設為 即可存取堆疊和入口網站例如,堆疊節點在下列情況中需要這項資訊:

  • 在 BaaS API 要求的回應中加入網址。
  • 在重設密碼或傳送其他電子郵件時,在電子郵件範本中新增連結 通知。
  • 將使用者重新導向至特定的入口網站頁面。

如果您在堆疊節點前方使用負載平衡器,或是在堆疊節點上設定 TLS,請 在 /opt/apigee/customer/application/usergrid.properties 中下列屬性:

usergrid-deployment_usergrid.api.url.base=http://localhost:8080

http://localhost:8080 替換成負載的網址 。如果負載平衡器設為使用傳輸層安全標準 (TLS),請使用 HTTPS 通訊協定。您只需要 如果使用非標準通訊埠 (也就是通訊埠以外的通訊埠),則需包含通訊埠 HTTP 值為 80,HTTPS 則為通訊埠 443。

如果發生此情況,您還必須在 /opt/apigee/customer/application/portal.properties 設定下列屬性 您將在堆疊節點前方使用負載平衡器:

baas.portal.config.overrideUrl=http://localhost:8080

http://localhost:8080 替換成 負載平衡器

如果您在入口網站節點前方使用負載平衡器,或是在堆疊節點上設定 TLS,請 usergrid.properties 中的下列屬性:

usergrid-deployment_portal.url=http://localhost:9000

http://localhost:9000 替換成 負載平衡器如果負載平衡器設為使用傳輸層安全標準 (TLS),請使用 HTTPS 通訊協定。個人中心 只有在使用非標準連接埠時,才需要包含連接埠;也就是說 通訊埠 80 (HTTP 通訊埠為 443) 和 HTTPS 通訊埠 443。

編輯 usergrid.properties 後:

  1. 設定堆疊節點:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid 設定
  2. 重新啟動 BaaS 堆疊:
    > /opt/apigee/apigee-service/bin/apigee-service baas-usergrid 重新啟動
  3. 如果您修改了 portal.properties,請 入口網站節點:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal Configuration
  4. 重新啟動 BaaS 入口網站:
    > /opt/apigee/apigee-service/bin/apigee-service baas-portal restart