说明

最常见的SSL XXX认证恐怕是用户名和密码了,其实还有个更加方便的认证,那么就是证书,为什么说SSL XXX的证书认证方便呢,因为部署起来非常相对来说比较容易。目前只有ASA支持SSL XXX的证书认证,路由器只支持AAA技术。

SSL和LDAP区别 ldap sso区别_服务器

介绍下几个概念:LDAP,轻量级目录服务,它非常类似一个目录合集,可以快速的查找到特定的资源, 像微软的AD就使用了LDAP,在SSL XXX中介绍LDAP,肯定是它来做认证和授权咯, LDAP支持直接调用AD数据库的用户信息来验证客户端,这样省去了部署Radius和ACS的麻烦。

证书认证: 这里讲的证书认证不是Server端提供一个合法证书, 而是,PC端也需要申请个人证书,并且把这个证书作为验证存在,那么怎么可以验证呢,可以回想下证书 由许多字段组成,在企业下的CA,当用户申请一个证书后,它是以用户名作为cn的。

这次环境,ASA使用的是8.4版本的OS,8.0也可以做,有些命令上的变化, PC使用XP,同时拥有user1、和user2的证书, 服务器使用的是2003,装了AD和CA

一、服务器初始化

关于服务器的搭建可以参考之前的文章dot1x的企业部署,其实对于个熟悉网络的人来说,搭建域和CA不是难事的。

创建两个user和group,LDAP一般需要依靠组进行授权,而不是针对单个用户

SSL和LDAP区别 ldap sso区别_ci_02

user1隶属于group1、 user2 隶属于group2,后面就针对group1 和group 2进行授权

二、ASA 离线申请证书,一定要保证时间同步

1、创建密钥对

FW-ASA55200(config)# crypto key generate rsa label cciese modulus 2048
 FW-ASA55200(config)# crypto ca trustpoint SSLXXX2、创建信任点
 FW-ASA55200(config-ca-trustpoint)# enrollment terminal
 FW-ASA55200(config-ca-trustpoint)# subject-name cn=www.cciers.com
 FW-ASA55200(config-ca-trustpoint)# fqdn www.cciers.com
 FW-ASA55200(config-ca-trustpoint)# keypair cciese
 FW-ASA55200(config-ca-trustpoint)# exit

cn和FQDN在SSL XXX的证书中非常需要注意i,因为它必须匹配你的SSL XXX的域名。

SSL和LDAP区别 ldap sso区别_ci_03

有时候,我们访问一个https的网站,它会提示这个证书是有问题的,那么到低哪有问题呢,看下它提示的内容,有效期内、网页名称匹配、信任的颁发机构。

HTTPS证书不报错的三个规则:

1、受信任的根证书颁发机构 (PC必须安装根证书到信任机构) 2、时间在有效期内 3、FQDN, 也就是我们用域名访问的时候,那么这个服务器的证书必须包含这个域名的信息,也即是FQDN信息 (我们实际环境中,申请的域名,那么在申请证书的时候FQDN就填写这个域名)

 

FW-ASA55200(config)# crypto ca enroll SSLXXX 产生个人证书的申请文件 PKCS#10

SSL和LDAP区别 ldap sso区别_SSL和LDAP区别_04

它会警告 这个证书将添加一个FQDN, 这个证书用于XXX身份验证可能会导致连接问题,询问是否要登记。 这里选择yes

复制这个PKCS#10的文件,发送给CA管理员。

3、CA服务器离线产生证书 通过http://localhost/certsrv/登录到网站,申请一个证书——–高级申请————-使用based64 编码的CMC或PKCS#10文件————–

SSL和LDAP区别 ldap sso区别_SSL_05

注意这里要选择Web 服务器类型,然后提交

SSL和LDAP区别 ldap sso区别_服务器_06

发现这里自动颁发了,这就是企业CA与独立CA不同之处,独立CA是需要手动颁发的,而企业CA大部分应用与企业内部,配合组策略来部署,所以,自动颁发是比较可行的。 下载以 base 64保存到桌面。

另外一个,还需要下载根证书,根证书比较简单,直接返回主页。

下载一个CA证书————–以based 64下载,保存到本地

SSL和LDAP区别 ldap sso区别_服务器_07

这样就两张证书了。

4、导入根证书和个人证书 用记事本或者写字板打开证书,先打开根证书,复制里面的内容

FW-ASA55200(config)# crypto ca authenticate SSLXXX

粘贴根证书的内容,按quit完成, 最后提示,根证书导入成功 导入个人证书,用记事本或者写字板打开个人证书,复制内容 FW-ASA55200(config)# crypto ca import SSLXXX certificate

SSL和LDAP区别 ldap sso区别_SSL_08

粘贴复制的内容,按quit结束, 提示证书导入成功。

三、PC离线证书申请方式

在实验环境中,我们可以直接通过http的形式访问内部CA服务器,进行证书申请,但是,为了让朋友们在实际工作中明白怎么离线申请证书,我们可以以几种方式进行。 1、管理员以不同的用户名登陆,为它们分别申请证书,这个适合没有加域的用户 2、如果是加域了的用户,那么完全可以通过组策略方式,让用户自动完成证书注册,这样对于用户来说是透明的。 3、可以通过把CA服务器暂时性的转换到外部,让PC进行申请证书

这里,我们使用第一种方法进行, 关于组策略部署证书在dot1x系列已经讲过了,有兴趣的朋友可以看看。

SSL和LDAP区别 ldap sso区别_服务器_09

申请一个证书———–用户证书———–提交

SSL和LDAP区别 ldap sso区别_SSL_10

然后,安装此证书,这时候需要选择工具————Internet选项——-内容———证书————–

SSL和LDAP区别 ldap sso区别_SSL_11

选择导出

SSL和LDAP区别 ldap sso区别_服务器_12

SSL和LDAP区别 ldap sso区别_SSL_13

SSL和LDAP区别 ldap sso区别_服务器_14

然后保存在桌面。使用同样的方法对user2 进行申请证书——然后导出来,保存在桌面。

SSL和LDAP区别 ldap sso区别_SSL和LDAP区别_15

将这三张证书一起发送给客户端。

先安装根证书,然后安装个人证书

SSL和LDAP区别 ldap sso区别_ci_16

SSL和LDAP区别 ldap sso区别_SSL和LDAP区别_17

SSL和LDAP区别 ldap sso区别_服务器_18

在导入个人证书的是,不要标志此密钥为可导出的、这样有效的保护了证书

SSL和LDAP区别 ldap sso区别_服务器_19

PC上的额外步骤

因为在这次环境中,没有部署DNS服务器,而我们访问SSL XXX是利用域名方式进行访问的,所以这里必须修改下PC的hosts文件,添加一条SSL XXX域名的解析记录。 C:\WINDOWS\system32\drivers\etc

SSL和LDAP区别 ldap sso区别_ci_20

SSL XXX的配置

FW-ASA55200(config)# webxxx
 FW-ASA55200(config-webxxx)# enable outsideFW-ASA55200(config)# tunnel-group DefaultWEBXXXGroup webxx-attributes
 FW-ASA55200(config-tunnel-webxxx)# authentication certificate
 FW-ASA55200(config)# ssl trust-point ssLXXX inside
 FW-ASA55200(config)# ssl certificate-authentication interface outside port 443

就启用SSL XXX,并且启用了证书认证。

SSL和LDAP区别 ldap sso区别_SSL_21

可以选择user1或者user2直接进行验证,而不用输入用户名了。

没有任何提示证书不安全,认证通过了

SSL XXX的LDAP授权

FW-ASA55200(config)# aaa-server 2003 protocol ldap
 FW-ASA55200(config)# aaa-server 2003 (inside) host 10.1.1.249
 FW-ASA55200(config-aaa-server-host)# ldap-base-dn dc=cciers, dc=com dn属性
 FW-ASA55200(config-aaa-server-host)# ldap-scope subtree 查询的访问包括子域
 FW-ASA55200(config-aaa-server-host)# ldap-naming-attribute sAMAccountName 微软的格式
 FW-ASA55200(config-aaa-server-host)# ldap-login-dn cn=administrator, cn=users, dc=cciers, dc=com 管理员权限账户,必须明确标明它处于哪个位置,
 FW-ASA55200(config-aaa-server-host)# ldap-login-password cisco+123 管理员权限的密码
 FW-ASA55200(config-aaa-server-host)# server-type microsoft 服务的类型为微软
 FW-ASA55200(config-aaa-server-host)# exit

SSL和LDAP区别 ldap sso区别_SSL_22

关于DN属性,如果学过微软的就知道,它是基于命名的格式,这里我创建了一个cciers.com的域,那么dn属性就是dc=cciers, dc=com,管理员权限的位置怎么区分呢, 我们可以看到administarot处于cciers.com的users下, 那么就是cn=administrator, cn=users, dc=cciers, dc=com

关于属性的映射

FW-ASA55200(config)# ldap attribute-map sslXXX
 FW-ASA55200(config-ldap-attribute-map)# map-name memberOf IETF-Radius-Class
 FW-ASA55200(config-ldap-attribute-map)# map-value memberOf CN=group1,OU=SSLXXX,DC=cciers,DC=com 1
 FW-ASA55200(config-ldap-attribute-map)# map-value memberOf CN=group2,OU=SSLXXX,DC=cciers,DC=com 2
 怎么知道这个属性怎么得到呢,如果熟悉微软的人,那么就能轻松的写出来,但是,有时候我们学习网络的人来说,只对网络精通,而微软的却不怎么样了,我们可以通过一个debug信息来获取信息。debug ldap 255
 ASA5520# test aaa authentication 2003 host 10.1.1.249 username user1 password $
 INFO: Attempting Authentication test to IP address (timeout: 12 seconds)[8] Session Start
 [8] New request Session, context 0xce37fdd0, reqType = 1
 [8] Fiber started
 [8] Creating LDAP context with uri=ldap://10.1.1.249:389
 [8] Connect to LDAP server: ldap://10.1.1.249:389, status = Successful
 [8] defaultNamingContext: value = DC=cciers,DC=com
 [8] supportedLDAPVersion: value = 3
 [8] supportedLDAPVersion: value = 2
 [8] supportedSASLMechanisms: value = GSSAPI
 [8] supportedSASLMechanisms: value = GSS-SPNEGO
 [8] supportedSASLMechanisms: value = EXTERNAL
 [8] supportedSASLMechanisms: value = DIGEST-MD5
 [8] Binding as administrator
 [8] Performing Simple authentication for administrator to 10.1.1.249
 [8] LDAP Search:
 Base DN = [dc=cciers, dc=com]
 Filter = [sAMAccountName=user1]
 Scope = [SUBTREE]
 [8] User DN = [CN=user1,OU=SSLXXX,DC=cciers,DC=com]
 [8] Talking to Active Directory server 10.1.1.249
 [8] Reading password policy for user1, dn:CN=user1,OU=SSLXXX,DC=cciers,DC=com
 [8] Read bad password count 0
 [8] Binding as user
 [8] Performing Simple authentication for user1 to 10.1.1.249
 [8] Checking password policy for user user1
 [8] Binding as administrator
 [8] Performing Simple authentication for administrator to 10.1.1.249
 [8] Authentication successful for user1 to 10.1.1.249
 [8] Retrieving user attributes from server 10.1.1.249
 [8] Retrieved Attributes:
 [8] objectClass: value = top
 [8] objectClass: value = person
 [8] objectClass: value = organizationalPerson
 [8] objectClass: value = user
 [8] cn: value = user1
 [8] sn: value = user1
 [8] userCertificate: value = 0…0..r…….a……..!0…*.H……..0<1.0…..&…,d….com1.0…..&…,d…
 [8] userCertificate: value = 0…0..s…….as.!……0…*.H……..0<1.0…..&…,d….com1.0…..&…,d…
 [8] userCertificate: value = 0…0..s…….ap.o……0…*.H……..0<1.0…..&…,d….com1.0…..&…,d…
 [8] distinguishedName: value = CN=user1,OU=SSLXXX,DC=cciers,DC=com
 [8] instanceType: value = 4
 [8] whenCreated: value = 20121219052131.0Z
 [8] whenChanged: value = 20121219070301.0Z
 [8] displayName: value = user1
 [8] uSNCreated: value = 49184
 [8] memberOf: value = CN=group1,OU=SSLXXX,DC=cciers,DC=com
 [8] uSNChanged: value = 49226
 [8] name: value = user1
 [8] objectGUID: value = .q;FH..K….)y\.
 [8] userAccountControl: value = 512
 [8] badPwdCount: value = 0
 [8] codePage: value = 0
 [8] countryCode: value = 0
 [8] badPasswordTime: value = 130003706445625000
 [8] lastLogoff: value = 0
 [8] lastLogon: value = 130003706515000000
 [8] pwdLastSet: value = 130003680915468750
 [8] primaryGroupID: value = 513
 [8] objectSid: value = …………W.(fRZ.I]K..c…
 [8] accountExpires: value = 9223372036854775807
 [8] logonCount: value = 0
 [8] sAMAccountName: value = user1
 [8] sAMAccountType: value = 805306368
 [8] userPrincipalName: value = user1@cciers.com
 [8] objectCategory: value = CN=Person,CN=Schema,CN=Configuration,DC=cciers,DC=com
 [8] Fiber exit Tx=704 bytes Rx=6808 bytes, status=1
 [8] Session End
 INFO: Authentication Successful红色部分,已经给出user1的DN属性了,
 map-name memberOf IETF-Radius-Class class属性相当于ACS上的25 class属性
 map-value memberOf CN=group1,OU=SSLXXX,DC=cciers,DC=com 1 , 属性部分可以直接复制,1代表下面的group-policy,做个映射ASA5520(config)# aaa-server 2003 host 10.1.1.249
 ASA5520(config-aaa-server-host)# ldap-attribute-map sslXXX
 调用这个ldap属性映射ASA5520(config)# tunnel-group DefaultWEBXXXGroup general-attributes
 ASA5520(config-tunnel-general)# authorization-server-group 2003
 ASA5520(config-tunnel-general)# authorization-required
 ASA5520(config-tunnel-general)# username-from-certificate CN
 注意:8.3之前是这个命令 authorization-dn-attributes CN
 这些命令的意思是,当一个证书认证过来的时候,通过证书的CN位通过LDAP来询问这个用户在AD中的属性,然后通过属性对应的映射,给于授权。FW-ASA55200(config)# group-policy 1 internal
 FW-ASA55200(config)# group-policy 1 attributes
 FW-ASA55200(config-group-policy)# banner value user1FW-ASA55200(config)# group-policy 2 internal
 FW-ASA55200(config)# group-policy 2 attributes
 FW-ASA55200(config-group-policy)# banner value user2

测试结果

user1的证书验证

SSL和LDAP区别 ldap sso区别_SSL_23

user2的验证

SSL和LDAP区别 ldap sso区别_SSL_24

认证和授权全部通过了,证明之前的部署都是成功的。

总结:关于SSL XXX的证书验证其实还是很容易实现的,因为通常情况下,可以通过组策略或者NAT方式进行申请, 推荐使用组策略来部署,没加域的特别用户才用NAT方式进行申请。

1、LDAP还能完成认证的功能, 由于这次是证书认证,所以没介绍LDAP的详细使用 2、虽然LDAP功能比较强大,但是也有缺陷,比如不支持空格的OU,和中文的(在cisco中)