Microsoft ADFS+Shibboleth配置联合身份认证+单点登录服务

前段时间因为客户需要搭建了一个单点登录(SSO)系统,使用Shibboleth实现的,能够在访问特定Web资源时将AD中的用户名和密码作为登录凭据,其中shibboleth作为SP,ADFS作为IdP。

基础测试服务器至少需要两个,一个(服务器a)安装Windows Server 2012用来实现ADCS、ADDS、ADFS和SQL Server,另一个(服务器b)安装CentOS 6.6用来实现Web服务器、shibboleth SP。

关键几个步骤如下:配置各个服务器组件、配置服务器证书、配置shibboleth的配置文件(shibboleth2.xml)、配置adfs添加“信赖方信任”。下面详细说明一下。

配置服务器a

1.安装Windows Server 2012

2.安装Microsoft SQL Server 2012

3.添加新的管理员账户(不是Administrator)并添加到管理员组(Administrators),以后用此用户来登录并管理此服务器,不再使用Administrator。

4.添加一个服务账户并添加到IIS_IUSERS组中,之前可能需要安装“IIS”服务

5.调整电源管理策略以取消屏幕锁定,在“电源选项”中去掉“唤醒时的密码保护”—>“不需要密码”

6.调整计算机名称,将其改短,如ds,ad等,此处视情况而定

7.安装adds功能,将服务器提升为域控制器,合理设置NETBIOSYUMING,不使用dns委派。

8.安装合适的浏览器如Chrome,并取消IE增强的安全配置,安装合适的输入法并设为默认输入法,安装解压缩程序,如winrar等。

9.安装ad cs并配置安装好根证书,起好记又容易区分的名字,根证书(CA证书)一般命名为“主机名+二级域名+CA”,如一个域为ds.com,ADCS所在的计算机名为ds的CA名称一般为“ds-DS-CA”。

10.安装adfs,在此之前将先前(可以在步骤7完成)创建的管理员账户添加到“Domian Adminis”容器(用户组)中。

11.将第4步创建的服务账户加入SQL Server的登录许可中,即“指定的服务账户对数据库具有登录访问权限”,可不指定数据库实例名称,如果不指定名称则默认会创建“AdfsArtifactStore”和“AdfsConfiguration”两个数据库。

12.在安装adfs的过程中adcs会为adfs自己创建需要的证书,颁发给“主机名+主DNS后缀”,如一个域为ds.com,ADCS所在的计算机名为ds的证书名称一般为“ds.ds.com”,此域名用于adfs的联合身份验证名称和联合身份验证服务标识符,而且完整的联合身份验证服务标识符会被shibboleth用到。

配置服务器b,服务器选择CentOS6.6 64位

1.编译安装httpd,还可以选装最新的openssl

2.编译安装Shibboleth

wget http://shibboleth.net/downloads/log4shib/latest/log4shib-1.0.8.tar.gz    
wget http://shibboleth.net/downloads/c++-opensaml/latest/xmltooling-1.5.3.tar.gz    
wget http://shibboleth.net/downloads/c++-opensaml/latest/opensaml-2.5.3.tar.gz    
wget http://www.apache.org/dyn/closer.cgi?path=/santuario/c-library/xml-security-c-1.7.2.tar.gz    
wget http://mirrors.cnnic.cn/apache/santuario/c-library/xml-security-c-1.7.2.tar.gz    
wget http://shibboleth.net/downloads/service-provider/latest/shibboleth-sp-2.5.3.tar.gz

tar zxf log4shib-1.0.8.tar.gz    
cd log4shib-1.0.8    
./configure --disable-static --disable-doxygen --prefix=/opt/shibboleth-sp    
cd ..    
tar zxf xerces-c-3.1.1.tar.gz    
cd xerces-c-3.1.1    
./configure --prefix=/opt/shibboleth-sp --disable-netaccessor-libcurl    
cd ..    
cd log4shib-1.0.8    
make    
make install    
cd ..    
cd xerces-c-3.1.1    
make    
make install    
cd ..    
tar zxf xml-security-c-1.7.2.tar.gz    
cd xml-security-c-1.7.2    
./configure --without-xalan --disable-static --prefix=/opt/shibboleth-sp --with-xerces=/opt/shibboleth-sp    
make    
make install    
cd ..    
tar zxf xmltooling-1.5.3.tar.gz    
cd xmltooling-1.5.3    
./configure --with-log4shib=/opt/shibboleth-sp --prefix=/opt/shibboleth-sp -C    
make    
make install    
cd ..    
tar zxf opensaml-2.5.3.tar.gz    
cd opensaml-2.5.3    
./configure --with-log4shib=/opt/shibboleth-sp --prefix=/opt/shibboleth-sp -C    
make    
make install    
cd ..    
wget http://shibboleth.net/downloads/service-provider/latest/shibboleth-sp-2.5.3.tar.gz    
tar zxf shibboleth-sp-2.5.3.tar.gz    
cd shibboleth-sp-2.5.3    
./configure --with-log4shib=/opt/shibboleth-sp --enable-apache-24 --with-apxs24=/usr/local/httpd/bin/apxs --prefix=/opt/shibboleth-sp --with-apr1=/usr/local/apr-httpd/bin/apr-1-config --with-apu1=/usr/local/apr-util-httpd/bin/apu-1-config    
make    
make install

3.配置shibboleth的配置文件(shibboleth2.xml),可以借助shibd -t检查文件的合法性。

<SPConfig xmlns="urn:mace:shibboleth:2.0:native:sp:config"  
          xmlns:conf="urn:mace:shibboleth:2.0:native:sp:config"    
          xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"    
          xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"    
          xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"    
          clockSkew="180">    
    <OutOfProcess>    
        <Extensions>    
            <Library path="/opt/shibboleth-sp/lib/shibboleth/adfs.so" fatal="true"/>    
        </Extensions>    
    </OutOfProcess>    
    <InProcess logger="native.logger">    
        <Extensions>    
            <Library path="/opt/shibboleth-sp/lib/shibboleth/adfs-lite.so" fatal="true"/>    
        </Extensions>    
    </InProcess>    
    <RequestMapper type="Native">    
        <RequestMap>    
            <Host scheme="https" name="ssl.ds.cn">    
                <Path name="/admin" authType="shibboleth" requireSession="true"/>    
            </Host>    
        </RequestMap>    
    </RequestMapper>    
    <ApplicationDefaults entityID="https://ssl.ds.cn/shibboleth" homeURL="https://ssl.ds.cn"    
                         REMOTE_USER="eppn persistent-id targeted-id" signing="false" encryption="false" attributePrefix="AJP_">    
        <Sessions lifetime="28800" timeout="3600" relayState="ss:mem"    
                  checkAddress="false" handlerSSL="true" cookieProps="https">    
            <SSO entityID="http://ds.ds.cn/adfs/services/trust"    
                 discoveryProtocol="SAMLDS" discoveryURL="https://ds.example.org/DS/WAYF">    
                SAML2 SAML1    
            </SSO>    
            <Logout>SAML2 Local</Logout>    
            <Handler type="MetadataGenerator" Location="/Metadata" signing="false"/>    
            <Handler type="Status" Location="/Status" acl="127.0.0.1 ::1 172.16.179.3 172.16.172.33"/>    
            <Handler type="Session" Location="/Session" showAttributeValues="false"/>    
            <Handler type="DiscoveryFeed" Location="/DiscoFeed"/>    
        </Sessions>    
        <Errors supportContact="[email protected]"    
                helpLocation="/about.html"    
                styleSheet="/shibboleth-sp/main.css"/>    
        <MetadataProvider type="XML" file="ds.ds.cn-metadata.xml"/>    
        <AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map.xml"/>    
        <AttributeResolver type="Query" subjectMatch="true"/>    
        <AttributeFilter type="XML" validate="true" path="attribute-policy.xml"/>    
        <CredentialResolver type="File" key="ssl.ds.cn.key" certificate="ssl.ds.cn.cer" password="xxxxx"/>    
    </ApplicationDefaults>    
    <SecurityPolicyProvider type="XML" validate="true" path="security-policy.xml"/>    
    <ProtocolProvider type="XML" validate="true" reloadChanges="false" path="protocols.xml"/>    
</SPConfig>

4.配置httpd服务器,包括ssl访问,shibboleth模块

在配置ssl时需要向Windows ADCS申请证书,相关命令如下:  
openssl genrsa -des3 -out ssl.ds.cn.key    
openssl req -new -days 365 -key ssl.ds.cn.key -out ssl.ds.cn.req.pem

将此文件上传到服务器a上,此时可以通过ssl.ds.cn.req.pem文件向ADCS递交申请,方法是“certsrv”—>“证书颁发机构”-->在颁发机构名称上右键单击-->选择“所有任务”-->“提交一个新的申请”-->浏览文件“”--> 在“挂起的申请”中“颁发”证书-->“颁发的证书”中导出“二进制证书”,格式为cer。

注意,在Windows系统上导出cer证书时,务必选择“Base64 编码 X.509(.CER)”格式,可以通过文本编辑程序打开该文件,如果能阅读而不是二进制则可以在Linux系统上使用。例如,正确的格式为:

[[email protected] ~]# cat /usr/local/httpd/conf/ssl/ssl.ds.cn.cer  
-----BEGIN CERTIFICATE-----    
MIIEsDCCApigAwIBAgITNAAAAAXejq4F/FazEQAAAAAABTANBgkqhkiG9w0BAQUF    
……    
-----END CERTIFICATE-----

[[email protected] ~]# cat /usr/local/httpd/conf/ssl/ssl.ds.cn.key    
-----BEGIN RSA PRIVATE KEY-----    
Proc-Type: 4,ENCRYPTED    
DEK-Info: DES-EDE3-CBC,153EEBA6AC815504

3CkVVP3qa1a569awfJJJJcJGpSOMuO7txQNPAUUjN5Ph55EaqHAbBHpWQp9m8m6+  
……    
-----END RSA PRIVATE KEY-----    
[[email protected] ~]#

配置shibboleth模块

[[email protected] ~]# cat /usr/local/httpd/conf/extra/shibboleth.conf    
#https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPLinuxSourceBuild    
UseCanonicalName On

配置ssl虚拟主机  
[[email protected] ~]# delsc /usr/local/httpd/conf/extra/httpd-ssl.conf    
Listen 443    
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5    
SSLPassPhraseDialog  builtin    
SSLSessionCache        "shmcb:/usr/local/httpd/logs/ssl_scache(512000)"    
SSLSessionCacheTimeout  300    
<VirtualHost ssl.ds.cn:443>    
DocumentRoot "/usr/local/httpd/htdocs"    
ServerName ssl.ds.cn:443    
ServerAdmin [email protected]    
ErrorLog "/usr/local/httpd/logs/ssl.ds.cn_error_log"    
TransferLog "/usr/local/httpd/logs/ssl.ds.cn_access_log"    
SSLEngine on    
SSLCertificateFile "/usr/local/httpd/conf/ssl/ssl.ds.cn.cer"    
SSLCertificateKeyFile "/usr/local/httpd/conf/ssl/ssl.ds.cn.key"    
SSLCertificateChainFile "/usr/local/httpd/conf/ssl/ds-DS-CA.cer"    
Include /opt/shibboleth-sp/etc/shibboleth/apache24.config    
<Location /admin>    
    AuthType shibboleth    
    ShibRequestSetting requireSession 1    
    Require valid-user    
    ShibRequireSession on    
    ShibUseHeaders On    
</Location>    
<FilesMatch "\.(cgi|shtml|phtml|php)$">    
    SSLOptions +StdEnvVars    
</FilesMatch>    
<Directory "/usr/local/httpd/cgi-bin">    
    SSLOptions +StdEnvVars    
</Directory>    
BrowserMatch "MSIE [2-5]" \    
         nokeepalive ssl-unclean-shutdown \    
         downgrade-1.0 force-response-1.0    
CustomLog "/usr/local/httpd/logs/ssl_request_log" \    
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"    
</VirtualHost>                                 
[[email protected] ~]#

4.启动shibd,/opt/shibboleth-sp/sbin/shibd

配置服务器a,添加信任方信赖即可。

关键就是上图所示的“信赖方的联合元数据”这个url必须正确,而且测试能通过。

创建一个声明规则

其中上图的“传入声明类型”可以任意指定。

配置服务器b

1.启动shibd

2.启动httpd

3.测试验证

1)访问根(即https://ssl.ds.cn/),不需要验证,如下图所示

2)访问特定的目录(即https://ssl.ds.cn/admin/)则需要验证,输入域用户的用户名和密码即可通过验证,如下图所示

3)验证通过后出现正确的页面显示,如下图所示

至此已经配置完成,可以根据shibboleth手册开发相关应用了。

时间: 2024-08-24 04:00:09

Microsoft ADFS+Shibboleth配置联合身份认证+单点登录服务的相关文章

CAS 4.0.0RC 配置通过数据库认证用户登录

配置通过数据库认证用户登录 打开webapp\WEB-INF目录下的deployerConfigContext.xml,替换 <bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler"> <property name="users"> <map> <

Springboot集成Shiro和Cas实现单点登录(服务端篇CAS5)

什么是单点登录? 先说一个需求场景,比如:一个企业的内部有N多个子系统,每个子系统都有一套自己的用户名和密码,那么企业的员工要登录N个子系统,这样一个员工 就要记住N个用户名和密码,就算各个子系统的用户名和密码都是统一的,登录每个子系统都要输入用户名和密码进行登录也是一个繁琐的操作过程,那么单点登录功能由此便应运而生了.单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应

Dynamics CRM 2013 试用之 配置联合身份验证服务 Active Directory Federation Services

注:本文会适当把微软英文原话复制过来(英语来自微软MSDN官网),增加大家英文阅读能力. Configure AD FS for Windows Server 2012 R2 To configure AD FS as a stand-alone federation server for Microsoft Dynamics CRM Server claims authentication, do the following: 1.Open the Windows Server 2012 R2

转载 :配置ssh密钥认证自动登录

原文地址 :https://segmentfault.com/a/1190000000481249 在客户端来看,SSH提供两种级别的安全验证.[摘自wikipedia] 第一种级别(基于密码的安全验证),知道帐号和密码,就可以登录到远程主机,并且所有传输的数据都会被加密. 第二种级别(基于密钥的安全验证),需要依靠密钥,也就是你必须为自己创建一对密钥,并把公有密钥放在需要访问的服务器上. 这里要讨论的ssh密钥认证自动登录正是基于第二种级别的安全验证方式.步骤如下: 1. 在本地机器创建公钥

[精华][推荐]CAS SSO单点登录服务端客户端实例

1.因为是本地模拟sso环境,而sso的环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 127.0.0.1 jeesz.cn 127.0.0.1 sso1.jeesz.cn 127.0.0.1 sso2.jeesz.cn 4.生成认证证书 注意:我们可以根据sso单点登录的架构图可以看到,在客户端和服务端进行交互的时候,是需要认证的,在这里我们使用jdk中的keytool方案生成证书(一般

cas单点登录服务端、客户端搭建

jdk1.6 apache-tomcat-7 cas-server-webapp-4.0.0.war.cas-client-core-3.2.1.jar (1)cas服务端 一..修改hosts 文件,要使用CAS单点登录必须要配置域名, cas是不能通过ip访问的.,编辑文件 C:\Windows\System32\drivers\etc\hosts 为了简单,直接改成:127.0.0.1      localhost,这个用于cas服务端,cas客户端我直接在eclipse中启动. 二.[安

SSO-CAS实现单点登录服务端

目录 CAS-SSO 一.单点登录-CAS 二.下载搭建CAS 1. 下载 CAS 5.3 2. 导入IDEA 3. 打包war 3. war包部署到Tomcat 4. 启动Tomcat,访问 http://localhost:8080/cas 5. 为了方便先改成http协议,后面再说https把 6. 再次访问 http://localhost:8080/cas 7. 默认用户名 casuser, 密码 Mellon CAS-SSO 一.单点登录-CAS 单点登录:公司有很多个系统,我们去访

SQL2008 SQL Server身份认证方式登录失败(错误18456)笔记

1 安装小结 今天换了电脑,很多软件都得重装,期间报了很多问题,比如说先装vs2008再装sql server2008r2会报一个“存在2008早期版本”,通过查找,百度一系列的坑爹之路后,我还是把vs2008卸载后再安装了sql server 2008r2,而且因为最先装的是vs2012,在运行时会停止工作,所以一再尝试过后,推荐的顺序为sql server 2008r2,vs2008,vs2012. 2  sql server无法用sql server身份验证 一切准备就绪的时候,我点击了s

nginx配置反向代理CAS单点登录应用

新增如下配置即可: location /cas { proxy_pass http://172.16.20.155:8080/cas; proxy_redirect default; proxy_read_timeout 600s; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-For $proxy_add_x_forw