WebmailShibboleth
Tartalomjegyzék
Webmail szoftverek illesztése Shibboleth-hez
Koncepció
A webmail és a levelezőszerver (IMAP/POP3) együttes működését szeretnénk Shibbolizálni. A fő probléma abból áll, hogy a webmail az IMAP szerver felé felhasználónévvel és jelszóval autentikál. Az címtárban tárolt jelszót azonban nem adhatjuk ki az alkalmazásoknak, ráadásul legtöbb esetben ez egy hashelt jelszó.
A következő kritériumoknak kell teljesülniük:
- a webmail nem fér hozzá a felhasználó SSO jelszavához (még hashelt formátumban sem)
- az IMAP szerver jelszavas autentikációt használ, minden felhasználónak egyedi jelszava van
- a webmail feltörése esetén nem férhetnek hozzá az összes felhasználó levelezéséhez
A fenti kritériumokat az 'egyszer használatos', rövid lejárató jelszó használata kielégíti. Ebben az esetben az IdP minden egyes webmail bejelentkezéshez generál egy véletlen jelszót, és ezt elmenti egy adatbázisban, (beállítva a jelszóhoz egy rövid lejárati időt) valamint elküldi a webmail SP-nek. A webmail ezen rövid lejáratú jelszó használatával autentikál az IMAP szerver felé.
A leírt gondolatmenet megvalósításához három komponens együttműködése szükséges:
- az IdP jelszót kell generáljon egy adatbázisba
- a webmailnek el kell érnie ezt a jelszót
- az IMAP szervernek a jelszóadatbázist kell használnia az autentikációra
Adatbázis struktúra
MySQL használata esetén a következő adatbázisstruktúra használható:
CREATE TABLE `otp` (
`uid` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`expiration` datetime NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
IdP plugin
A shibboleth-otpdataconnector.jar -t és a mysql-connector.jar -t be kell másolni az idp.war WEB-INF/lib könyvtárába.
Az attribute-resolver.xml -ben a következő változtatásokat kell megtenni:
<!--xml semak megfelelo beallitasa -->
<AttributeResolver
....
xmlns:otp="urn:geant:niif.hu:dataconnector"
xsi:schemaLocation="
....
urn:geant:niif.hu:dataconnector classpath:/schema/otpdataconnector.xsd">
<!-- onetimepassword definicio -->
<resolver:AttributeDefinition id="otp" xsi:type="Simple"
xmlns="urn:mace:shibboleth:2.0:resolver:ad"
sourceAttributeID="otp">
<resolver:Dependency ref="otpConnector" />
<resolver:AttributeEncoder xsi:type="SAML2String"
xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
name="urn:geant:niif.hu:otp" friendlyName="otp" />
</resolver:AttributeDefinition>
<!-- uid definicio -->
<resolver:AttributeDefinition id="uid" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
sourceAttributeID="uid">
<resolver:Dependency ref="myLDAP" />
<resolver:AttributeEncoder xsi:type="SAML1String" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
name="urn:mace:dir:attribute-def:uid" />
<resolver:AttributeEncoder xsi:type="SAML2String" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
name="urn:oid:0.9.2342.19200300.100.1.1" friendlyName="uid" />
</resolver:AttributeDefinition>
<!-- one time password generalasa -->
<resolver:DataConnector xsi:type="otp:OTP"
id="otpConnector"
sourceAttributeID="uid"
generatedAttributeID="otp"
tableName="otp"
principalColumn="uid"
passwordColumn="password"
expirationColumn="expiration"
passwordLifetime="400"
spEntityID="https://webmail.example.org/shibboleth" >
<resolver:Dependency ref="myLDAP" />
<dc:ApplicationManagedConnection
jdbcDriver="com.mysql.jdbc.Driver"
jdbcURL="jdbc:mysql://localhost:3306/shib_idp"
jdbcUserName="*****"
jdbcPassword="*****" />
</resolver:DataConnector>
Az attribute-filter.xml -ben pedig ki kell engedni az uid és otp attribútumokat a webmail sp-nek:
<AttributeRule attributeID="otp">
<PermitValueRule xsi:type="basic:AttributeRequesterString"
value="https://webmail.example.org/shibboleth" />
</AttributeRule>
<AttributeRule attributeID="uid">
<PermitValueRule xsi:type="basic:AttributeRequesterString"
value="https://webmail.example.org/shibboleth" />
</AttributeRule>
IMAP konfiguráció (Cyrus imapd)
A Cyrus imapd-ben be kell állítani az SQL autentikációt. Ezt az imapd.conf-ban tehetjük meg:
sasl_mech_list: PLAIN sasl_pwcheck_method: auxprop sasl_auxprop_plugin: sql sasl_sql_engine: mysql sasl_sql_hostnames: localhost sasl_sql_user: ***** sasl_sql_passwd: ***** sasl_sql_database: shib_idp sasl_sql_select: SELECT password AS userPassword FROM otp WHERE uid = '%u' AND expiration > now()
Amennyiben az IMAP szervert nem TLS/SSL felett használjuk, ezek a beállítások nem biztonságosak!