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