針對應用程式閘道中的相互驗證錯誤進行疑難排解
了解如何針對使用 Azure 應用程式閘道的相互驗證問題進行疑難排解。
概觀
在 Azure 應用程式閘道上設定相互驗證後,有可能在嘗試使用相互驗證時發生許多錯誤。 部分常見的錯誤原因包括:
- 上傳沒有根 CA 憑證的憑證或憑證鏈結
- 上傳有多個根 CA 憑證的憑證鏈結
- 上傳只包括分葉憑證而沒有 CA 憑證的憑證鏈結
- 簽發者 DN 不符導致的驗證錯誤
以下說明您可能遭遇的各種情節,並說明如何針對這些情節進行疑難排解。 之後我們會探討錯誤碼,說明您可能會在相互驗證時遇到的錯誤碼,以及導致特定錯誤碼的可能原因。 所有用戶端憑證驗證失敗應該都會產生 HTTP 400 錯誤碼。
情節疑難排解:設定問題
嘗試設定相互驗證時,您可能會遭遇幾種情節。 以下我們將說明如何針對部分最常見的陷阱進行疑難排解。
自我簽署憑證
問題
您上傳的用戶端憑證屬於自我簽署憑證,且結果導致錯誤碼 ApplicationGatewayTrustedClientCertificateDoesNotContainAnyCACertificate。
解決方案
再次檢查您使用的自我簽署憑證具備 BasicConstraintsOid = "2.5.29.19" 延伸模組,表示主體可以作為 CA 使用。 這有助確保所用的憑證屬於 CA 憑證。 如需如何產生自我簽署用戶端憑證的詳細資訊,請參閱受信任的用戶端憑證。
情節疑難排解:連線能力問題
雖然您可能在設定相互驗證時沒遭遇任何問題,但將要求傳送至您的 Azure 應用程式閘道時,您遇到問題了。 我們將在下一節中提出部分常見問題和解決方案。 您會在您的應用程式閘道存取記錄中找到 sslClientVerify 屬性。
sslClientVerify 為 NONE
問題
sslClientVerify 屬性在您的存取記錄中顯示 "NONE"。
解決方案
若用戶端向應用程式閘道傳送要求時未傳送用戶端憑證,就會如此。 用戶端向應用程式閘道傳送要求時若未正確設定使用用戶端憑證的方式,就容易發生這個問題。 您可以使用下列 OpenSSL 命令,確認應用程式閘道上設定的用戶端驗證已如預期順利運作:
openssl s_client -connect <hostname:port> -cert <path-to-certificate> -key <client-private-key-file>
-cert
旗標為分葉憑證,-key
旗標則為用戶端私密金鑰檔案。
如需如何使用 OpenSSL s_client
命令的詳細資訊,請參閱其手冊頁。
SslClientVerify 為 FAILED
問題
sslClientVerify 屬性在您的存取記錄中顯示為 "FAILED"。
解決方案
存取記錄發生失敗的可能原因有很多。 下方清單即為失敗的常見原因:
- 無法取得簽發者憑證:找不到用戶端憑證的簽發者憑證。 通常這表示應用程式閘道上的受信任用戶端 CA 憑證鏈結未完成。 請驗證上傳至應用程式閘道的受信任用戶端 CA 憑證鏈結已經完成。
- 無法取得本地簽發者憑證:與無法取得簽發者憑證類似,找不到用戶端憑證的簽發者憑證。 通常這表示應用程式閘道上的受信任用戶端 CA 憑證鏈結未完成。 請驗證上傳至應用程式閘道的受信任用戶端 CA 憑證鏈結已經完成。
- 無法驗證第一個憑證:無法驗證用戶端憑證。 用戶端只提出分葉憑證且簽發者不受信任時,就會發生這種特殊錯誤。 請驗證上傳至應用程式閘道的受信任用戶端 CA 憑證鏈結已經完成。
- 無法驗證用戶端憑證簽發者:VerifyClientCertIssuerDN 設定為 true 時,就會發生這項錯誤。 若用戶端憑證的簽發者 DN,不符合客戶上傳之受信任用戶端 CA 憑證鏈結擷取的 ClientCertificateIssuerDN,就容易發生這個狀況。 如需應用程式閘道如何擷取 ClientCertificateIssuerDN 的詳細資訊,請參閱應用程式閘道擷取簽發者 DN。 為落實最佳做法,請務必將每個檔案的憑證鏈結上傳至應用程式閘道。
- 不支援的憑證用途:請確定用戶端憑證為用戶端驗證指定擴充金鑰使用方法 (1.3.6.1.5.5.7.3.2)。 如需擴充金鑰使用方法的定義和用戶端驗證物件識別碼的詳細資料,請參閱 RFC 3280 和 RFC 5280。
如需如何擷取整個受信任用戶端 CA 憑證鏈結以上傳至應用程式閘道的詳細資訊,請參閱如何擷取受信任用戶端 CA 憑證鏈結。
錯誤碼疑難排解
如果您看到任何下列錯誤碼,我們提供幾種建議的解決方案,可協助您解決可能面臨的問題。
錯誤碼:ApplicationGatewayTrustedClientCertificateMustSpecifyData
原因
遺漏憑證資料。 您可能上傳了空白檔案的憑證,裡面沒有任何憑證資料。
解決方案
驗證所上傳的憑證檔案未遺漏任何資料。
錯誤碼:ApplicationGatewayTrustedClientCertificateMustNotHavePrivateKey
原因
憑證鏈結包含私密金鑰。 憑證鏈結中不應包含私密金鑰。
解決方案
再次檢查上傳的憑證鏈結並移除鏈結內包含的私密金鑰, 接著重新上傳不包含私密金鑰的鏈結。
錯誤碼:ApplicationGatewayTrustedClientCertificateInvalidData
原因
導致此錯誤碼的可能原因有兩個:
- 鏈結未使用正確格式,導致剖析失敗。 應用程式閘道預期憑證鏈結使用 PEM 格式,且同時預期個別憑證資料受到分隔。
- 剖析器找不到需要剖析的內容。 上傳的檔案可能只包含分隔符號,而沒有憑證資料。
解決方案
根據這項錯誤的原因,有兩個可能的解決方案:
- 驗證上傳的憑證鏈結使用正確格式 (PEM),且憑證資料已妥善分隔。
- 檢查所上傳的憑證檔案除了分隔符號以外也包含憑證資料。
錯誤碼:ApplicationGatewayTrustedClientCertificateDoesNotContainAnyCACertificate
原因
所上傳的憑證只包含分葉憑證而沒有 CA 憑證。 系統可接受上傳包含 CA 憑證和分葉憑證的憑證鏈結,因為系統會直接忽略分葉憑證,但憑證必須具有 CA。
解決方案
再次檢查上傳的憑證鏈結,確認已包含分葉憑證以外的內容, 其中應包含 BasicConstraintsOid = "2.5.29.19" 延伸模組,指明該主體可作為 CA 使用。
錯誤碼:ApplicationGatewayOnlyOneRootCAAllowedInTrustedClientCertificate
原因
憑證鏈結包含數個根 CA 憑證「或」未包含任何根 CA 憑證。
解決方案
所上傳的憑證必須只包含一個根 CA 憑證 (以及必要的所有中繼 CA 憑證)。