查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
問題
如果用戶端和伺服器無法使用 傳輸層安全標準 (TLS)/安全資料傳輸層 (SSL) 通訊協定。當 Apigee Edge 中發生這個錯誤時,用戶端 應用程式收到 HTTP 狀態 503 及 Service Unavailable 訊息。個人中心 一律會在 API 呼叫發生 TLS/SSL 握手失敗後顯示此錯誤。
錯誤訊息
HTTP/1.1 503 Service Unavailable
您也可以在發生 TLS/SSL 握手失敗時看到這則錯誤訊息:
Received fatal alert: handshake_failure
可能原因
TLS (傳輸層安全標準,其前身是 SSL) 是 在網路伺服器和網路用戶端 (例如瀏覽器或應用程式) 之間建立加密連結。 「握手」是一種程序,可讓 TLS/SSL 用戶端和伺服器建立一組密鑰 可與任何應用程式通訊在這個過程中,用戶端和伺服器會:
- 確認要使用的通訊協定版本。
- 選取要使用的加密編譯演算法。
- 以交換並驗證數位憑證的方式驗證彼此。
如果 TLS/SSL 握手成功,則 TLS/SSL 用戶端和伺服器的資料會
安全地管理更多網路資源否則,如果 TLS/SSL 握手失敗,連線就會終止,而用戶端
收到 503 Service Unavailable
錯誤。
造成 TLS/SSL 握手失敗的可能原因如下:
原因 | 說明 | 誰可以執行疑難排解步驟 |
---|---|---|
通訊協定不符 | 伺服器不支援用戶端使用的通訊協定。 | 私人與公有雲使用者 |
加密套件不符 | 伺服器不支援用戶端使用的加密套件。 | 私人與公有雲使用者 |
憑證不正確 | 用戶端使用的網址主機名稱與憑證中的主機名稱不符 儲存在伺服器端 | 私人與公有雲使用者 |
系統會將不完整或無效的憑證鏈結儲存在用戶端或伺服器端。 | 私人與公有雲使用者 | |
用戶端向伺服器或伺服器傳送錯誤或過期的憑證 用戶端。 | 私人與公有雲使用者 | |
已啟用 SNI 的伺服器 | 後端伺服器已啟用「伺服器名稱指示 (SNI)」;不過,用戶端無法與 SNI 伺服器。 | 僅限私有雲使用者 |
通訊協定 不相符
如果用戶端使用的通訊協定不支援 TLS/SSL 握手失敗 輸出至傳入 (北入) 或傳出 (南向) 連線。其他參考資訊 瞭解北向與南向的連線。
診斷
- 判斷錯誤是發生在北距或 southbound 連線。如要進一步瞭解這項功能 確定,請參閱 判斷問題來源。
- 執行
tcpdump 公用程式來收集進一步資訊:
- 如果您是 Private Cloud 使用者,可以收集
tcpdump
要求存取資料用戶端可以是用戶端應用程式 (對於傳入、 或北極連線) 或訊息 處理器 (用於連出或南向連線)。伺服器可以是 Edge Router 傳入或北向連線) 或後端伺服器 。 - 如果您是公有雲使用者,可以收集
tcpdump
僅限用戶端應用程式 (傳入或北向連線) 的資料或後端伺服器的資料 (針對連出或南向連線),因為您需要 無法存取 Edge Router 或訊息處理器。
敬上 請參閱 tcpdump 資料,進一步瞭解如何使用tcpdump -i any -s 0 host IP address -w File name
tcpdump
指令 - 如果您是 Private Cloud 使用者,可以收集
- 使用 Wireshark 工具分析
tcpdump
資料 或類似工具 - 對於
tcpdump 會使用 Wireshark:
- 在此範例中,訊息處理器與 與後端伺服器 (連出或南向連線) 通訊。
- 以下
tcpdump
輸出內容中的訊息 #4 顯示訊息處理器 (來源) 傳送了 「客戶您好」訊息傳送至後端伺服器 (目的地)
如果選取
Client Hello
訊息,系統會顯示訊息處理器正在使用 TLSv1.2 通訊協定,如下所示:- 訊息 #5 顯示後端伺服器確認「Client Hello」訊息 訊息處理器
- 後端伺服器會立即將 Fatal Alert : Close Notify 傳送至 Message Processor (訊息 #6)。這表示 TLS/SSL 握手失敗,並且 設為關閉
深入瞭解郵件 #6 顯示,造成 TLS/SSL 握手失敗的原因 後端伺服器僅支援 TLSv1.0 通訊協定,如下所示:
- 因為訊息處理者使用的通訊協定與 後端伺服器,後端伺服器傳送了下列訊息:Fatal Alert Message: Close 通知。
解析度
Message Processor 預設在 Java 8 上執行,並使用 TLSv1.2 通訊協定。如果後端 伺服器不支援 TLSv1.2 通訊協定,您可以改用下列任一步驟解決問題 本期內容:
- 升級後端伺服器即可支援 TLSv1.2 通訊協定。因為 通訊協定 TLSv1.2 更加安全
- 如果您因故無法立即升級後端伺服器,則
強制訊息處理者使用 TLSv1.0 通訊協定與
更新後端伺服器,步驟如下:
- 如果您沒有在 Proxy 的 TargetEndpoint 定義中指定目標伺服器,則
將
Protocol
元素新增至TLSv1.0
,如下所示 如下:<TargetEndpoint name="default"> … <HTTPTargetConnection> <SSLInfo> <Enabled>true</Enabled> <Protocols> <Protocol>TLSv1.0</Protocol> </Protocols> </SSLInfo> <URL>https://myservice.com</URL> </HTTPTargetConnection> … </TargetEndpoint>
- 假如您設定了 目標伺服器,然後使用 這個 management API 會在 目標伺服器設定
- 如果您沒有在 Proxy 的 TargetEndpoint 定義中指定目標伺服器,則
將
密碼不符
如果用戶端使用的加密套件演算法並未運作,就會顯示 TLS/SSL 握手失敗。 在 Apigee Edge 的傳入 (北入) 或傳出 (南向) 連線中支援。 另請參閱 瞭解北向與南向的連線。
診斷
- 判斷錯誤是否發生於 northbound 或 southbound 連線。 如需關於如何判斷的詳細說明,請參閱 決策中 問題來源
- 執行
tcpdump 公用程式來收集進一步資訊:
- 如果您是 Private Cloud 使用者,可以收集
tcpdump
要求存取資料用戶端可以是用戶端應用程式 (對於傳入、 或北極連線) 或訊息 處理器 (用於連出或南向連線)。伺服器可以是 Edge Router 傳入或北向連線) 或後端伺服器 。 - 如果您是公有雲使用者,可以收集
tcpdump
僅限用戶端應用程式 (傳入或北向連線) 的資料或後端伺服器的資料 (針對連出或南向連線),因為您需要 無法存取 Edge Router 或訊息處理器。
敬上 請參閱 tcpdump 資料,進一步瞭解如何使用tcpdump -i any -s 0 host IP address -w File name
tcpdump
指令。 - 如果您是 Private Cloud 使用者,可以收集
- 使用 Wireshark 工具分析
tcpdump
資料 或任何其他慣用的工具 - 以下是使用 Wireshark 的
tcpdump
輸出內容範例分析:- 在這個範例中,用戶端應用程式與
Edge 路由器 (北方連線)。已在邊緣收集
tcpdump
輸出內容 路由器 以下
tcpdump
輸出內容中的訊息 #4 顯示,用戶端應用程式 (來源) 傳送了一張 「客戶您好」訊息傳送至 Edge Router (目的地)選取 Client Hello 訊息,代表用戶端應用程式正在使用 TLSv1.2 通訊協定。
- 訊息 #5 顯示邊緣路由器確認「Client Hello」訊息 用戶端應用程式
- Edge 路由器會立即傳送嚴重警告:握手失敗 用戶端應用程式 (訊息 #6)。這表示 TLS/SSL 握手失敗,且無法連線 即將打烊
- 進一步瞭解訊息 #6 顯示的資訊如下:
- Edge Router 支援 TLSv1.2 通訊協定。也就是說 可在用戶端應用程式與 Edge Router 之間進行
不過,Edge 路由器仍會傳送嚴重警示:握手 用戶端應用程式失敗,如以下螢幕截圖所示:
- 這項錯誤可能是由下列其中一個問題造成:
- 用戶端應用程式未使用 Edge Router。
- Edge Router 已啟用 SNI,但用戶端應用程式並未傳送 伺服器名稱
tcpdump
輸出內容中的訊息 #4 列出了用戶端支援的加密套件演算法 應用程式,如下所示:- Edge Router 支援的加密套件演算法清單列於
/opt/nginx/conf.d/0-default.conf
檔案。在這個範例中,Edge Router 僅支援高加密加密套件演算法。 - 用戶端應用程式不使用任何高加密加密套件演算法。 這種不一致的原因在於 TLS/SSL 握手失敗。
- 由於 Edge Router 已啟用 SNI,請在
tcpdump
輸出內容中向下捲動至訊息 #4,並 確認用戶端應用程式是否正確傳送伺服器名稱,如 如下圖所示:
- 如果這個名稱有效,即可推斷 TLS/SSL 握手失敗 是因為用戶端應用程式不支援加密套件演算法 以及邊緣路由器
- 在這個範例中,用戶端應用程式與
Edge 路由器 (北方連線)。已在邊緣收集
解析度
您必須確保用戶端使用的加密套件演算法 伺服器支援。如何解決上述問題 「診斷」部分,下載並安裝 Java Cryptography Extension (JCE) 套件並將其加入 Java 中 ,以便支援高加密加密套件演算法。
憑證不正確
如果 KeyStore/truststore 中的憑證有誤,就會發生 TLS/SSL 握手失敗。 可在 Apigee Edge 的傳入 (北向) 或傳出 (南向) 連線中傳送。 其他參考資訊 瞭解北向與南向的連線。
如果問題為「北方」,您可能會看到不同的錯誤訊息 視根本原因而定
下列各節列出錯誤訊息範例,以及診斷和解決方式的步驟 問題。
錯誤訊息
視 TLS/SSL 握手失敗的原因而定,您可能會看到不同的錯誤訊息。 以下是您在呼叫 API Proxy 時可能會看到的錯誤訊息範例:
* SSL certificate problem: Invalid certificate chain * Closing connection 0 curl: (60) SSL certificate problem: Invalid certificate chain More details here: http://curl.haxx.se/docs/sslcerts.html
可能原因
這個問題的常見原因包括:
原因 | 說明 | 誰可以執行疑難排解步驟 |
主機名稱不符 |
網址中使用的主機名稱和路由器 KeyStore 中的憑證不會
比對。舉例來說,假設網址中使用的主機名稱為 myorg.domain.com ,
憑證的主機名稱在 CN 中為 CN=something.domain.com.
|
邊緣私人與公有雲使用者 |
憑證不完整或不正確 鏈結 | 憑證鏈結不完整或不正確。 | 僅限邊緣私人與公有雲使用者 |
伺服器或用戶端 | 伺服器或用戶端會在北向或 可傳入的 | Edge Private Cloud 和 Edge 公有雲使用者 |
主機名稱 不相符
診斷
- 請記下以下 Edge Management API 呼叫傳回網址中使用的主機名稱:
敬上 例如:curl -v https://myorg.domain.com/v1/getinfo
curl -v https://api.enterprise.apigee.com/v1/getinfo
- 取得儲存在特定 KeyStore 的憑證中使用的 CN。您可以使用
下列 Edge Management API 可取得憑證的詳細資料:
-
取得 KeyStore 中的憑證名稱:
如果您是 Private Cloud 使用者,請按照下列步驟使用 Management API:
敬上 如果您是公有雲使用者,請按照下列步驟使用 Management API:curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
使用 Edge Management API 取得 KeyStore 中的憑證詳細資料。
如果您是 Private Cloud 使用者:
如果您是公有雲使用者:curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
憑證範例:
"certInfo": [ { "basicConstraints": "CA:FALSE", "expiryDate": 1456258950000, "isValid": "No", "issuer": "SERIALNUMBER=07969287, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O=\"GoDaddy.com, Inc.\", L=Scottsdale, ST=Arizona, C=US", "publicKey": "RSA Public Key, 2048 bits", "serialNumber": "07:bc:a7:39:03:f1:56", "sigAlgName": "SHA1withRSA", "subject": "CN=something.domain.com, OU=Domain Control Validated, O=something.domain.com", "validFrom": 1358287055000, "version": 3 },
主要憑證中的主體名稱具有 CN,
something.domain.com.
因為 API 要求網址中使用的主機名稱 (請參閱上方的步驟 1) 和主體 憑證中的名稱不相符,表示 TLS/SSL 握手失敗。
-
取得 KeyStore 中的憑證名稱:
解析度
您可以利用下列其中一種方式解決這個問題:
- 取得主體 CN 使用萬用字元的憑證 (如果尚未取得的話)
憑證,然後將新的完整憑證鏈結上傳到 KeyStore。例如:
"subject": "CN=*.domain.com, OU=Domain Control Validated, O=*.domain.com",
- 使用現有主體 CN 取得憑證 (如果尚未取得的話), your-org。使用 your-domain 做為主體別名,然後上傳完整的 新增至 KeyStore。
參考資料
憑證鏈結不完整或不正確
診斷
- 取得儲存在特定 KeyStore 的憑證中使用的 CN。您可以使用
下列 Edge Management API 可取得憑證的詳細資料:
-
取得 KeyStore 中的憑證名稱:
如果您是 Private Cloud 使用者:
如果您是公有雲使用者:curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
在 KeyStore 中取得憑證的詳細資料:
如果您是 Private Cloud 使用者:
如果您是公有雲使用者:curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
- 驗證憑證及其鏈結,驗證是否遵循 文章 憑證鏈結的運作方式:確保憑證有效且完整 憑證鏈結。如果 KeyStore 中儲存的憑證鏈結是 可能不完整或無效,則您會看到 TLS/SSL 握手 失敗。
- 以下圖表顯示含有無效憑證鏈結的範例憑證, 中間憑證與根憑證不相符:
核發者和 主旨不符
-
取得 KeyStore 中的憑證名稱:
解析度
- 如果您尚未取得憑證,請取得完整且有效的憑證 憑證鏈結。
- 執行下列 opensl 指令,驗證憑證鏈結是否正確並
完成:
openssl verify -CAfile root-cert -untrusted intermediate-cert main-cert
- 將已驗證的憑證鏈結上傳至 KeyStore。
已過期或不明 伺服器或用戶端傳送的憑證
如果伺服器/用戶端在北側傳送錯誤/過期的憑證 或對點連線,則另一端 (伺服器/用戶端) 會拒絕憑證 導致 TLS/SSL 握手失敗。
診斷
- 判斷錯誤是發生在北距或 southbound 連線。如要進一步瞭解這項功能 確定,請參閱 判斷問題來源。
- 執行
tcpdump 公用程式來收集進一步資訊:
- 如果您是 Private Cloud 使用者,可以收集
tcpdump
要求存取資料用戶端可以是用戶端應用程式 (對於傳入、 或北極連線) 或訊息 處理器 (用於連出或南向連線)。伺服器可以是 Edge Router 傳入或北向連線) 或後端伺服器 。 - 如果您是公有雲使用者,可以收集
tcpdump
僅限用戶端應用程式 (傳入或北向連線) 的資料或後端伺服器的資料 (針對連出或南向連線),因為您需要 無法存取 Edge Router 或訊息處理器。
敬上 請參閱 tcpdump 資料,進一步瞭解如何使用tcpdump -i any -s 0 host IP address -w File name
tcpdump
指令。 - 如果您是 Private Cloud 使用者,可以收集
- 使用 Wireshark 或
tcpdump
類似的工具 - 從
tcpdump
輸出內容中,找出拒絕連線的主機 (用戶端或伺服器) 驗證憑證 - 您可以擷取另一端傳送的憑證 (前提是
tcpdump
輸出內容為 未加密的資料。這有助於比較這個憑證是否與 信任存放區中可用的憑證 - 查看範例
tcpdump
,瞭解訊息處理器與 後端伺服器tcpdump
範例顯示憑證不明錯誤
- 訊息處理器 (用戶端) 傳送「Client Hello」將要求傳送至後端伺服器 (伺服器) 訊息。
- 後端伺服器傳送「Server Hello」訊息中的訊息處理者 #61.
- 兩者會共同驗證所使用的通訊協定和加密套件演算法。
- 後端伺服器將「Certificate」和「Server Hello Done」訊息傳送至 訊息 #68 中的「Message Processor」字樣。
- 訊息處理器傳送嚴重警示「說明:憑證」 訊息 #70 中的「不明」。
- 深入瞭解訊息 #70,沒有其他詳情
而不是快訊訊息,如下所示:
- 查看訊息 #68,取得後端傳送的憑證相關詳細資料 ,如下圖所示:
- 可取得後端伺服器的憑證及其完整鏈結 「憑證」下方部分,如上圖所示。
- 如果路由器 (北方) 發現憑證不明,
訊息處理器 (southbound) (如上述範例所示),然後依循這些
步驟:
- 取得儲存在特定信任存放區的憑證及其鏈結。(請參閱
為路由器和目標端點設定
訊息處理器)。您可以使用下列 API 取得
憑證:
-
取得信任儲存庫中的憑證名稱:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs
-
在信任儲存庫中取得憑證的詳細資料:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs/cert-name
-
取得信任儲存庫中的憑證名稱:
- 檢查路由器信任儲存庫中儲存的憑證 (北向) 或
訊息處理器 (southbound) 與儲存在
用戶端應用程式的 KeyStore (北入) 或目標伺服器 (南界),或是
會從
tcpdump
輸出內容取得。所以造成差異 導致 TLS/SSL 握手失敗
- 取得儲存在特定信任存放區的憑證及其鏈結。(請參閱
為路由器和目標端點設定
訊息處理器)。您可以使用下列 API 取得
憑證:
- 如果用戶端應用程式發現不明憑證 (北界)
或目標伺服器 (southbound),請按照下列步驟操作:
- 取得儲存在特定
KeyStore。(請參閱路由器和目標端點的虛擬主機設定)
「訊息處理者」設定)。您可以使用下列 API 來取得
憑證的詳細資料:
-
取得 KeyStore 中的憑證名稱:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
在 KeyStore 中取得憑證的詳細資料:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
-
取得 KeyStore 中的憑證名稱:
- 檢查路由器 KeyStore 中儲存的憑證 (北方),或是
Message Processor (southbound) 符合儲存在
用戶端應用程式 (北方) 或目標伺服器 (南方),或者是
從
tcpdump
輸出內容取得。如果兩者不一致,原因就是 SSL 握手失敗
- 取得儲存在特定
KeyStore。(請參閱路由器和目標端點的虛擬主機設定)
「訊息處理者」設定)。您可以使用下列 API 來取得
憑證的詳細資料:
- 如果伺服器/用戶端傳送的憑證已過期,則接收端
用戶端/伺服器拒絕憑證,而您會在
tcpdump
:快訊 (等級:嚴重、說明:憑證已過期)
- 確認相關主機 KeyStore 中的憑證已過期。
解析度
如要解決上述示例中的問題,請上傳有效的後端伺服器的 提供給訊息處理器的信任者憑證
下表摘要說明解決問題的步驟,具體說明 問題。
原因 | 說明 | 解析度 |
憑證過期 |
NorthBound
|
將新憑證及其完整鏈結上傳到適當的 KeyStore 主機。 |
SouthBound
|
將新憑證及其完整鏈結上傳到適當的 KeyStore 主機。 | |
不明的憑證 |
NorthBound
|
將有效的憑證上傳至適當主機的信任存放區。 |
SouthBound
|
將有效的憑證上傳至適當主機的信任存放區。 |
SNI 已啟用 伺服器
當用戶端與伺服器通訊時,可能會發生 TLS/SSL 握手失敗 已啟用名稱指示 (SNI) 伺服器,但用戶端未啟用 SNI。這可能發生在北邊, 位於 Edge 中的南向連線
首先,您必須找出所用伺服器的主機名稱和通訊埠號碼,然後檢查 啟用或未啟用 SNI
識別已啟用 SNI 的伺服器
- 執行
openssl
指令,並嘗試連線至相關的伺服器主機名稱 (Edge) 路由器或後端伺服器),「不傳遞伺服器名稱」,如下所示: 敬上 你可能會取得憑證,有時可能會發現 opensl 指令,如下所示:openssl s_client -connect hostname:port
CONNECTED(00000003) 9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
- 執行
openssl
指令,並嘗試連線至相關伺服器主機名稱 (Edge 路由器或後端伺服器),如下所示傳遞伺服器名稱:openssl s_client -connect hostname:port -servername hostname
- 如果步驟 1 發生握手失敗,或是在步驟 1 中取得不同的憑證 步驟 2,表示指定伺服器已啟用 SNI。
確認伺服器已啟用 SNI 後,請按照下列步驟 檢查是否因用戶端無法與 SNI 伺服器
診斷
- 判斷錯誤是發生在北距或 southbound 連線。如要進一步瞭解這項功能 確定,請參閱 判斷問題來源。
- 執行
tcpdump 公用程式來收集進一步資訊:
- 如果您是 Private Cloud 使用者,可以收集
tcpdump
要求存取資料用戶端可以是用戶端應用程式 (對於傳入、 或北極連線) 或訊息 處理器 (用於連出或南向連線)。伺服器可以是 Edge Router 傳入或北向連線) 或後端伺服器 。 - 如果您是公有雲使用者,可以收集
tcpdump
僅限用戶端應用程式 (傳入或北向連線) 的資料或後端伺服器的資料 (針對連出或南向連線),因為您需要 無法存取 Edge Router 或訊息處理器。
敬上 詳情請見 tcpdump 資料,進一步瞭解如何使用tcpdump -i any -s 0 host IP address -w File name
tcpdump
指令。 - 如果您是 Private Cloud 使用者,可以收集
- 使用 Wireshark 或
tcpdump
類似的工具 - 以下是使用 Wireshark 的
tcpdump
分析範例:- 在此範例中,邊緣訊息之間發生 TLS/SSL 握手失敗 處理器和後端伺服器 (南界連線)。
- 以下
tcpdump
輸出內容中的訊息 #4 顯示訊息處理器 (來源) 已傳送 「客戶您好」訊息傳送至後端伺服器 (目的地)。 - 選取「Client Hello」訊息會顯示 處理器使用 TLSv1.2 通訊協定。
- 訊息 #4 顯示後端伺服器確認「Client Hello」訊息 來自訊息處理器
- 後端伺服器會立即傳送「嚴重快訊:握手」 「訊息處理者」失敗 (訊息 #5)。這表示 TLS/SSL 握手 並關閉連線。
- 閱讀訊息 6 以瞭解下列資訊
- 後端伺服器支援 TLSv1.2 通訊協定。也就是說 在訊息處理器與後端伺服器之間進行比對
- 不過,後端伺服器仍會傳送「嚴重快訊:握手」 「訊息處理器」失敗,如下圖所示:
- 這個錯誤的可能原因如下:
- 訊息處理器並未使用 後端伺服器
- 後端伺服器已啟用 SNI,但用戶端應用程式未傳送 伺服器名稱
- 進一步查看
tcpdump
輸出內容中的訊息 #3 (Client Hello)。請注意, 缺少 Extension: server_name,如下所示: - 這即可確認訊息處理者並未將 server_name 設為啟用 SNI 的後端伺服器。
- 這是 TLS/SSL 握手失敗的原因,以及後端導致 伺服器將「嚴重警告:握手失敗」訊息傳送至郵件 處理器。
- 請確認
jsse.enableSNIExtension property
訊息處理器上的system.properties
設為 false,以便確認 「訊息處理器」未啟用與已啟用 SNI 的伺服器通訊。
解析度
執行 步驟如下:
- 建立
/opt/apigee/customer/application/message-processor.properties
檔案 (如果尚未建立的話)。 - 在這個檔案中新增下列程式碼:
conf_system_jsse.enableSNIExtension=true
- 擁有這個檔案的擁有者 (
apigee:apigee
):chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- 重新啟動訊息處理器。
/opt/apigee/apigee-service/bin/apigee-service message-processor restart
- 如果您有多個訊息處理器,請在所有 訊息處理器。
如果您無法判斷 TLS/SSL 握手失敗的原因
並修正問題;如需進一步協助,請與
Apigee Edge 支援。請提供問題的完整詳細資料以及
tcpdump
輸出內容。