简介
本文档介绍如何通过Microsoft Azure MFA配置安全断言标记语言(SAML),重点关注ASA AnyConnect。
先决条件
要求
Cisco 建议您了解以下主题:
- 自适应安全设备(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的值。如果EntityDescriptor字段下包含IDPSSODescriptor(用于单点登录IdP),则此字段下包含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和单一注销服务。
SP使用IdP元数据中的单点登录服务URL将用户重定向到IdP进行身份验证。如果此值配置不正确,则IdP不会接收或无法成功处理SP发送的身份验证请求。
IdP使用在SP元数据中找到的Assertion Consumer Service 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。
第二步:如此图中所示,请选择企业应用。
第三步: 现在,请选择New Application,如下图所示。
第四步:在从库添加部分,在搜索框中键入AnyConnect,从结果面板选择Cisco AnyConnect,然后添加应用。
第五步:选择Single Sign-on菜单项,如下图所示。
第六步:选择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 Identifier -这是VPN配置中的saml idp。
- Login URL -这是URL登录。
- 注销URL -这是URL注销。
将Azure AD用户分配给应用
在本部分中,由于您向Cisco AnyConnect应用授予了访问权限,因此启用了Test1以使用Azure单一登录。
步骤1:在应用的概述页面中,选择用户和组,然后选择添加用户。
第二步:在“Add Assignment”对话框中选择Users and groups。
第三步: 在添加作业对话框中,单击分配按钮。
通过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
第二步: 这些命令会调配您的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
第三步: 将SAML身份验证应用于VPN隧道配置。
tunnel-group AnyConnectVPN-1 webvpn-attributes
saml identity-provider https://xxx.windows.net/xxxxxxxxxxxxx/
authentication saml
end
write memory
注意:如果更改IdP配置,则需要从隧道组中删除saml identity-provider配置,然后重新应用该配置,以使更改生效。
验证
使用SAML身份验证测试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.为ASA配置IdP使用的同一NTP服务器。
问题 2. 断言在指定时间之间无效。
解决方案 2. 修改ASA上配置的超时值。
使用了错误的IdP签名证书
调试示例:
[Lasso] func=xmlSecOpenSSLEvpSignatureVerify:file=signatures.c:line=493:obj=rsa-sha1:subj=EVP_VerifyFinal:error=18:data do not match:signature do not match
[SAML] consume_assertion:配置文件无法验证消息上的签名
问题:ASA无法验证由IdP签名的消息或没有供ASA验证的签名。
解决方案:检查ASA上安装的IdP签名证书,以确保其与IdP发送的证书匹配。如果确认,请确保签名包含在SAML响应中。
断言受众无效
调试示例:
[SAML] consume_assertion:断言受众无效
问题:IdP定义了不正确的受众。
解决方案:更正IdP上的受众配置。它必须与ASA的实体ID匹配。
断言消费者服务的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
相关信息