`
lhy5201314
  • 浏览: 120615 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类

基于SSO开源产品Shibboleth的安装

 
阅读更多

                          Shibboleth Installation(Shibboleth安装)

 

 

    Shibboleth包含几个单独的组件: the identity provider(IdP), service provider(SP), and discovery service(DS)。你可以根据自

己的需要选择部署一个或更多的组件。在开始之前需要理解以下几步:
1.在安装之前必须阅读并理解Shibboleth的文档以及工作流程的介绍。
2.如果在安装的过程中遇到了问题,请按照以下几点进行检查。
   1)  参阅安装和配置文件。
   2)  检查故障排除指南。
   3)  检查用户的邮件列表归档,看看其他人有没有遇到同样的问题,解决办法是什么。
   4)  从用户的邮件列表中寻求帮助。
3. 安装完毕后,你应该也可以订阅Shibboleth的公告,这是关于新版本的公告,更新旧版本至最新,与安全漏洞发布。
一、    准备安装环境
    准备安装环境所需要的域名:
     1.sp.machine为SP的域名,eg:  exm1.sea.sp.com
     2.idp.machine 为IDP的域名,eg: exm2.sea.idp.com
    我本地准备的SP和IDP的域名分别为exm1.sea.sp.com,exm2.sea.idp.com。在使用之前首先要在windows的C:\WINDOWS\system32\drivers\etc路径下的Hosts文件中配置以上域名的映射,配置如下:
    127.0.0.1       localhost
    127.0.0.1       exm1.sea.sp.com
    127.0.0.1       exm2.sea.idp.com
    准备安装所需的硬件设备(SP和IDP可以分别安装在不同的电脑或者安装在不同的虚拟机上,也可以安装在同一台计算机上!)。
     1)端口80和443需要被开放(保证没有其他程序在占用),注意防火墙对端口访问权限的问题。
     2)用RedHat环境是最简单的,这里我用的是windows,在安装的过程中基本是一样的。
     3)确保硬件环境的时钟设置是正确的。
二、    IDP的安装
      1.下载安装JDK1.5+,Tomcat6.0.17+,Apache2.2+,并确保JAVA_HOME环境变量的正确设置,这里我用的是JDK1.6,Tomcat6.0.29, Apache 2.2。
     注:必须从http://httpd.apache.org/网站上下载包含SSL支持的Apache安装程序并安装。
      2.下载IDP组件,下载之后解压并将解压之后的目录移动到你所要安装的目标目录。
(IDP下载地址为:http://shibboleth.internet2.edu/downloads/shibboleth/idp/latest/,我下载的是shibboleth-identityprovider-2.2.0-bin.zip)
      3.运行install.sh (linux环境) 或者 install.bat (Windows环境),进行安装。
注意:在安装过程中需要输入的idp.home为IDP的安装目录,eg: D:\opt\shibboleth-idp,需要输入的idp.hostname为IDP的域名(最好不要用IP地址,要不然后续过程会有错误出现),eg:exm2.sea.idp.com。
      4.所需的配置
    将IDP_HOME/lib/endorsed下的所有包复制到TOMCAT_HOME/endorsed下,IDP_HOME和TOMCAT_HOME分别指IDP和TOMCAT的安装目录(如果TOMCAT根目录下没有endorsed文件夹则新建一个即可)。
      5. 支持SOAP端点
         1)    下载tomcat6-dta-ssl-1.0.0.jar (asc)放到TOMCAT_HOME/lib/目录下。
         2)    在TOMCAT_HOME/conf/server.xml中增加如下的配置:
<Connector port="8443"
           protocol="org.apache.coyote.http11.Http11Protocol"
       SSLImplementation="edu.internet2.middleware.security.tomcat6.DelegateToApplicationJSSEImplementation"
           scheme="https"
           SSLEnabled="true"
           clientAuth="true"
           keystoreFile="IDP_HOME/credentials/idp.jks"
           keystorePass="PASSWORD" />
      6.    用IDP的安装路径取代IDP_HOME。
      7.    在安装IDP过程中用到的密码替换掉PASSWORD。
      8.    部署IDP:
           1)创建TOMCAT_HOME/conf/Catalina/localhost/idp.xml文件并用以下代码替换其内容。
<Context docBase="IDP_HOME/war/idp.war"
         privileged="true"
         antiResourceLocking="false"
         antiJARLocking="false"
         unpackWAR="false"
         swallowOutput="true" />
           2)用IDP的安装路径取代IDP_HOME。
      9. 加入以下行至Apache的配置文件httpd.conf中:
         ProxyPass /idp/ ajp://localhost:8009/idp/
     10. 更改Tomcat的TOMCAT_HOME/conf/server.xml中的端口8009 AJP13连接器,我们将要增加         request.tomcatAuthentication="false"和Address="127.0.0.1"让Apache允许发送用户名信息到IDP。
    <Connector port="8009"
    enableLookups="false" redirectPort="8443" protocol="AJP/1.3"
    request.tomcatAuthentication="false" address="127.0.0.1" />
     11. 在Apache的httpd.conf或ssl.conf配置文件中定义以下程序,强制身份验证的时候访问RemoteUser处理程序。
    <Location /idp/Authn/RemoteUser>
           AuthType Basic
            AuthName "My Identity Provider"
            AuthUserFile D:/opt/shibboleth-idp/credentials/user.db
            require valid-user
    </Location>
     12. 用htpasswd命令创建一个或两个测试用户
    htpasswd -c D:/opt/shibboleth-idp/credentials/user.db myself
    htpasswd命令为Apache工具命令必须在命令行下进入到Apache安装目录的bin目录下才可以执行,myself为用户名。
     13. 测试IDP是否安装成功:
     用https://localhost/idp/profile/Status访问,如果页面出现’ok’则说明安装正确。这并不意味着你将能够登录到任何东西,因为目前还尚未配置的IDP使用的组织的基础设施。
三、安装SP
Windows下安装
SP目前支持的windows操作系统有以下几个版本:
     1)Windows XP SP2 and Later
     2)Windows 2003 Server SP1 and Later
     3)Windows 2008 Server
1.安装Shibboleth
   1)下载后缀名为.msi的SP安装程序,下载网址为:
http://shibboleth.internet2.edu/downloads/shibboleth/cppsp/latest/
    2) 运行安装程序。安装程序将提示输入安装路径,更改默认的配置文件与Windows适当,并为您设置各种环境变量。默认的shibd服务也被安装。
2.基本配置
编辑Apache安装目录下的conf文件夹下的httpd.conf文件:
   1) 用Include指令将Shibboleth对应apache版本的配置文件包含至httpd.conf文件中(eg:在httpd.conf中添加
Include  D:/opt/shibboleth-sp/etc/shibboleth/apache22.config)。
   2) UseCanonicalName指令设置为on.(eg:UseCanonicalName On)。
   3) 确保ServerName指令设置正确(eg:ServerName exm1.sea.sp.com:80)。
配置Apache使其支持SSL协议,创建过程如下所示:
  创建SSL证书
   1) 打开cmd, cd到apache安装目录的bin目录
   2) 运行openssl
     openssl req -config ..\conf\openssl.cnf -new -out my-server.csr
(  注意, my-server是自己起的名字, 以下步骤中提到my-server的也是自己起的名字) 这一步需要设置一系列的问题, 包括密码(这个密码要记住, 以后要用) 和其他的问题. 全部完成之后会生成一个my-server.csr和 privkey.pem 文件在bin文件夹中.)
   3) 运行
openssl rsa -in privkey.pem -out my-server.key
(此时要输入密码, 就是步骤2中设定的密码)
   4) 运行
openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000
这将创建一个4000天后才过期的证书
   5)    运行
openssl x509 -in my-server.cert -out my-server.der.crt -outform DER
   6)    全部运行过后这些命令会在bin文件夹中生成6个文件:
        .cnt
        privkey.pem
        my-server.der.crt
        my-server.scr
        my-server.key
        my-server.cert
(将这些文件移到conf/ssl目录中(如果不存在这个目录就创建一个, 这个步骤中放到其他的目录也可以 关键是记住文件的位置, 在接下来的设置中会用到)
设置Apache支持SSL
   注意: 本设置步骤针对针对Apache 2.2.x版本, 如果正在使用的是Apache 2.0.x版本, 请摸索相似的设置.
在Apache的conf目录中用文本编辑器打开httpd.conf
   1)    去掉下面设置行前面的#
          LoadModule ssl_module modules/mod_ssl.so
   2)    去掉下面设置行前面的# (在2.0.x版本中没有这一项)
          Include conf/extra/httpd-ssl.conf
   3)    在Apache的conf/extra目录中打开httpd-ssl.conf, 更改如下设置.
   [apache安装目录]是指Apache的安装目录, 比如c:/Apache; my-server的两个文件就是前一个步骤制作的文件, 文件的位置就是这些文件在磁盘中的位置 (在2.0.x版本中这些设置仍然在 httpd.conf文件中进行)
    SSLMutex  default
    SSLCertificateFile "[Apache安装目录]/conf/ssl/my-server.der.crt"
    SSLCertificateKeyFile "[Apache安装目录]/conf/ssl/my-server.key"
    测试
            1) 保存设置文件。
            2) 在开始菜单中运行Apache的Test Configuration工具, 检查设置文件是否正确。
            3) 重新启动Apache 2.2.x。
            4) 顺利启动之后, 在浏览器中输入 https://localhost  看看是否可以访问, 如果可以访问, 则设置成功。
       
     3. SP安装测试
       用https://localhost/Shibboleth.sso/Status访问测试,如果测试成功,那么该软件为进一步的配置做好了基本的准备。
四、    IDP and SP本地测试的基本配置
    我们需要配置IDP和SP相互间的交互,注意配置:
    SP的配置文件在 /etc/shibboleth/ 目录下:
    SP:shibboleth2.xml:
    1)  改变<ApplicationDefaults>节点元素的entityID为
https://sp.machine/shibboleth,sp.machine为SP的域名。(Eg:https://exm1.sea.sp.com/shibboleth)
    2)  改变<SessionInitiator Location="Login">节点元素的entityID为
https://idp.machine/idp/shibboleth,idp.machine为IDP的域名。(eg: https://exm2.sea.idp.com/idp/shibboleth)
    3)   取消对远程元数据例子<MetadataProvider>节点的注释,这里将要描述你的IDP到SP,改变这个uri指向http://idp.machine/idp/profile/Metadata/SAML,idp.machine为IDP的域名。
Eg: http://exm2.sea.idp.com/idp/profile/Metadata/SAML
    4)  注解或删除掉类型为Signature的<MetadataFilter>节点,因为这个元数据没有被签名。
Eg:
     <MetadataProvider type="XML" uri="http://exm2.sea.idp.com/idp/profile/Metadata/SAML"
                 backingFilePath="federation-metadata.xml" reloadInterval="7200">
     <MetadataFilter     type="RequireValidUntil" maxValidityInterval="2419200"/>(这个没有注解或删除的情况下会报:Unable to locate metadata for identity provider,不知道为什么,有待解决!)
</MetadataProvider>

    IDP的配置文件在 IDP_HOME/conf 目录下:
    IdP: relying-party.xml:
      1) 取消掉从一个URL读取元数据MetadataProvider节点元素的注释,将该节点元素的metadataURL属性改为
http://sp.machine/Shibboleth.sso/Metadata。更高级的部署,你需要手工编辑元数据进行匹配。
      2) 注释掉包含在MetadataProvider元素中的MetadataFilter节点元素,这个元数据是未签名的,所以这个过滤器可能会引起元数据加载失败!
Eg:改变之后的为:
        <metadata:MetadataProvider  id="URLMD" xsi:type="metadata:FileBackedHTTPMetadataProvider"
                          metadataURL="http://exm1.sea.sp.com/Shibboleth.sso/Metadata"
                          backingFile="D:/opt/shibboleth-idp/metadata/some-metadata.xml">
        </metadata:MetadataProvider>

    登陆测试:
用浏览器访问https://sp-machine/secure进行测试. 注意:别忘了https

分享到:
评论
2 楼 sygjzmh 2017-05-06  
The <SSO> element is used to enable and configure support for Single Sign-On/Authentication protocols within the SP. This is of course the primary function of the software, so it is generally present within the <Sessions> element to enable and control SSO settings. It replaces the functions of the <SessionInitiator> and <md:AssertionConsumerService> handler elements from the older (pre-2.4) configuration.

也就是说sp 2.4版本后就用sso代替了
1 楼 liujunhao225 2013-09-29  
关于【四 2】的配置<SessionInitiator >在配置文件中已经不存在了,个人觉得应该是<sso>标签。

相关推荐

Global site tag (gtag.js) - Google Analytics