簡介
本文檔介紹如何配置安全斷言標籤語言(SAML),重點是透過Microsoft Azure MFA配置ASA AnyConnect。
必要條件
需求
思科建議您瞭解以下主題:
- 自適應安全裝置(ASA)上RA VPN配置的基本知識。
- SAML和Microsoft Azure的基本知識。
- 已啟用AnyConnect許可證(APEX或僅VPN)。
採用元件
本文中的資訊係根據以下軟體和硬體版本:
- Microsoft Azure AD訂閱。
- Cisco ASA 9.7+和Anyconnect 4.6+
- 使用AnyConnect VPN配置檔案
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
SAML是基於XML的架構,用於在安全域之間交換身份驗證和授權資料。它在使用者、服務提供商(SP)和身份提供者(IdP)之間建立一個信任圈,允許使用者一次性登入多個服務。Microsoft Azure MFA與Cisco ASA VPN裝置無縫整合,為Cisco AnyConnect VPN登入提供額外的安全性。
SAML元件
中繼資料:它是以XML為基礎的檔案,可確保IdP與SP之間的安全交易。它允許IdP和SP協商協定。
裝置支援的角色(IdP、SP)
一個裝置可以支援多個角色,並且可以包含SP和IdP的值。如果包含的資訊用於單一登入IdP,則在EntityDescriptor欄位下為IDPSSODescriptor;如果包含的資訊用於單一登入SP,則為SPSSODescriptor。這一點很重要,因為必須從相應的部分獲取正確的值才能成功設定SAML。
實體ID:此欄位是SP或IdP的唯一識別符號。單個裝置可以有多個服務,並且可以使用不同的實體ID來區分這些服務。例如,ASA對於需要驗證的不同隧道組具有不同的實體ID。驗證每個隧道組的IdP對於每個隧道組都有一個單獨的實體ID條目,以便準確辨識這些服務。
ASA可以支援多個IdP,並且每個IdP都有一個單獨的實體ID來區分它們。如果任一端收到來自不包含以前配置的實體ID的裝置的消息,則裝置可能會丟棄此消息,並且SAML身份驗證失敗。您可以在entityID旁邊的EntityDescriptor欄位中找到實體ID。
服務URL:這些定義了SP或IdP提供的SAML服務的URL。對於IdP,這通常是Single Logout Service和Single Sign-On Service。對於SP,這通常是「斷言消費者服務」和「單一註銷服務」。
SP使用IdP後設資料中發現的Single Sign-On服務URL將使用者重定向到IdP進行身份驗證。如果此值配置不正確,則IdP不會接收或無法成功處理SP傳送的身份驗證請求。
IdP使用在SP後設資料中找到的斷言消費者服務URL將使用者重定向回SP,並提供有關使用者身份驗證嘗試的資訊。如果配置不正確,則SP不會收到斷言(響應)或無法成功處理它。
在SP和IdP上都可以找到單一註銷服務URL。它用於幫助從SP註銷所有SSO服務,在ASA上為可選操作。在SP上配置來自IdP後設資料的SLO服務URL時,當使用者從SP上的服務註銷時,SP將向IdP傳送請求。IdP成功將使用者註銷服務後,會將使用者重定向回SP,並使用SP後設資料中的SLO服務URL。
服務URL的SAML繫結:繫結是SP用於將資訊傳輸到IdP的方法,反之亦然。這包括HTTP重定向、HTTP POST和成品。每種方法都有不同的資料傳輸方式。服務所支援的繫結方法包含在該服務的定義中。例如:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location= SSO Service >。ASA不支援專案繫結。ASA始終對SAML身份驗證請求使用HTTP重定向方法,因此,選擇使用HTTP重定向繫結的SSO服務URL以使IdP能夠預料到這一點,這一點非常重要。
用於簽名和加密操作的證書
為了為SP和IdP之間傳送的消息提供機密性和完整性,SAML提供了對資料進行加密和簽名的能力。用於加密和/或簽名資料的證書可以包含在後設資料中,以便接收端可以驗證SAML消息並確保其來自預期源。在KeyDescriptor use=signing和KeyDescriptor use=encryption下的後設資料中可以找到用於簽名和加密的證書,請分別選擇X509Certificate。ASA不支援加密SAML消息。
網路圖表
設定
從Microsoft應用庫增加Cisco AnyConnect
第1步:登入到Azure門戶並選擇Azure Active Directory。
步驟 2.如圖所示,選擇Enterprise Applications。
步驟 3. 現在,請選擇New Application,如下圖所示。
步驟 4.在從庫增加部分,在搜尋框中鍵入AnyConnect,從結果面板中選擇Cisco AnyConnect,然後增加應用。
步驟 5.選擇Single Sign-on 選單項,如此圖中所示。
步驟 6.選擇SAML,如圖所示。
步驟 7.使用以下詳細資訊編輯第1部分。
a. Identifier (Entity ID) - https://<VPN URL>/saml/sp/metadata/<TUNNEL-GROUP NAME>
b. Reply URL (Assertion Consumer Service URL) - https://<VPN URL>/+CSCOE+/saml/sp/acs?tgname=<TUNNEL-GROUP NAME>
Example: vpn url called asa.example.com and tunnel-group called AnyConnectVPN-1
步驟 8.在SAML Signing Certificate部分中,選擇Download以下載證書檔案,並將其儲存到您的電腦上。
步驟 9.這是ASA配置所必需的。
- Azure AD識別符號-這是我們的VPN配置中的saml idp。
- 登入URL -這是URL登入。
- 註銷URL -這是URL註銷。
將Azure AD使用者分配到應用
在本部分中,由於您授予了對Cisco AnyConnect應用的訪問許可權,Test1被啟用以使用Azure單一登入。
步驟 1.在應用的概述頁面中,選擇使用者和組,然後選擇增加使用者。
步驟 2.在Add Assignment對話方塊中選擇Users and groups。
步驟 3. 在Add Assignment對話方塊中,按一下Assign按鈕。
透過CLI為SAML配置ASA
步驟 1. 建立信任點並導入您的SAML證書。
config t
crypto ca trustpoint AzureAD-AC-SAML
revocation-check none
no id-usage
enrollment terminal
no ca-check
crypto ca authenticate AzureAD-AC-SAML
-----BEGIN CERTIFICATE-----
…
PEM Certificate Text you downloaded goes here
…
-----END CERTIFICATE-----
quit
步驟 2. 這些指令會提供您的SAML IdP。
webvpn
saml idp https://xxx.windows.net/xxxxxxxxxxxxx/ - [Azure AD Identifier]
url sign-in https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxxxxx/saml2 - [Login URL]
url sign-out https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0 – Logout URL
trustpoint idp AzureAD-AC-SAML - [IdP Trustpoint]
trustpoint sp ASA-EXTERNAL-CERT - [SP Trustpoint]
no force re-authentication
no signature
base-url https://asa.example.com
步驟 3. 對VPN隧道配置應用SAML Authentication。
tunnel-group AnyConnectVPN-1 webvpn-attributes
saml identity-provider https://xxx.windows.net/xxxxxxxxxxxxx/
authentication saml
end
write memory
注意:如果對IdP配置進行更改,則需要從隧道組中刪除saml identity-provider配置,然後重新應用該配置以使更改生效。
驗證
使用SAML Auth測試AnyConnect
步驟 1. 連線到您的VPN URL,並在Azure AD詳細資訊中輸入您的日誌。
步驟2.核准登入要求。
步驟3. AnyConnect已連線。
常見問題
實體ID不匹配
偵錯範例:
[SAML] consume_assertion:#LassoServer未知的提供程式識別符號。若要在#LassoServer物件中註冊提供者,您必須使用方法lasso_server_add_provider()或lasso_server_add_provider_from_buffer()。
問題:通常意味著ASA webvpn配置下的saml idp [entityID]命令與IdP後設資料中找到的IdP實體ID不匹配。
解決方案:檢查IdP後設資料檔案的實體ID,並更改saml idp [entity id]命令以與此匹配。
時間不相符
偵錯範例:
[SAML] NotBefore:2017-09-05T23:59:01.896Z NotOnOrAfter:2017-09-06T00:59:01.896Z超時:0
[SAML] consume_assertion:斷言已過期或無效
問題1. ASA時間未與IdP的時間同步。
解決方案1.使用IdP使用的同一NTP伺服器配置ASA。
問題2. 斷言在指定時間之間無效。
解決方案2. 修改ASA上配置的超時值。
使用了錯誤的IdP簽名證書
偵錯範例:
[Lasso] func=xmlSecOpenSSLvpSignatureVerify:file=signatures.c:line=493:obj=rsa-sha1:subj=EVP_VerifyFinal:error=18:data does not match:signature does not match
[SAML] consume_assertion:配置檔案無法驗證消息上的簽名
問題:ASA無法驗證由IdP簽名的消息,或者沒有要驗證的ASA簽名。
解決方案:檢查安裝在ASA上的IdP簽名證書,確保該證書與IdP傳送的證書匹配。如果確認此情況,請確保簽名包含在SAML響應中。
無效的宣告觀眾
偵錯範例:
[SAML] consume_assertion:斷言受眾無效
問題: IdP定義不正確的受眾。
解決方案:在IdP上更正受眾配置。它必須與ASA的實體ID匹配。
Assertion Consumer Service的URL錯誤
示例調試:傳送初始身份驗證請求後,無法接收任何調試。使用者可以在IdP輸入憑證,但IdP不會重定向到ASA。
問題:為錯誤的斷言消費者服務URL配置了IdP。
解決方案:檢查配置中的基本URL並確保其正確。使用show檢查ASA後設資料,以確保斷言消費者服務URL是正確的。為了進行測試,請瀏覽它。如果ASA上的這兩個選項均正確,請檢查IdP以確保URL正確。
未生效的SAML配置更改
示例:在修改或更改單一登入URL、SP證書後,SAML仍不起作用,並且會傳送以前的配置。
問題:當存在影響它的配置更改時,ASA需要重新生成其後設資料。它不會自動執行此操作。
解決方案:進行更改後,在受影響的隧道組下刪除並重新應用saml idp [entity-id]命令。
疑難排解
大多數SAML故障排除都涉及配置錯誤,在檢查SAML配置或運行調試時可以發現此錯誤。debug webvpn saml 255可用於排除大多數問題,但是,在此調試不提供有用資訊的情況下,還可以運行其他調試:
debug webvpn saml 255
debug webvpn 255
debug webvpn session 255
debug webvpn request 255
相關資訊