簡介
本文檔介紹如何配置安全斷言標籤語言(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身份驗證失敗。實體ID可在entityID旁邊的EntityDescriptor欄位中找到。
服務URL:這些定義由SP或IdP提供的SAML服務的URL。對於IdP,這通常為單一註銷服務和單一登入服務。對於SP,這通常是Assertion Consumer Service和Single Logout Service。
SP使用IdP後設資料中找到的單點登入服務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和Artifact。每種方法都有不同的資料傳輸方式。服務支援的繫結方法包含在服務的定義中。例如: SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location=https://saml.example.com/simplesaml/saml2/idp/SSOService.php/ >。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.在Add from the gallery部分的「搜尋」框中鍵入AnyConnect,從結果面板中選擇Cisco AnyConnect,然後add應用。
步驟 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配置中的同一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. 將SAML身份驗證應用於VPN隧道配置。
tunnel-group AnyConnectVPN-1 webvpn-attributes
saml identity-provider https://xxx.windows.net/xxxxxxxxxxxxx/
authentication saml
end
write memory
注意:如果更改IdP配置,則需要從隧道組中刪除同一身份提供程式配置,然後重新應用該配置以使更改生效。
驗證
使用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 do 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後設資料,確保Assertion Consumer Service 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
相關資訊