Shibbolethの構築¶
CentOS7にShibbolethを構築し、SSOを実施する。
Shibbolethは認証を行うIdPと、認証を要求するSPに分かれています。
ここではIdPとSPを異なるサーバに、それぞれ構築を行います。
Shibboleth-IdPの構築¶
準備¶
- 必要なパッケージをインストールする
# yum install wget httpd mod_ssl java tomcat
- tomcatを有効にする
# systemctl enable tomcat
- Tomcatの環境変数設定シェルを作成する
# vi /etc/profile.d/java-tomcat.sh ----------------------------- JAVA_HOME=/usr/lib/jvm/jre #export MANPATH=$MANPATH:/usr/java/default/man CATALINA_HOME=/usr/share/tomcat CATALINA_BASE=$CATALINA_HOME PATH=$JAVA_HOME/bin:$CATALINA_BASE/bin:$CATALINA_HOME/bin:$PATH export PATH JAVA_HOME CATALINA_HOME CATALINA_BASE
- 環境変数を再読み込みします
# source /etc/profile
- Tomcatの起動オプションを変更する
# vi /etc/sysconfig/tomcat ----------------------------- # You can pass some parameters to java here if you wish to #JAVA_OPTS="-Xminf0.1 -Xmaxf0.3" JAVA_OPTS="-server -Xmx1500m -XX:MaxPermSize=256m -XX:+UseG1GC "
- ApacheのServerNameにServerNameにFQDNとtomcatへのプロキシパスを設定する
# vi /etc/httpd/conf/httpd.conf ----------------------------- #ServerName www.example.com:80 ServerName shibboleth.example.com:80 ProxyPass /idp/ ajp://localhost:8009/idp/
- ApacheのSSLバーチャルホストのServerNameにFQDNとtomcatへのプロキシパスを設定する
# vi /etc/httpd/conf.d/ssl.conf ----------------------------- #ServerName www.example.com:443 ServerName shibboleth.example.com:443 ProxyPass /idp/ ajp://localhost:8009/idp/
- Apacheを起動・サービス登録する
# systemctl enable httpd # systemctl start httpd
- Tomcatの設定をコメントアウトおよび追加する
# vi /usr/share/tomcat/conf/server.xml ----------------------------- <!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" enableLookups="false" tomcatAuthentication="false" address="127.0.0.1" maxPostSize="100000" />
インストール¶
- 下記コマンドでShibboleth最新版をダウンロードします
# wget http://shibboleth.net/downloads/identity-provider/latest/shibboleth-identity-provider-3.3.3.tar.gz
- 取得したShibbolethを展開し、ディレクトリ内に移動します
# tar xzf shibboleth-identity-provider-3.3.3.tar.gz # cd shibboleth-identity-provider-3.3.3
- インストールスクリプトを実行します
# ./bin/install.sh -Didp.conf.filemode=640 ----------------------------- Source (Distribution) Directory (press <enter> to accept default): [/root/shibboleth-identity-provider-3.3.3] Installation Directory: [/opt/shibboleth-idp] Hostname: [shibboleth.example.com] SAML EntityID: [https://shibboleth.example.com/idp/shibboleth] Attribute Scope: [example.com] Backchannel PKCS12 Password: Re-enter password: Cookie Encryption Key Password: Re-enter password: Warning: /opt/shibboleth-idp/bin does not exist. Warning: /opt/shibboleth-idp/dist does not exist. Warning: /opt/shibboleth-idp/doc does not exist. Warning: /opt/shibboleth-idp/system does not exist. Warning: /opt/shibboleth-idp/webapp does not exist. Generating Signing Key, CN = shibboleth.example.com URI = https://shibboleth.example.com/idp/shibboleth ... ...done Creating Encryption Key, CN = shibboleth.example.com URI = https://shibboleth.example.com/idp/shibboleth ... ...done Creating Backchannel keystore, CN = shibboleth.example.com URI = https://shibboleth.example.com/idp/shibboleth ... ...done Creating cookie encryption key files... ...done Rebuilding /opt/shibboleth-idp/war/idp.war ... ...done BUILD SUCCESSFUL Total time: 56 seconds
- パーミッションやオーナー権限の変更を行う
# chown -R tomcat:tomcat /opt/shibboleth-idp/logs # chgrp -R tomcat /opt/shibboleth-idp/conf # chmod -R g+r /opt/shibboleth-idp/conf # find /opt/shibboleth-idp/conf -type d -exec chmod -R g+s {} \; # chgrp tomcat /opt/shibboleth-idp/metadata # chmod g+w /opt/shibboleth-idp/metadata # chmod +t /opt/shibboleth-idp/metadata
- idp.warファイルのビルドに必要なパッケージをインストールします
# yum install jakarta-taglibs-standard
- パッケージに含まれる必要なjarファイルのシンボリックリンクを作成します
# ln -s /usr/share/java/jakarta-taglibs-core.jar /opt/shibboleth-idp/edit-webapp/WEB-INF/lib/jakarta-taglibs-core.jar # ln -s /usr/share/java/jakarta-taglibs-standard.jar /opt/shibboleth-idp/edit-webapp/WEB-INF/lib/jakarta-taglibs-standard.jar
- idp.warのビルドを行います
# /opt/shibboleth-idp/bin/build.sh ----------------------------- Rebuilding /opt/shibboleth-idp/war/idp.war ... ...done BUILD SUCCESSFUL Total time: 14 seconds
- tomcatにidp.warの定義を追加します
# vi /usr/share/tomcat/conf/Catalina/localhost/idp.xml ----------------------------- <Context docBase="/opt/shibboleth-idp/war/idp.war" privileged="true" antiResourceLocking="false" swallowOutput="true"> <Manager pathname="" /> <!-- Work around lack of Max-Age support in IE/Edge --> <CookieProcessor alwaysAddExpires="true" /> </Context>
- アクセス許可設定ファイルを編集します。アクセス元ネットワークを追加します。
# vi /opt/shibboleth-idp/conf/access-control.xml ----------------------------- <entry key="AccessByIPAddress"> <bean id="AccessByIPAddress" parent="shibboleth.IPRangeAccessControl" p:allowedRanges="#{ {'127.0.0.1/32', '::1/128', '192.168.0.0/24'} }" /> </entry>
- Tomcatのサービスを開始する
# systemctl start tomcat
- tomcatのログにエラーが出ていないことを確認する
# tail /usr/share/tomcat/logs/catalina.YYYY-MM-DD.log
- 該当ネットワークからブラウザで下記にアクセスする
https://IdPサーバのIPアドレス/idp/status ----------------------------- ### Operating Environment Information operating_system: Linux operating_system_version: 3.10.0-862.9.1.el7.x86_64 operating_system_architecture: amd64 jdk_version: 1.8.0_181 available_cores: 1 used_memory: 143 MB maximum_memory: 1500 MB ### Identity Provider Information idp_version: 3.3.3 start_time: 2018-08-16T12:26:49+09:00 current_time: 2018-08-16T12:26:51+09:00 uptime: 2712 ms … (後略) …
設定¶
SSL証明書の設定(自己証明書ではない場合)¶
- 証明書・秘密鍵ファイルをコピーする
# cp -p server.crt /opt/shibboleth-idp/credentials/ # cp -p server.key /opt/shibboleth-idp/credentials/
- 秘密鍵ファイルのオーナーとパーミッションを変更する
# chown tomcat:root /opt/shibboleth-idp/credentials/server.key # chmod 400 /opt/shibboleth-idp/credentials/server.key
- 設定ファイルを編集する
# vi /opt/shibboleth-idp/conf/idp.properties ----------------------------- idp.signing.key= %{idp.home}/credentials/server.key idp.signing.cert= %{idp.home}/credentials/server.crt idp.encryption.key= %{idp.home}/credentials/server.key idp.encryption.cert= %{idp.home}/credentials/server.crt
- Tomcatのサービスを再起動する
# systemctl restart tomcat
- tomcatのログにエラーが出ていないことを確認する
# tail /usr/share/tomcat/logs/catalina.YYYY-MM-DD.log
LDAPサーバとの連携¶
- openldapクライアントをインストールする
# yum install openldap-clients
- 別途存在するldapサーバから情報を取得できるか確認する
# ldapsearch -h 10.3.0.70 -x -b 'dc=example,dc=com' '(objectclass=*)' ----------------------------- … (前略) … # search result search: 2 result: 0 Success # numResponses: 7 # numEntries: 6
- 設定ファイルを編集する
# vi /opt/shibboleth-idp/conf/ldap.properties ----------------------------- ## Connection properties ## #idp.authn.LDAP.ldapURL = ldap://localhost:10389 idp.authn.LDAP.ldapURL = ldap://LDAPサーバのアドレス #idp.authn.LDAP.useStartTLS = true idp.authn.LDAP.useStartTLS = false #idp.authn.LDAP.useSSL = false # Time in milliseconds that connects will block #idp.authn.LDAP.connectTimeout = PT3S # Time in milliseconds to wait for responses #idp.authn.LDAP.responseTimeout = PT3S #idp.authn.LDAP.baseDN = ou=people,dc=example,dc=org idp.authn.LDAP.baseDN = ou=Members,dc=example,dc=com #idp.authn.LDAP.subtreeSearch = false idp.authn.LDAP.subtreeSearch = true idp.authn.LDAP.userFilter = (uid={user}) #idp.authn.LDAP.bindDN = uid=myservice,ou=system idp.authn.LDAP.bindDN = cn=Manager,dc=example,dc=com #idp.authn.LDAP.bindDNCredential = myServicePassword idp.authn.LDAP.bindDNCredential = Managerのパスワード
- Tomcatのサービスを再起動する
# systemctl restart tomcat
- tomcatのログにエラーが出ていないことを確認する
# tail /usr/share/tomcat/logs/catalina.YYYY-MM-DD.log
SAMLの設定¶
- SAMLの設定を変更します
# vi /opt/shibboleth-idp/conf/saml-nameid.properties ----------------------------- # For computed IDs, set a source attribute and a secret salt: #idp.persistentId.sourceAttribute = changethistosomethingreal idp.persistentId.sourceAttribute = uid #idp.persistentId.salt = changethistosomethingrandom idp.persistentId.salt = ランダムな文字列を設定
動作確認¶
- 次のコマンドで動作確認を行う
# wget -O - https://localhost/idp/status --no-check-certificate ----------------------------- ## Operating Environment Information operating_system: Linux operating_system_version: 3.10.0-862.9.1.el7.x86_64 operating_system_architecture: amd64 jdk_version: 1.8.0_181 available_cores: 1 used_memory: 78 MB maximum_memory: 1500 MB ### Identity Provider Information idp_version: 3.3.3 start_time: 2018-08-01T16:39:59+09:00 current_time: 2018-08-01T16:40:02+09:00 uptime: 2956 ms service: shibboleth.LoggingService last successful reload attempt: 2018-08-01T07:38:43Z last reload attempt: 2018-08-01T07:38:43Z service: shibboleth.ReloadableAccessControlService last successful reload attempt: 2018-08-01T07:38:48Z last reload attempt: 2018-08-01T07:38:48Z service: shibboleth.MetadataResolverService last successful reload attempt: 2018-08-01T07:38:48Z last reload attempt: 2018-08-01T07:38:48Z service: shibboleth.RelyingPartyResolverService last reload attempt: 2018-08-01T07:38:48Z service: shibboleth.NameIdentifierGenerationService last successful reload attempt: 2018-08-01T07:38:47Z last reload attempt: 2018-08-01T07:38:47Z service: shibboleth.AttributeResolverService last successful reload attempt: 2018-08-01T07:38:47Z last reload attempt: 2018-08-01T07:38:47Z DataConnector staticAttributes: has never failed service: shibboleth.AttributeFilterService last successful reload attempt: 2018-08-01T07:38:46Z last reload attempt: 2018-08-01T07:38:46Z 100%[======================================>] 1,373 --.-K/s 時間 0s 2018-08-01 16:40:02 (82.9 MB/s) - stdout へ出力完了 [1373/1373]