<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">One of our clients has upgraded their Shib IDP to v3 and if we switch to using that IPD it somehow causes an issue with our SP stack so that it is no longer possible for users to log in.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Our SP setup (that works with IDP v2) is:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Windows Server 2012 R2 Standard<o:p></o:p></p>
<p class="MsoNormal">Shib SP <span lang="EN-CA">2.6.1.4<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-CA">Apache 2.4.33<o:p></o:p></span></p>
<p class="MsoNormal">JDK 1.8.0_162x64<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In Apache httpd.conf:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><Location /secure><o:p></o:p></p>
<p class="MsoNormal">    AuthType shibboleth<o:p></o:p></p>
<p class="MsoNormal">    ShibUseHeaders On<o:p></o:p></p>
<p class="MsoNormal">    ShibRequestSetting requireSession 1<o:p></o:p></p>
<p class="MsoNormal">    require valid-user<o:p></o:p></p>
<p class="MsoNormal"></Location><o:p></o:p></p>
<p class="MsoNormal"><Location /Shibboleth.sso><o:p></o:p></p>
<p class="MsoNormal">    AuthType shibboleth<o:p></o:p></p>
<p class="MsoNormal">    require shibboleth<o:p></o:p></p>
<p class="MsoNormal"></Location><o:p></o:p></p>
<p class="MsoNormal"><Location /Shibboleth.sso/Metadata><o:p></o:p></p>
<p class="MsoNormal">    AuthType shibboleth<o:p></o:p></p>
<p class="MsoNormal">    require shibboleth<o:p></o:p></p>
<p class="MsoNormal"></Location><o:p></o:p></p>
<p class="MsoNormal"><Location /shibboleth><o:p></o:p></p>
<p class="MsoNormal">    AuthType shibboleth<o:p></o:p></p>
<p class="MsoNormal">    require shibboleth<o:p></o:p></p>
<p class="MsoNormal"></Location><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In Apache httpd-ssl.conf<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><VirtualHost 192.168.42.56:443><o:p></o:p></p>
<p class="MsoNormal">  ServerName <redacted><o:p></o:p></p>
<p class="MsoNormal">  DocumentRoot "${SRVROOT}/htdocs"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  ProxyPass /Shibboleth.sso !<o:p></o:p></p>
<p class="MsoNormal">  ProxyPass /shibboleth !<o:p></o:p></p>
<p class="MsoNormal">  ProxyPass /shibboleth-sp !<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  ProxyIOBufferSize 65536<o:p></o:p></p>
<p class="MsoNormal">  ProxyPass / ajp://192.168.42.56:8443/ retry=0<o:p></o:p></p>
<p class="MsoNormal">  ProxyPassReverse / ajp://192.168.42.56:8443/ retry=0<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  SSLEngine on<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  SSLCertificateFile "${SRVROOT}/conf/ssl/<redacted>.crt"<o:p></o:p></p>
<p class="MsoNormal">  SSLCertificateKeyFile "${SRVROOT}/conf/ssl/<redacted>.key"<o:p></o:p></p>
<p class="MsoNormal">  SSLCertificateChainFile "${SRVROOT}/conf/ssl/<redacted>-chain.crt"<o:p></o:p></p>
<p class="MsoNormal"></VirtualHost><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In Tomcat server.xml<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><Connector address="192.168.42.56" port="8443" proxyName="<redacted>" proxyPort="443" protocol="AJP/1.3" maxThreads="2000" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="1000" debug="0"
 connectionTimeout="20000" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" packetSize="65536" /><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Shibboleth2.xml relevant part:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><ApplicationOverride id="<redacted>" entityID="<redacted>" attributePrefix="AJP_" REMOTE_USER="somerandomstring" signing="false" encryption="false"><o:p></o:p></p>
<p class="MsoNormal">            <Sessions lifetime="28800" timeout="3600" checkAddress="false" handlerURL="<a href="https://%3credacted%3e/Shibboleth.sso">https://<redacted>/Shibboleth.sso</a>" handlerSSL="true" ><o:p></o:p></p>
<p class="MsoNormal">                <SSO entityID="<a href="https://%3credacted%3e/idp/shibboleth">https://<redacted>/idp/shibboleth</a>">SAML2</SSO><o:p></o:p></p>
<p class="MsoNormal">              <!--<SSO entityID="<a href="https://%3credacted%3e">https://<redacted></a>">SAML2</SSO>--><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                <Logout>SAML2 Local</Logout><o:p></o:p></p>
<p class="MsoNormal">                <LogoutInitiator type="Chaining" Location="/Logout" relayState="cookie"><o:p></o:p></p>
<p class="MsoNormal">                    <LogoutInitiator type="Local"/><o:p></o:p></p>
<p class="MsoNormal">                </LogoutInitiator><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">                <Handler type="MetadataGenerator" Location="/Metadata" signing="false"/><o:p></o:p></p>
<p class="MsoNormal">                <Handler type="Status" Location="/Status" acl="127.0.0.1"/><o:p></o:p></p>
<p class="MsoNormal">                <Handler type="Session" Location="/Session" showAttributeValues="false"/><o:p></o:p></p>
<p class="MsoNormal">                <Handler type="DiscoveryFeed" Location="/DiscoFeed"/><o:p></o:p></p>
<p class="MsoNormal">            </Sessions><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">            <Errors supportContact="<a href="mailto:noreply@email.com">noreply@email.com</a>"/><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">            <MetadataProvider type="XML" path="idp-metadata-<redacted>.xml" reloadInterval="7200"/><o:p></o:p></p>
<p class="MsoNormal">              <!--<MetadataProvider type="XML" path="idp-metadata-<redacted>new.xml" reloadInterval="7200"/>--><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">            <AttributeResolver type="Query" subjectMatch="true"/><o:p></o:p></p>
<p class="MsoNormal">            <AttributeFilter type="XML" validate="true" path="attribute-policy.xml"/><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">            <CredentialResolver type="File" key="sp-key.pem" certificate="sp-cert.pem"/><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">            <AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map-<redacted>.xml"/><o:p></o:p></p>
<p class="MsoNormal">            <!--<AttributeExtractor type="XML" validate="true" reloadChanges="false" path="attribute-map-<redacted>new.xml"/>--><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        </ApplicationOverride><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Login process (that works):<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">User clicks <a href="https://%3credacted%3e/secure">https://<redacted>/secure</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Apache redirects to<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://%3credacted%3e/idp/Authn/UserPassword">https://<redacted>/idp/Authn/UserPassword</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">User fills out username, password<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">IDP redirects to Apache, Apache to Tomcat, user is logged in<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The problem with IDPv3:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In shibboleth2.xml we have to change 3 things (use the commented out parts instead of the live ones for SSO, MetadataProvider and AttributeExtractor) as specified by the IDPv3 provider<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Login process (that fails):<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">User clicks <a href="https://%3credacted%3e/secure">https://<redacted>/secure</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Apache redirects to<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://%3credacted%3e/idp/profile/SAML2/Redirect/SSO;jsessionid=2F72AD4D751673B7ACC6045DE9FEC59E?execution=e1s1">https://<redacted>/idp/profile/SAML2/Redirect/SSO;jsessionid=2F72AD4D751673B7ACC6045DE9FEC59E?execution=e1s1</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Notice the ;jsessionid part here… This is suspect to be the cause or a symptom as it is not how it was with IDPv2<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">User fills out username, password<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">IDP redirects to Apache, Apache returns a 500 error to the browser<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Invalid HTTP method (GET)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The only way we could come up with to not to have the 500 error (and also not see the jsessionid part in the URL that is suspect) is to take out the “ShibUseHeaders On” from httpd.conf, and what is expected at that point is to receive the
 Shib attributes as environment variables vs. HTTP headers. That doesn’t happen unfortunately.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">We tried every config change/setting that we can think of on our end but still haven’t been able to crack this nut.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Any help/insights are greatly appreciated.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thank you,<o:p></o:p></p>
<p class="MsoNormal">SM<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>