Well, I have no idea how xmlsec was compiled. Aleksey
On 10/13/10 2:31 PM, Erik Smith wrote:
It looks like the open SSL Dir issue was a bad library interaction. So I made sure all relavant libs were up-to-date and dynamically loaded. libxml version: 2.7.7 xmlsec version: 1.2.16 libxslt version: 1.1.26 When I use xmlSecCryptoAppKeysMngrCertLoad, I do get a "key is not found", which I think has to do with it looking for a cert as a key in the document. I had tried this to address the open SSL Dir issue which appears to have been resolve as stated above. Going back to xmlSecCryptoAppKeyLoad / xmlSecCryptoAppDefaultKeysMngrAdoptKey as it is seen originally in the code below gets me back to the same error with the corrupted status: status before xmlSecDSigCtxVerify: 0 status after xmlSecDSigCtxVerify: 5361840 compilation is simple: export LD_LIBRARY_PATH=$NDTOOLS/lib:$LD_LIBRARY_PATH g++ -c xs2.cpp -o xs2.o -g -fexceptions -Wall -Wno-sign-compare -Wno-unused -m64 -g -D_REENTRANT -D_PTHREADS -DXMLSEC_CRYPTO_OPENSSL -I. -I$NDTOOLS/include -I$NDTOOLS/include/libxml2 -I$NDTOOLS/include/xmlsec1 g++ -o xs2 xs2.o -lxml2 -lxslt -lssl -lcrypto -lz -ldl -lxmlsec1 -lxmlsec1-openssl -m64 erik On Wed, Oct 13, 2010 at 1:47 PM, Aleksey Sanin <[email protected] <mailto:[email protected]>> wrote: 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]> <mailto:[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]>> <mailto:[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]>>> <mailto:[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]>>>> <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] <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]>>>> <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] <mailto:[email protected]>>>>> http://www.aleksey.com/mailman/listinfo/xmlsec
_______________________________________________ xmlsec mailing list [email protected] http://www.aleksey.com/mailman/listinfo/xmlsec
