It might be hard coded from OpenSSL during compilation

On 10/13/10 12:11 PM, Erik Smith wrote:
The same code run on the earlier library versions did not have this
issue (see code below).    Do I need to specify a directory if I'm just
loading a cert in a manger?

erik

On Wed, Oct 13, 2010 at 12:09 PM, Aleksey Sanin <[email protected]
<mailto:[email protected]>> wrote:

    No changes, it is a part of xmlsec-openssl init process.


    On 10/13/10 12:07 PM, Erik Smith wrote:

        I'm not specifying any directories in the code, only two files
        in the
        CWD.    Did something change in recent version that requires a cert
        directory for openssl?

        erik

        On Wed, Oct 13, 2010 at 12:04 PM, Aleksey Sanin
        <[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>> wrote:

            The dir might not exists?

            Aleksey


            On 10/13/10 10:56 AM, Erik Smith wrote:

                I rebuilt libxml, xmlsec, and libxslt to the latest and
        I get an
                x509
                error for some reason.  Any ideas on this?

                libxml version: 2.7.7
                xmlsec version: 1.2.16
                libxslt version: 1.1.26

          
func=xmlSecOpenSSLX509StoreInitialize:file=x509vfy.c:line=657:obj=x509-store:subj=X509_LOOKUP_add_dir:error=4:crypto
                library function failed:

          
func=xmlSecKeyDataStoreCreate:file=keysdata.c:line=1330:obj=x509-store:subj=id->initialize:error=1:xmlsec
                library function failed:

          
func=xmlSecOpenSSLKeysMngrInit:file=crypto.c:line=330:obj=unknown:subj=xmlSecKeyDataStoreCreate:error=1:xmlsec
                library function failed:xmlSecOpenSSLX509StoreId

          
func=xmlSecOpenSSLAppDefaultKeysMngrInit:file=app.c:line=1331:obj=unknown:subj=xmlSecOpenSSLKeysMngrInit:error=1:xmlsec
                library function failed:



                2010/10/13 Aleksey Sanin <[email protected]
        <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>
        <mailto:[email protected] <mailto:[email protected]>

        <mailto:[email protected] <mailto:[email protected]>>>>


                    Sounds like you are compiling your application with
                different flags
                    compared to xmlsec. Something like structure members
        alignment
                    or debug vs. release.

                    Aleksey


                    On 10/13/10 7:32 AM, Erik Smith wrote:

                        xmlsec output:

                        OK
                        SignedInfo References (ok/all): 1/1
                        Manifests References (ok/all): 0/0
                        = VERIFICATION CONTEXT
                        == Status: succeeded
                        == flags: 0x00000006
                        == flags2: 0x00000000
                        == Key Info Read Ctx:
                        = KEY INFO READ CONTEXT
                        == flags: 0x00000000
                        == flags2: 0x00000000
                        == enabled key data: all
                        == RetrievalMethod level (cur/max): 0/1
                        == TRANSFORMS CTX (status=0)
                        == flags: 0x00000000
                        == flags2: 0x00000000
                        == enabled transforms: all
                        === uri: NULL
                        === uri xpointer expr: NULL
                        == EncryptedKey level (cur/max): 0/1
                        === KeyReq:
                        ==== keyId: rsa
                        ==== keyType: 0x00000001
                        ==== keyUsage: 0x00000002
                        ==== keyBitsSize: 0
                        === list size: 0
                        == Key Info Write Ctx:
                        = KEY INFO WRITE CONTEXT
                        == flags: 0x00000000
                        == flags2: 0x00000000
                        == enabled key data: all
                        == RetrievalMethod level (cur/max): 0/1
                        == TRANSFORMS CTX (status=0)
                        == flags: 0x00000000
                        == flags2: 0x00000000
                        == enabled transforms: all
                        === uri: NULL
                        === uri xpointer expr: NULL
                        == EncryptedKey level (cur/max): 0/1
                        === KeyReq:
                        ==== keyId: NULL
                        ==== keyType: 0x00000001
                        ==== keyUsage: 0xffffffff
                        ==== keyBitsSize: 0
                        === list size: 0
                        == Signature Transform Ctx:
                        == TRANSFORMS CTX (status=2)
                        == flags: 0x00000000
                        == flags2: 0x00000000
                        == enabled transforms: all
                        === uri: NULL
                        === uri xpointer expr: NULL
                        === Transform: exc-c14n
                        (href=http://www.w3.org/2001/10/xml-exc-c14n#)
                        === Transform: rsa-sha1
                        (href=http://www.w3.org/2000/09/xmldsig#rsa-sha1)
                        === Transform: membuf-transform (href=NULL)
                        == Signature Method:
                        === Transform: rsa-sha1
                        (href=http://www.w3.org/2000/09/xmldsig#rsa-sha1)
                        == Signature Key:
                        == KEY
                        === method: RSAKeyValue
                        === key type: Public
                        === key usage: -1
                        === rsa key: size = 1024
                        === list size: 1
                        === X509 Data:
                        ==== Certificate:
                        ==== Subject Name:
                        /C=US/ST=TN/L=Nashville/O=Emdeon/OU=Emdeon/CN=Emdeon
                        ==== Issuer Name:
                        /C=US/ST=TN/L=Nashville/O=Emdeon/OU=Emdeon/CN=Emdeon
                        ==== Issuer Serial: 4CAB2D3B
                        == SignedInfo References List:
                        === list size: 1
                        = REFERENCE VERIFICATION CONTEXT
                        == Status: succeeded
                        == URI:
        "#Response-guid-ab3e423b-4f6e-4376-b910-553b31bc6404"
                        == Reference Transform Ctx:
                        == TRANSFORMS CTX (status=2)
                        == flags: 0x00000000
                        == flags2: 0x00000000
                        == enabled transforms: all
                        === uri:
                        === uri xpointer expr:
                        #Response-guid-ab3e423b-4f6e-4376-b910-553b31bc6404
                        === Transform: xpointer
                        (href=http://www.w3.org/2001/04/xmldsig-more/xptr)
                        === Transform: enveloped-signature

          (href=http://www.w3.org/2000/09/xmldsig#enveloped-signature)
                        === Transform: exc-c14n
                        (href=http://www.w3.org/2001/10/xml-exc-c14n#)
                        === Transform: membuf-transform (href=NULL)
                        === Transform: sha1
                (href=http://www.w3.org/2000/09/xmldsig#sha1)
                        === Transform: membuf-transform (href=NULL)
                        == Digest Method:
                        === Transform: sha1
                (href=http://www.w3.org/2000/09/xmldsig#sha1)
                        == PreDigest data - start buffer:
        <Response xmlns="urn:oasis:names:tc:SAML:1.0:protocol"
                        xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
                        xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema";

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
                        IssueInstant="2010-10-06T21:15:38.906Z"
        MajorVersion="1"
                        MinorVersion="1" Recipient="http://amgr.emdeon.com";


          
ResponseID="Response-guid-ab3e423b-4f6e-4376-b910-553b31bc6404"><Status><StatusCode

          Value="samlp:Success"></StatusCode></Status><Assertion
                        xmlns="urn:oasis:names:tc:SAML:1.0:assertion"

          AssertionID="kpenti-df8fac42-ac9d-4317-98c4-7c05fc4bb761"
                        IssueInstant="2010-10-06T16:15:38.906Z"
                        Issuer="http://access.emdeon.com"; MajorVersion="1"
                        MinorVersion="1"><Conditions
                NotBefore="2010-10-06T21:15:38.905Z"


          
NotOnOrAfter="2010-10-06T21:25:38.905Z"></Conditions><AuthenticationStatement
                        AuthenticationInstant="2010-10-06T16:15:38.906Z"


          
AuthenticationMethod="urn:oasis:names:tc:1.0:am:password"><Subject><NameIdentifier>kpenti</NameIdentifier><SubjectConfirmation><ConfirmationMethod>urn:oasis:names:tc:1.0:cm:bearer</ConfirmationMethod></SubjectConfirmation></Subject></AuthenticationStatement></Assertion></Response>
                        == PreDigest data - end buffer
                        == Manifest References List:
                        === list size: 0


                        On Wed, Oct 13, 2010 at 7:28 AM, Aleksey Sanin
        <[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>
        <mailto:[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>>
        <mailto:[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>
        <mailto:[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>>>> wrote:

                            What is the output of the xmlsec1 command?

                            Aleksey


                            On 10/12/10 11:36 PM, Erik Smith wrote:

                                After I call xmlSecDSigCtxVerify, the
        status in the
                        contex is
                                corrupted
                                with a large number.   However xmlsec1
        reports
                        validation as OK.

                                xmlsec1 --verify --pubkey-cert-pem cert.crt
                        --store-references
                                --id-attr:ResponseID

          urn:oasis:names:tc:SAML:1.0:protocol:Response
                /saml.xml

                                Also xmlSecDSigCtxDebugDump output is
        exactly
                the same for
                                xmlsec1 and
                                my program.

                                I've reduced the code down to what is
        below and I'm
                        having trouble
                                seeing what could be wrong.

                                libxml version: 2.6.27
                                xmlsec version: 1.2.11

                                Thanks for any help.



                                #include <iostream>
                                #include <xmlsec/xmltree.h>
                                #include <xmlsec/xmldsig.h>
                                #include <xmlsec/crypto.h>
                                #include <xmlsec/errors.h>

                                #ifndef XMLSEC_NO_XSLT
                                #include <libxslt/xslt.h>
                                #endif

                                void error(const char *);

                                int main(int argc, char **argv) {
                                     using namespace std;
                                     int status(0);

                                     xmlSecKeysMngrPtr mngr_;
                                     xmlSecDSigCtxPtr dsigCtx;
                                     xmlDocPtr doc_;

                                     cout << "libxml version: " <<
                LIBXML_DOTTED_VERSION
        << endl;
                                     cout << "xmlsec version: " <<
                XMLSEC_VERSION << endl;

                                     xmlInitParser();
                                     LIBXML_TEST_VERSION;
                                     xmlLoadExtDtdDefaultValue =
        XML_DETECT_IDS |
                                XML_COMPLETE_ATTRS;
                                     xmlSubstituteEntitiesDefault(1);

                                #ifndef XMLSEC_NO_XSLT
                                     xmlIndentTreeOutput = 1;
                                #endif
                                     // Init xmlsec library
                                     if (xmlSecInit() < 0)
        error("xmlSecInit");
                                     if (xmlSecCheckVersion() != 1)
                        error("xmlSecCheckVersion");

                                #ifdef XMLSEC_CRYPTO_DYNAMIC_LOADING
                                     if(xmlSecCryptoDLLoadLibrary(BAD_CAST
        "openssl") < 0)
                                error("xmlSecCryptoDLLoadLibrary");
                                #endif

                                     if(xmlSecCryptoAppInit(NULL) < 0)
                error("Error: crypto
                                initialization failed.");
                                     if(xmlSecCryptoInit() < 0)
        error("Error:
                xmlsec-crypto
                                initialization failed.");

                                     mngr_ = xmlSecKeysMngrCreate();
                                     if (!mngr_) error("bad");

                                     if
                (xmlSecCryptoAppDefaultKeysMngrInit(mngr_) < 0)
                                error("bad");

                                     xmlSecKeyDataFormat
                format(xmlSecKeyDataFormatCertPem);
                                     xmlSecKeyPtr key =
                xmlSecCryptoAppKeyLoad("cert.crt",
                                format, NULL,
                                NULL, NULL);
                                     if (!key) error("key load error");


                if(xmlSecCryptoAppDefaultKeysMngrAdoptKey(mngr_,
                        key) < 0)
                                error("could not add key");

                                     doc_ = xmlParseFile("saml.xml");
                                     if (!doc_ ||
        !xmlDocGetRootElement(doc_))
                error("bad");

                                     set_id(doc_);

                                     xmlNodePtr node =
                        xmlSecFindNode(xmlDocGetRootElement(doc_),
                                xmlSecNodeSignature, xmlSecDSigNs);
                                     if (!node) error("start node not
        found");

                                     dsigCtx = xmlSecDSigCtxCreate(mngr_);
                                     if (!dsigCtx) error("failed to
        create signature
                        context");

                                     std::cout << "status before: " <<
                dsigCtx->status
        << std::endl;
                                     if (xmlSecDSigCtxVerify(dsigCtx,
        node) < 0)
                                error("signature verify
                                error");
                                     std::cout << "status: " <<
        dsigCtx->status <<
                        std::endl;
                                     //xmlSecDSigCtxDebugDump(dsigCtx,
        stdout);

                                     return status;
                                }

                                void set_id(xmlDocPtr doc) {
                                     using namespace std;

                                     xmlNodePtr node = xmlSecFindNode(
                                             xmlDocGetRootElement(doc),
                                             BAD_CAST "Response",
                                             BAD_CAST
        "urn:oasis:names:tc:SAML:1.0:protocol");

                                     cout << "element name: " <<
        node->name<< endl;
                                     xmlAttrPtr attr = xmlHasProp(node,
        BAD_CAST
        "ResponseID");
                                     if (!attr) error("attribute not
        found");
                                     cout << "attribute name: " <<
        attr->name<<
                endl;

                                     xmlChar *value =
                xmlNodeListGetString(node->doc,
                                attr->children, 1);
                                     if (!value)
        error("xmlNodeListGetString");
                                     cout << "value: " << value << endl;

                                     xmlAttrPtr tmp(xmlGetID(node->doc,
        value));
                                     if (tmp) {
                                         cout << "id already registered"
        << endl;
                                     } else {
                                         xmlIDPtr id = xmlAddID(NULL,
        doc, BAD_CAST
                        value, attr);
                                         if (!id) {
                                             xmlFree(value); // fix
                                             error("xmlAddID error");
                                         }
                                         cout << "id added" << endl;
                                     }

                                     //xmlFree(value); // fix
                                }

                                void error(const char *e) {
                                     std::cout << e << std::endl;
                                     std::cout << "exiting" << std::endl;
                                     exit(0);
                                }









          _______________________________________________
                                xmlsec mailing list
        [email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>
        <mailto:[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>>
        <mailto:[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>
        <mailto:[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>>>


        http://www.aleksey.com/mailman/listinfo/xmlsec





_______________________________________________
xmlsec mailing list
[email protected]
http://www.aleksey.com/mailman/listinfo/xmlsec

Reply via email to