2 * The Shibboleth License, Version 1.
4 * University Corporation for Advanced Internet Development, Inc.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
11 * Redistributions of source code must retain the above copyright notice, this
12 * list of conditions and the following disclaimer.
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution, if any, must include
17 * the following acknowledgment: "This product includes software developed by
18 * the University Corporation for Advanced Internet Development
19 * <http://www.ucaid.edu>Internet2 Project. Alternately, this acknowledegement
20 * may appear in the software itself, if and wherever such third-party
21 * acknowledgments normally appear.
23 * Neither the name of Shibboleth nor the names of its contributors, nor
24 * Internet2, nor the University Corporation for Advanced Internet Development,
25 * Inc., nor UCAID may be used to endorse or promote products derived from this
26 * software without specific prior written permission. For written permission,
27 * please contact shibboleth@shibboleth.org
29 * Products derived from this software may not be called Shibboleth, Internet2,
30 * UCAID, or the University Corporation for Advanced Internet Development, nor
31 * may Shibboleth appear in their name, without prior written permission of the
32 * University Corporation for Advanced Internet Development.
35 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
36 * AND WITH ALL FAULTS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
38 * PARTICULAR PURPOSE, AND NON-INFRINGEMENT ARE DISCLAIMED AND THE ENTIRE RISK
39 * OF SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, AND EFFORT IS WITH LICENSEE.
40 * IN NO EVENT SHALL THE COPYRIGHT OWNER, CONTRIBUTORS OR THE UNIVERSITY
41 * CORPORATION FOR ADVANCED INTERNET DEVELOPMENT, INC. BE LIABLE FOR ANY DIRECT,
42 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
43 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
44 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
47 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50 package edu.internet2.middleware.shibboleth.common;
52 import java.security.Key;
53 import java.security.KeyStore;
54 import java.security.interfaces.RSAPrivateKey;
55 import java.util.Collection;
56 import java.util.Date;
58 import org.apache.xml.security.signature.XMLSignature;
59 import org.opensaml.*;
62 * ClubShib-specific POST browser profile implementation
64 * @author Scott Cantor
65 * @created April 11, 2002
67 public class ClubShibPOSTProfile extends ShibPOSTProfile
70 * SHIRE-side constructor for a ClubShibPOSTProfile object
72 * @param policies Set of policy URIs that the implementation
74 * @param receiver URL of SHIRE
75 * @param ttlSeconds Length of time in seconds allowed to elapse
76 * from issuance of SAML response
77 * @exception SAMLException Raised if a profile implementation cannot be
78 * constructed from the supplied information
80 public ClubShibPOSTProfile(Collection policies, String receiver, int ttlSeconds)
83 super(policies, receiver, ttlSeconds);
84 if (!policies.contains(Constants.POLICY_INCOMMON))
85 throw new SAMLException(SAMLException.REQUESTER, "ClubShibPOSTProfile() policy array must include Club Shib");
89 * HS-side constructor for a ClubShibPOSTProfile object
91 * @param policies Set of policy URIs that the implementation
93 * @param issuer "Official" name of issuing origin site
94 * @exception SAMLException Raised if a profile implementation cannot be
95 * constructed from the supplied information
97 public ClubShibPOSTProfile(Collection policies, String issuer)
100 super(policies, issuer);
101 if (!policies.contains(Constants.POLICY_INCOMMON))
102 throw new SAMLException(SAMLException.RESPONDER, "ClubShibPOSTProfile() policy array must include Club Shib");
106 * Used by HS to generate a signed SAML response conforming to the POST
109 * Club Shib specifies use of the RSA algorithm with RSA public keys and
110 * X.509 certificates.
112 * @param recipient URL of intended consumer
113 * @param name Name of subject
114 * @param nameQualifier Federates or qualifies subject name (optional)
115 * @param subjectIP Client address of subject (optional)
116 * @param authMethod URI of authentication method being asserted
117 * @param authInstant Date and time of authentication being asserted
118 * @param bindings Set of SAML authorities the relying party
119 * may contact (optional)
120 * @param responseKey A secret or private key to use in response
122 * @param responseCert One or more X.509 certificates to enclose with the
123 * response (optional)
124 * @param assertionKey A secret or private key to use in assertion
125 * signature or MAC (optional)
126 * @param assertionCert One or more X.509 certificates to enclose with the
127 * assertion (optional)
128 * @return SAML response to send to accepting site
129 * @exception SAMLException Base class of exceptions that may be thrown
132 public SAMLResponse prepare(String recipient,
134 String nameQualifier,
139 Key responseKey, Collection responseCerts,
140 Key assertionKey, Collection assertionCerts
144 if (responseKey == null || !(responseKey instanceof RSAPrivateKey))
145 throw new InvalidCryptoException(SAMLException.RESPONDER, "ClubShibPOSTProfile.prepare() requires the response key be an RSA private key");
146 if (assertionKey != null && !(assertionKey instanceof RSAPrivateKey))
147 throw new InvalidCryptoException(SAMLException.RESPONDER, "ClubShibPOSTProfile.prepare() requires the assertion key be an RSA private key");
149 return super.prepare(
164 * Club Shib signature verification implements additional checks for the
165 * RSA and SHA-1 algorithms.
167 * @param obj The object containing the signature
168 * @param signerName The name of the signer
169 * @param ks A keystore containing trusted root certificates
170 * @param knownKey An explicit key to use if a certificate cannot be
172 * @param simple Verify according to simple SAML signature profile?
174 * @throws SAMLException Thrown if the signature cannot be verified
176 protected void verifySignature(SAMLSignedObject obj, String signerName, KeyStore ks, Key knownKey, boolean simple)
179 super.verifySignature(obj, signerName, ks, knownKey, simple);
180 if (!obj.getSignatureAlgorithm().equals(XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1))
181 throw new TrustException(SAMLException.RESPONDER, "ClubShibPOSTProfile.verifySignature() requires the RSA-SHA1 signature algorithm");