README.zxid ########### <> <> <> See INSTALL.zxid for installation and quick tutorial. <> <> 1 Other Documentation ===================== This README.zxid is in process of being rewritten and restructured. A lot of the material has moved to specific files, which you should read. * <> Apache module documentation: SSO without programming. * <> Easy API for SAML * <>: Program like the pros (and fix your own problems). See also <> * <>: Make Identity Web Services Calls using ID-WSF * <>: Compile and install from source or package. See also <> for quick overview. * <>: Nitty gritty on all options. * <>: How to set up the Circle of Trust, i.e. the partners your web site works with. * <>: ZXID digitally signed logging facility * <>: Using ZXID from Java * <>: Using ZXID from Perl * <>: Using ZXID from PHP * <>: Configuring zxididp * <>: Frequently Asked Questions * <>: Crypto and Cert Tutorial * zxid.user@lists.unh.edu mailing list 2 ZXID Project ============== Web site:: http://zxid.org/ License:: Open source: Apache 2, see License chapter and file COPYING Immediate goal: build a SAML 2.0 SP and ID-WSF 2.0 WSC Goals of ZXID project include * SOAP 1.1 support (done) * SAML 2.0 compliance - SP role (done) - IdP role (done) * Liberty ID-FF 1.2 support - SP - IdP - SAML 1.1 * Liberty ID-WSF 1.1 support - Discovery bootstrap - Discovery WSC - ID-DAP WSC - ID-DAP WSP * Liberty ID-WSF 2.0 support - Discovery bootstrap (done) - Discovery WSC (done) - Discovery WSP (done) - ID-DAP WSC (done) - ID-DAP WSP (done) <> <> <> <> 2.1 Project Layout ------------------ Following directory layout is used by the project. Many of the specified directories are used by intermediate outputs that are not distributed in tarball releases, but may or may no be present in CVS checkouts. zxid-0.xx | +-- Net The Net::SAML perl module (also mod_perl) +-- php PHP / mod_php integration +-- zxidjava The Java JNI interface to ZXID +-- servlet Apache Tomcat integration +-- c C code generated from the Schema Grammar descriptions +-- sg Schema Grammar (.sg) descriptions of protocols +-- xsd XML schema descriptions of protocols (not distributed) +-- tex Temporary files for document generation using PlainDoc (not distributed) +-- html HTML documentation generated using PlainDoc +-- review Publicly released announcements and documents (not distributed) +-- t Test scripts and expected test outputs `-- tmp Temporary files, such as actual test outputs The Manifest file, which follows, explains each file in more detail. <> >> 2.2 Protocol Encoders and Decoders ---------------------------------- The protocol encoders and decoders are generated automatically from the schema grammar (.sg) descriptions. This ensures accurate protocol implementation. While the output is strictly schema driven and correct, the decoders have some provisions to accept some deviations from strict spec (e.g. out of order elements are tolerated). However, one should note that XMLDSIG does not tolerate very much deviation, thus even if decoder accepts a slightly illformed message, it is likely to fail in signature verification. There are three outputs from generation 1. Data structures describing the data (xx.h) 2. Encoder that linearizes the data structure to wire protocol (xx-enc.c) 3. Decoder that converts wire protocol byte stream to a data structure (xx-dec.c) 2.3 Standards and Namespaces ---------------------------- ZXID uses consistently the same namespace prefixes throughout the project. The generated encoders and decoders support following schemata <> 96 Copyright, License, Notices, and Acknowledgements ==================================================== Copyright (c) 2006-2009 Symlabs (symlabs@symlabs.com), All Rights Reserved. Author: Sampo Kellomäki (sampo@iki.fi) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. The research leading to these results has received funding from the European Community's Seventh Framework Programme (FP7/2007-2013) under grant agreement number 216287 (TAS3 - Trusted Architecture for Securely Shared Services - www.tas3.eu). While the source distribution of ZXID does not contain SSLeay or OpenSSL code, if you use this code you will use OpenSSL library. Please give Eric Young and OpenSSL team credit (as required by their licenses). Binary distribution of this product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/). See LICENSE.openssl for further information. Binary distribution of this product includes cryptographic software written by Eric Young (eay@cryptsoft.com). Binary distribution of this product includes software written by Tim Hudson (tjh@cryptsoft.com). See LICENSE.ssleay for further information. And remember, you, and nobody else but you, are responsible for auditing ZXID and OpenSSL library for security problems, back-doors, and general suitability for your application. 96.1 Dependency Library Licenses -------------------------------- ZXID strives to maintain IPR hygiene and avoid both non-free and GPL license contamination. All the dependency libraries have, and shall have, BSD style licenses * OpenSSL under BSDish (with "advertising" clause) * libcurl under BSDish * zlib under BSDish * libc available as part of the operating system Please see each library package for the exact details of their licenses. 96.1.1 Yubikey ~~~~~~~~~~~~~~ Contains libyubikey components which are subject to following notice: > Written by Simon Josefsson . > Copyright (c) 2006, 2007, 2008, 2009 Yubico AB > All rights reserved. > > Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions are > met: > > > Redistributions of source code must retain the above copyright > notice, this list of conditions and the following disclaimer. > > > Redistributions in binary form must reproduce the above > copyright notice, this list of conditions and the following > disclaimer in the documentation and/or other materials provided > with the distribution. > > THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 96.1.2 OpenSSL ~~~~~~~~~~~~~~ The source distribution references, but does not contain, OpenSSL. The binary distributions may incorporate or dynamically link to OpenSSL, which is subject to the following terms and conditions: > Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. > > Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions > are met: > > 1. Redistributions of source code must retain the above copyright > notice, this list of conditions and the following disclaimer. > > 2. Redistributions in binary form must reproduce the above copyright > notice, this list of conditions and the following disclaimer in > the documentation and/or other materials provided with the > distribution. > > 3. All advertising materials mentioning features or use of this > software must display the following acknowledgment: > "This product includes software developed by the OpenSSL Project > for use in the OpenSSL Toolkit. (http://www.openssl.org/)" > > 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used > to endorse or promote products derived from this software without > prior written permission. For written permission, please contact > openssl-core@openssl.org. > > 5. Products derived from this software may not be called "OpenSSL" > nor may "OpenSSL" appear in their names without prior written > permission of the OpenSSL Project. > > 6. Redistributions of any form whatsoever must retain the following > acknowledgment: > "This product includes software developed by the OpenSSL Project > for use in the OpenSSL Toolkit (http://www.openssl.org/)" > > THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY > EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR > ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) > HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, > STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED > OF THE POSSIBILITY OF SUCH DAMAGE. > ==================================================================== > > This product includes cryptographic software written by Eric Young > (eay@cryptsoft.com). This product includes software written by Tim > Hudson (tjh@cryptsoft.com). 96.1.3 SSLeay ~~~~~~~~~~~~~ The source distribution references, but does not contain, OpenSSL which contains SSLeay. The binary distributions may incorporate or dynamically link to OpenSSL containing SSLeay, which is subject to the following terms and conditions: > Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) > All rights reserved. > > This package is an SSL implementation written > by Eric Young (eay@cryptsoft.com). > The implementation was written so as to conform with Netscape's SSL. > > This library is free for commercial and non-commercial use as long as > the following conditions are adhered to. The following conditions > apply to all code found in this distribution, be it the RC4, RSA, > lhash, DES, etc., code; not just the SSL code. The SSL documentation > included with this distribution is covered by the same copyright terms > except that the holder is Tim Hudson (tjh@cryptsoft.com). > > Copyright remains Eric Young's, and as such any Copyright notices in > the code are not to be removed. > If this package is used in a product, Eric Young should be given > attribution as the author of the parts of the library used. > This can be in the form of a textual message at program startup or > in documentation (online or textual) provided with the package. > > Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions > are met: > > 1. Redistributions of source code must retain the copyright > notice, this list of conditions and the following disclaimer. > 2. Redistributions in binary form must reproduce the above copyright > notice, this list of conditions and the following disclaimer in > the documentation and/or other materials provided with the > distribution. > 3. All advertising materials mentioning features or use of this > software must display the following acknowledgement: > "This product includes cryptographic software written by > Eric Young (eay@cryptsoft.com)" > > The word 'cryptographic' can be left out if the routines from the > library being used are not cryptographic related :-). > 4. If you include any Windows specific code (or a derivative thereof) > from the apps directory (application code) you must include an > acknowledgement: > "This product includes software written by Tim Hudson > (tjh@cryptsoft.com)" > > THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND > ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR > PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS > BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, > OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT > OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR > BUSINESS INTERRUPTION) > HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, > STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING > IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE > POSSIBILITY OF SUCH DAMAGE. > > The license and distribution terms for any publicly available > version or derivative of this code cannot be changed. i.e. this > code cannot simply be copied and put under another distribution > license [including the GNU Public License.] 96.2 Specification IPR ---------------------- ZXID is based on open SAML, Liberty, and TAS3 specifications. The parties that have developed these specifications, including Symlabs, have made Royalty Free (RF) licensing commitment. Please ask OASIS, Liberty Alliance, and TAS3 project for the specifics of their IPR policies and IPR disclosures. Some protocols, such as WS-Trust and WS-Federation enjoy Microsoft's pledge<> that they will not sue you even if you implement these specifications. You should evaluate yourself whether this is good enough for your situation. 96.3 Further Warranties ----------------------- If you need the author or Symlabs to further disclaim IPR interest or make warranties of non-infringement, such declarations are available for a fee. Please contact sales@symlabs.com Legal queries and clarifications will be answered at then-current Symlabs Professional Services rate, please contact sales@symlabs.com. 20 Testing ========== ZXID test suite is still in tatters. Some things that should be tested 1. Will generated HTTP redirect sig validate at IdP? 2. Does IdP issued A7N validate? 3. Validation of EncryptedAssertion? 4. Will generated SOAP binding sig validate at IdP? 5. Does IdP issued SOAP sig validate? Metadata related 1. IBM metadata (can we parse) 2. Sun metadata (can we parse) XML related 1. Fully qualified XML parses? 2. Unknown ns prefix that refers to known namespace URI 3. Known ns prefix, referring to wrong URI 4. Known prefix refers to aliased URI 5. Use of default namespaces working? 6. Unknown prefix and URI as long as it is never used 7. Unknown prefix and URI, used 8. Known NS (prefix or URI), unknown element 14 Integration of Other Implementations with ZXID ================================================= 14.1 Conor Cahill's C++ Library for ID-WSF ------------------------------------------ Conor P. Cahill, of AOL and Intel fame, has developed and maintains a C++ library for ID-WSF 2.0 Web Service Client functionality for selected application protocols, including the ID-WSF 2.0 Discovery and some application protcols. Conor also provides a server side package that implements the corresponding WSP roles in Java. These libraries are valuable resources and come with extensive test suites - in fact, passing Conor's test suites has become the gold standard for validity and interoperability of any ID-WSF implmentations (this is not to detract from formal IOP events and the Liberty certification program, but passing Conor's test suite is a good predictor of getting certified). *Install Recipe* Conor's libraries have certain dependencies. Following is my best understanding of how to get them installed.<> mkdir conor cd conor tar xvf /t/LibertyIDWSFServices-v0.8.2.tgz cd .. mkdir conor-cli cd conor-cli/ tar xvf /t/LibertyClientToolkit-v1.0.1.tgz 14.2 Pat Patterson's php module ------------------------------- (*** This section also appears in zxid-php.pd) Pat Patterson of Sun distributes a pure PHP module (not to be confused with Sun's OpenSSO open source effort, with which Pat has some contact) that implements some aspects of SAML 2.0. As of May 2007, his library provides functionality that, by and large, parallels that of the php_zxid module. A major advatage of his module is that it does not have C shared library dependency, but beware that he still depends on XML parsing and popular crypto libraries (openssl) to be available. These assumptions are not onerous, but you should be aware of them in case your system differs from main stream deployments. Overall, Pat's PHP implementation, as of May 2007, is still lacking in metadata generation and loading (it does not implement Auto-CoT or Well Known Location) and has some rough edges around less frequently used parts of the SAML specification. No doubt matters will improve over the time. Pat's library handles only SSO and not ID Web Services. It would be possible to extract the discovery bootstrap from SSO using his library after which you can use ZXID WSC API to actually call the services. 14.3 Sun OpenSSO ---------------- Sun Microsystems distributes an open source implementation of SAML 2.0. Their implementation is of primary interest as it provides a freely available IdP implementation (as of May 2007 IMNSHO the ZXID SP interface is superior to the OpenSSO SP - and since both implement an open standard, you can mix ZXID SP with OpenSSO IdP). Thus, the ZXID to OpenSSO integration reduces to each one acting in its role using standard wire protocol - SAML 2.0. 14.4 University of Kent's PERMIS PDP ------------------------------------ University of Kent is a supplier of PERMIS XACML PDP software. ZXID has been interoperated and found compatible on wire with PERMIS as of Nov. 2009. However, not integration at library or API level has been attempted. 14.5 Shibboleth 2 ----------------- Shibboleth 2, a SAML 2.0 based IdP, has been interoperated with ZXID SP code as of Nov. 2009. 99 Appendix: Schema Grammars ============================ Large parts of ZXID code are generated from +schema grammars+ which are a convenient notation for describing XML schmata. This chapter gives a sampling of some schema grammars that are currently implemented and distributed in the ZXID package. For fuller list, see sg subdirectory of the distribution or schemata.pd file. < %tt Arrow (->) signifies reference to type that defines element or attribute xx: ... ; Colon (:) means that the definition of type follows immediately ee An element or attribute by itself means exactly one occurance is expected ee? Question mark (?) means the element or attribute is optional ee* Asterisk (*) means the element may appear from zero to infinite number of times (same as * in regular expressions) ee+ Plus (+) means the element must appear at least once, but may appear an infinite number of times (same as + in regular expressions) ee{x,y} The element must appear between x and y times (same as in regex) ee | ee The pipey symbol (|) means elements are mutually exclusive choices. ee ee Concatenation of elements or attributes means sequence base( t ) Introduce Extension base type (derive a type) redef( .. ) Redefine a type (using construct) mixed(1) Mark a complex type as having mixed content type, i.e. strings and elements alternate enum( ... ) Introduce enumeration of xs:strings any xs:any, the XML arbitrary element extension mechanism @any xs:anyAttribute, the XML arbitrary attribute extension mechanism target( ... ) Define target namespace described by the schema import( ... ) Bring in other schemata and namespaces ns( ... ) Declare existence of another namespace (without importing it) >> <> 99.1 SAML 2.0 ------------- 99.1.1 saml-schema-assertion-2.0 (sa) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.1.2 saml-schema-protocol-2.0 (sp) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.1.4 saml-schema-metadata-2.0 (md) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.5 Liberty ID-WSF 2.0 ----------------------- 99.5.1 liberty-idwsf-utility-v2.0 (lu) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.5.3 liberty-idwsf-soap-binding-v2.0 (b) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.5.4 liberty-idwsf-security-mechanisms-v2.0 (sec) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.5.5 liberty-idwsf-disco-svc-v2.0 (di) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.5.7 id-dap (dap) ~~~~~~~~~~~~~~~~~~~ <> >> 99.5.8 liberty-idwsf-subs-v1.0 (subs) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.5.9 liberty-idwsf-dst-v2.1 (dst) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.6 SOAP 1.1 Processor wsf-soap11 (e) -------------------------------------- <> >> 99.7 XML and Web Services Infrastructure ---------------------------------------- 99.7.1 xmldsig-core (ds) ~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.7.2 xenc-schema (xenc) ~~~~~~~~~~~~~~~~~~~~~~~~~ <> >> 99.7.3 ws-addr-1.0 (a) ~~~~~~~~~~~~~~~~~~~~~~ <> >> 100 Appendix: Some Example XML Blobs ==================================== These XML blobs are for reference. They have been pretty printed. Indentation indicates nesting level and closing tags have been abbreviated as "". The actual XML on wire generally does not have any whitespace. 100.1 SAML 2.0 Artifact Response with SAML 2.0 SSO Assertion and Two Bootstraps ------------------------------------------------------------------------------- This example corresponds to t/sso-w-bootstraps.xml in the distribution. Both bootstraps illustrate SAML assertion as bearer token. https://a-idp.liberty-iop.org:8881/idp.xml https://a-idp.liberty-iop.org:8881/idp.xml https://a-idp.liberty-iop.org:8881/idp.xml r8OvtNmq5LkYwCNg6bsRZAdT4NE= GtWVZzHYW54ioHk/C7zjDRThohrpwC4= PB5fLIA4lRU2bH4HkQsn9 https://sp1.zxidsp.org:8443/zxidhlo?o=B https://a-idp.liberty-iop.org:8881/idp.xml dqq/28hw5eEv+ceFyiLImeJ1P8w= UKlEgHKQwuoCE= https://sp1.zxidsp.org:8443/zxidhlo?o=B urn:oasis:names:tc:SAML:2.0:ac:classes:Password Sue https://a-idp.liberty-iop.org/profiles/WSF1.1/RID-DISCO-sue urn:liberty:disco:2003-08 https://a-idp.liberty-iop.org:8881/idp.xml urn:liberty:security:2005-02:TLS:Bearer CREDOTGAkvhNoP1aiTq4bXBg https://a-idp.liberty-iop.org:8881/DISCO-S Symlabs Discovery Service Team G https://a-idp.liberty-iop.org:8881/DISCO-S SYMfiam Discovery Service https://a-idp.liberty-iop.org:8881/idp.xml urn:liberty:disco:2006-08 urn:liberty:security:2005-02:TLS:Bearer https://a-idp.liberty-iop.org:8881/idp.xml o2SgbuKIBzl4e0dQoTwiyqXr/8Y= hHdUKaZ//cZ8UYJxvTReNU= 9my93VkP3tSxEOIb3ckvjLpn0pa6aV3yFXioWX-TzZI= https://a-idp.liberty-iop.org:8881/idp.xml urn:oasis:names:tc:SAML:2.0:ac:classes:Password N.B. The AttributeStatement/Attribute/AttributeValue/ EndpointReference/Metadata/SecurityContext/ Token/Assertion/Conditions/AudienceRestriction/Audience is the same as the IdP because in many products the IdP and Discovery Service roles are implemented by the same entity. Note also that the audience of the inner assertion is the discovery service where as the audience of the outer assertion is the SP that will eventually call the Discovery Service. 100.2 ID-WSF 2.0 Call with X509v3 Sec Mech ------------------------------------------ 123 ... urn:xx:Query 2005-06-17T04:49:17Z MIIB9zCCAWSgAwIBAgIQ... ... ... ... ... Ru4cAfeBAB YgGfS0pi56p HJJWbvqW9E84vJVQkjDElgscSXZ5Ekw== The salient features of the above XML blob are * Signature that covers relevant SOAP headers and Body * Absence of any explicit identity token. Absence of identity token means that from the headers it is not possible to identify the taget identity. The signature generally coveys the Invoker identity (the WSC that is calling the service). Since one WSC typically serves many principals, knowing which principal is impossible. For this reason X509 security mechanism is seldom used in ID-WSF 2.0 world (with ID-WSF 1.1 the ResourceID provides an alternative way of identifying the principal, thus making X509 a viable option). 100.3 ID-WSF 2.0 Call with Bearer (Binary) Sec Mech --------------------------------------------------- ... ... urn:xx:Query 2005-06-17T04:49:17Z mQEMAzRniWkAAAEH9RWir0eKDkyFAB7PoFazx3ftp0vWwbbzqXdgcX8fpEqSr1v4 YqUc7OMiJcBtKBp3+jlD4HPUaurIqHA0vrdmMpM+sF2BnpND118f/mXCv3XbWhiL VT4r9ytfpXBluelOV93X8RUz4ecZcDm9e+IEG+pQjnvgrSgac1NrW5K/CJEOUUjh oGTrym0Ziutezhrw/gOeLVtkywsMgDr77gWZxRvw01w1ogtUdTceuRBIDANj+KVZ vLKlTCaGAUNIjkiDDgti= ... ... ... ... ... YgGfS0pi56pu ... 100.4 ID-WSF 2.0 Call with Bearer (SAML) Sec Mech ------------------------------------------------- ... ... urn:xx:Query 2005-06-17T04:49:17Z http://idp.symdemo.com/idp.xml ... U2XTCNvRX7Bl1NK182nmY00TEk== ... http://wsp.zxidsp.org urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport mQEMAzRniWkAAAEH9RbzqXdgcX8fpEqSr1v4= ... A7N123 ... ... ... ... ... *** is the reference above to wsse11:TokenType really correct? Note how the and the attributes are encrypted such that only the WSP can open them. This protects against WSC gaining knowledge of the NameID at the WSP. <> <README ZXID

README ZXID

>> <> <> SAML Open Source catalogs http://saml.xml.org/saml-open-source-implementations http://openliberty.org/wiki/index.php/Existing_Identity_Systems#Open_Source_ http://docs.safehaus.org/display/HAUS/Id+OSS+Map Suspicious: when decrypting elements and plugging their plain text variants into original data structure, the wo pointers are not updated. Thus the "old" encrypted data may remain accessible for some purposes. Pointers from Pat http://rnd.feide.no/2007/04/13/light-bulb-update-request-for-testing/ https://opensso.dev.java.net/public/extensions/index.html Add macros for OK response. http://wiki.oasis-open.org/security/SstcSamlX509AuthnAttribProfile http://wiki.oasis-open.org/security/SimpleSignBinding On CYGWIN lockf() and flock() apparently are not defined. On mingw they are. Way to pass RelayState through zxid_simple() AuditExplorer elgg.org is very relevant for e-Learning / HR-XML market https://imb.phil.uni-augsburg.de/elgg/ FEDORA Moodle (Open Source, Open University) MyStuff (Open Source, Open University) Privacy features of SAML/Liberty User centric features of SAML/Liberty - User control (not necessarily interaction every steps of the way) ECP + IS plugin for Firefox ================== In general, wild card cert is one whose cn field is of form *.cellmail.com The openssl command for creating CSR is 'openssl req', for example > openssl req -new -nodes -keyout pkey.pem -out req.pem Generating a 1024 bit RSA private key ......................++++++ .................................................................................++++++ writing new private key to 'pkey.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FI State or Province Name (full name) [Some-State]: Locality Name (eg, city) []:Helsinki Organization Name (eg, company) [Internet Widgits Pty Ltd]:Tietosampo Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:*.tietosampo.fi Email Address []:sampo@iki.fi Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: In the example above I left the challenge password and company name empty, but it could be that Thawte insists that you fill in something there. They may also have specific requirements about the company name (and possibly the Organization Name and Oraganization Unit Name) matching the registered name of your company. Anyway, the output from the above should be > cat req.pem -----BEGIN CERTIFICATE REQUEST----- MIIBwjCCASsCAQAwgYExCzAJBgNVBAYTAkZJMRMwEQYDVQQIEwpTb21lLVN0YXRl MREwDwYDVQQHEwhIZWxzaW5raTETMBEGA1UEChMKVGlldG9zYW1wbzEYMBYGA1UE AxQPKi50aWV0b3NhbXBvLmZpMRswGQYJKoZIhvcNAQkBFgxzYW1wb0Bpa2kuZmkw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALudDsX0ZU13ajartg4IECD0+5Lo xSThKu47vQ6GfIeh1+5QO0PCytmrUAI+w0mai9gIp4MssBGqvLs5e2No09ih1KmM 7s8tgXnnexRQ7FsTEVnaZlZ2dgMNO4DYYtRgX+Kxks6hpHLEY0R3VmCVe1BPlkPs 0Y4gP1yDNMXMAO+bAgMBAAGgADANBgkqhkiG9w0BAQUFAAOBgQBSWviTot4mScAi xGlky+UqkYtih0dmqhBBTiiSaVHBerUATKG0p8NkM0NGXuPt8Wozx6t53f8VeXDo BML4SzkoYSrmOkEqk8np8O3IWSG4+HRwhetG/THOvNwRz9shvadPec+VQxJEL2FC vxz/z/oQ8oFxyCwVUtTb4zKhT9rFEw== -----END CERTIFICATE REQUEST----- Or if you want to convince yourself that the wild card is really in there, you can check with > openssl asn1parse On another train of thought, if I was to have a local CA here, could I use the > commercial certificate I get to sign the x509 certificates I would make? The > x509 would be used to sign emails via smart cards. This is not a commercial > project but rather one to learn more about smart cards. Sun has made code > available to manage smart cards so it may be interesting to learn more. The regular SSL certificate usually will not work as CA certificate due to certificate usage indicators. Technically it is possible to ignore such indicators and use the certificate anyway, but a lot of widely distributed software does not ignore them so you would have a lot of interoperability problems or at least confirmation questions. Commercial CAs do issue CA certificates, but they tend to be expensive. Even if you get commercial CA certificate, you should know that some (older) software only supports one level of certificate hierarchy. This problem has surfaced when some commercial CAs tried to structure themselves internally as multi layer CA. If you want to run your own CA, all you really have to do is configure the CA cert of yours to be trusted by all the software. For browsers this is easy enough within the GUI itself. For servers (such as apache or dsproxy), there is a way to do this at config file level. Configuring direct trust to your CA cert tends to be easier than trying to get commercial CA cert and playing multilayer CA games. Re Thunderbird, I am bit surprised that it does not accept self signed certs. It seems more probable to me that it actually can be configured to accept them, but does not ship with that turned on to protect naive users. The most basic way to use self signed cert would be to import the self signed cert as one of the trusted CA certs. Was your problem with Thunderbird not accepting the IMAPS connection? In that case the Thunderbird client software needs to start trusting the self signed cert as CA cert. There is probably a GUI way to do this - probably something very similar to the Firefox GUI for configuring certs. If you were trying to configure a ClientTLS certificate and the IMAPS server refused it, then you need to adjust configuration in the server end, probably in a config file. ----- ZXID CARML stack * frontend API bindings * middle layer routing and mapping engine * backend connectors --Sampo ----- http://saml.xml.org/products http://saml.xml.org/zxid ZXID.org Identity Management toolkit implements standalone SAML 2.0 and Liberty ID-WSF 2.0 stacks. It is a C implementation with minimal external dependencies - OpenSSL, CURL, and zlib - ensuring easy deployment (no DLLhell). Due to its small footprint and efficient and accurate schema driven implementation, it is suitable for embedded and high volume applications. Language bindings to all popular highlevel languages such as PHP, Perl, and Java, are provided via SWIG. ZXID implements, as of July 07, SP, WSC, and WSP roles. Paul Madsen wrote: > http://saml.xml.org/forum/calculating-digest-of-an-authentication-statement > > Dear Sirs, my name is Gianluca from Italy > I'm trying to calculate the Digest value of a SAML Authentication > STatement whith the SHA-1 algorithm. Let us suppose that we are dealing > with a string representing the following node: > > > > GIANLUCA > > > > When I try to calculate SHA-1 with the function b64_sha1(str2Digest) > what > exactly should the string str2Digest contain? I mean it should be equal to > "GIANLUCA< > /saml:NameIdentifier>" > or only "GIANLUCA" or ....what else? Its a pity he did not provide email address, but lets hope this reaches him anyway. 1. There is no univesally agreed way to digest Authentication Statements 2. "Universally" agreed way to digest XML in general is exc-c14n (exclusive canonicalization) [XML-EXC-C14N]. This method is used by all certified SAML implementations. It is also the method used by digital signatures [XMLDSIG]. 3. Canonicalization is difficult and typically 80% of digital signature failures derive from canonicalization bugs. Of those 95% are XML namespace related (curse the inventor of XML namespaces), and 4% are whitespace related. 4. For what you are apparently trying to do, it is important to digest the entire canonicalized Authentication Statement. If the question had been about canonicalizing the NameID, it would still be important to digest the entire canonicalized Name Identifier as the actual value in isolation is meaningless. You need the identifier type and namespace qualification for the digest to be meaningful. [XML-C14N] XML Canonicalization (non-exclusive), http://www.w3.org/TR/2001/REC-xml-c14n-20010315; J. Boyer: "Canonical XML Version 1.0", W3C Recommendation, 15.3.2001, http://www.w3.org/TR/xml-c14n, RFC3076 [XML-EXC-C14N] Exclusive XML Canonicalization, http://www.w3.org/TR/xml-exc-c14n/ [XMLDSIG] "XML-Signature Syntax and Processing", W3C Recommendation, 12.2.2002, http://www.w3.org/TR/xmldsig-core, RFC3275 Cheers, --Sampo