<div>hello,<br>Thanks to your kind reply. :)<br>The code piece is as follows, I think there is aready &lt;X509Data/&gt; in the &lt;Signature/&gt; part, it is not necessary to load the certificate.</div>
<div>Hope you can find something wrong in this code piece. :)</div>
<div>&nbsp;</div>
<div>Thanks a lot</div>
<div>Weizhong Qiang</div>
<div><br>******************************<br>bool SAMLToken::Authenticate(const std::string&amp; cafile, const std::string&amp; capath) {<br>&nbsp;&nbsp;xmlSecKeysMngr* keys_manager = NULL;<br>&nbsp;&nbsp;xmlSecDSigCtx *dsigCtx;<br><br>&nbsp;&nbsp;//Verify the signature under saml:assertion<br>
&nbsp;&nbsp;if((bool)x509data &amp;&amp; (!cafile.empty() || !capath.empty())) {<br>&nbsp;&nbsp;&nbsp;&nbsp;keys_manager = <strong><em>load_trusted_certs</em></strong>(&amp;keys_manager, cafile.c_str(), capath.c_str());<br>&nbsp;&nbsp;&nbsp;&nbsp;if(keys_manager == NULL) { std::cerr&lt;&lt;&quot;Can not load trusted certificates&quot;&lt;&lt;std::endl; return false; }<br>
&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if((bool)x509data)<br>&nbsp;&nbsp;&nbsp;&nbsp;{ std::cerr&lt;&lt;&quot;No trusted certificates exists&quot;&lt;&lt;std::endl; return false;}<br>&nbsp;&nbsp;if(keys_manager == NULL){ std::cerr&lt;&lt;&quot;No &lt;X509Data/&gt; exists, or no trusted certificates configured&quot;&lt;&lt;std::endl; return false;}<br>
<br>&nbsp;&nbsp;dsigCtx = xmlSecDSigCtxCreate(keys_manager);<br>&nbsp;&nbsp;if (xmlSecDSigCtxVerify(dsigCtx, assertion_signature_nd) &lt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;xmlSecDSigCtxDestroy(dsigCtx);<br>&nbsp;&nbsp;&nbsp;&nbsp;if (keys_manager) xmlSecKeysMngrDestroy(keys_manager);<br>
&nbsp;&nbsp;&nbsp;&nbsp;std::cerr&lt;&lt;&quot;Signature verification failed for saml:assertion&quot;&lt;&lt;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(keys_manager != NULL)xmlSecKeysMngrDestroy(keys_manager);<br>&nbsp;&nbsp;if(dsigCtx-&gt;status == xmlSecDSigStatusSucceeded) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;std::cout&lt;&lt;&quot;Succeed to verify the signature in saml:assertion&quot;&lt;&lt;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;xmlSecDSigCtxDestroy(dsigCtx);<br>&nbsp;&nbsp;}<br>}<br>else { std::cerr&lt;&lt;&quot;Invalid signature in saml:assertion&quot;&lt;&lt;std::endl; xmlSecDSigCtxDestroy(dsigCtx); return false; }<br>
}</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><strong><em>load_trusted_certs </em></strong>is as follows:</div>
<div>&nbsp;</div>
<div>
<p>//Load trusted cetificates into key manager<br>xmlSecKeysMngrPtr load_trusted_certs(xmlSecKeysMngrPtr* keys_manager, const char* cafile, const char* capath) {<br>&nbsp; xmlSecKeysMngrPtr keys_mngr;<br>&nbsp; if((keys_manager != NULL) &amp;&amp; (*keys_manager != NULL)) keys_mngr = *keys_manager;<br>
&nbsp; else {<br>&nbsp;&nbsp;&nbsp; keys_mngr = xmlSecKeysMngrCreate();<br>&nbsp;&nbsp;&nbsp; //initialize keys manager<br>&nbsp;&nbsp;&nbsp; if (xmlSecCryptoAppDefaultKeysMngrInit(keys_mngr)&lt;0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::cerr&lt;&lt;&quot;Can not initialize xmlSecKeysMngr object&quot;&lt;&lt;std::endl;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlSecKeysMngrDestroy(keys_mngr); return NULL;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>&nbsp; if(keys_mngr == NULL) { std::cerr&lt;&lt;&quot;Can not create xmlSecKeysMngr object&quot;&lt;&lt;std::endl; return NULL;}</p>
<p>&nbsp; //load ca certs into keys manager, the two method used here could not work in some old xmlsec verion,<br>&nbsp; //because of some bug about X509_FILETYPE_DEFAULT and X509_FILETYPE_PEM<br>&nbsp; //load a ca path</p>
<p>&nbsp; if(!capath)<br>&nbsp;&nbsp;&nbsp; if(<em><strong>xmlSecOpenSSLAppKeysMngrAddCertsPath</strong></em>(keys_mngr, capath) &lt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlSecKeysMngrDestroy(keys_mngr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; //load a ca file&nbsp; TODO: can only be used in some new version of xmlsec<br>
&nbsp; if(!cafile)<br>&nbsp;&nbsp;&nbsp; if(<em><strong>xmlSecOpenSSLAppKeysMngrAddCertsFile</strong></em>(keys_mngr, cafile) &lt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlSecKeysMngrDestroy(keys_mngr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NULL;<br>&nbsp; }<br>}</p></div>
<div><br><br>On 7/15/08, Aleksey Sanin &lt;<a href="mailto:aleksey@aleksey.com">aleksey@aleksey.com</a>&gt; wrote:<br>&gt; Well, I haven&#39;t seen your code so I have no idea what is wrong<br>&gt; with it. You can take a look at what xmlsec command does and<br>
&gt; then do copy/paste.<br>&gt; <br>&gt; <br>&gt; Aleksey<br>&gt; <br>&gt; wz qiang wrote:<br>&gt; &gt; hello,<br>&gt; &gt; When I used the command line, I got the result which seems ok.<br>&gt; &gt; <br>&gt; &gt; xmlsec1 --verify --trusted-pem ca.pem --id-attr:AssertionID<br>
&gt; &gt; saml:Assertion&nbsp;&nbsp;assertion.xml<br>&gt; &gt; OK<br>&gt; &gt; SignedInfo References (ok/all): 1/1<br>&gt; &gt; Manifests References (ok/all): 0/0<br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; Is there some hint?<br>&gt; &gt; <br>
&gt; &gt; Thanks a lot<br>&gt; &gt; Weizhong Qiang<br>&gt; &gt; <br>&gt; &gt; <br>&gt; &gt; On 7/15/08, Aleksey Sanin &lt;<a href="mailto:aleksey@aleksey.com">aleksey@aleksey.com</a>&gt; wrote:<br>&gt; &gt; <br>&gt; &gt; &gt; Try to reproduce the problem using xmlsec1 command line tool<br>
&gt; &gt; &gt; <br>&gt; &gt; &gt; Aleksey<br>&gt; &gt; &gt; <br>&gt; &gt; &gt; <br>&gt; &gt; &gt; wz qiang wrote:<br>&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; hello,<br>&gt; &gt; &gt; &gt; I knew it is a openssl problem. :)<br>
&gt; &gt; &gt; &gt; But the strange thing is that the same certificate and ca certificate<br>&gt; &gt; &gt; &gt; works well when I use tls.<br>&gt; &gt; &gt; &gt; SSL_CTX_load_verify_locations(sslctx_,<br>&gt; ca_file_.c_str(),<br>
&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; NULL)<br>&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; So I would know whether there is something wrong when I use xmlsec.<br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; Thanks<br>&gt; &gt; &gt; &gt; Weizhong Qiang<br>
&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; On 7/15/08, Aleksey Sanin &lt;<a href="mailto:aleksey@aleksey.com">aleksey@aleksey.com</a>&gt; wrote:<br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt;<br>&gt; <a href="http://www.mail-archive.com/openssl-users@openssl.org/msg45532.html">http://www.mail-archive.com/openssl-users@openssl.org/msg45532.html</a><br>
&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; wz qiang wrote:<br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; hi all,<br>&gt; &gt; &gt; &gt; &gt; &gt; I am doing some signature verification test with trusted<br>
&gt; certificates.<br>&gt; &gt; &gt; &gt; &gt; &gt; I used<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt;<br>&gt; &quot;xmlSecCryptoAppKeysMngrCertLoad(keys_mngr,<br>
&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; ca_file,<br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; xmlSecKeyDataFormatPem, xmlSecKeyDataTypeTrusted)&quot; to load the ca<br>
&gt; &gt; &gt; &gt; &gt; &gt; certificate into keymanager, there is &lt;X509Data/&gt; under<br>&gt; &gt; &gt; &gt; &gt; &gt; &lt;Signature&gt;&lt;KeyInfo/&gt;&lt;/Signature&gt;.<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; But when I verify the signature (xmlSecDSigCtxVerify), I get the<br>
&gt; &gt; &gt; &gt; &gt; &gt; following error. The ca certificate is exactly the one which sign<br>&gt; the<br>&gt; &gt; &gt; &gt; &gt; &gt; certificate under &lt;X509Data/&gt;.<br>&gt; &gt; &gt; &gt; &gt; &gt; And I also tried to use<br>
&gt; &gt; &gt; &gt; &gt; &gt; xmlSecOpenSSLAppKeysMngrAddCertsFile(keys_mngr,<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; cafile)<br>&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt; &gt; &gt; to load the<br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; ca ceriticate, and got the same error.<br>&gt; &gt; &gt; &gt; &gt; &gt; Could somebody give some hint about sloving this problem?<br>
&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt;<br>&gt; func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=360:obj=x509-store:subj=X509_verify_cert:error=4:crypto<br>
&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; library function<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt;<br>&gt; failed:subj=/C=NO/ST=Oslo/O=UiO/CN=test;err=20;msg=unable<br>&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; to get local<br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt; &gt; &gt; &gt; issuer certificate<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt;<br>
&gt; func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=408:obj=x509-store:subj=unknown:error=71:certificate<br>&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; verification failed:err=20;msg=unable to get local issuer<br>
&gt; certificate<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt;<br>&gt; func=xmlSecKeysMngrGetKey:file=keys.c:line=1364:obj=unknown:subj=xmlSecKeysMngrFindKey:error=1:xmlsec<br>
&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; library function failed:<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt;<br>&gt; func=xmlSecDSigCtxProcessKeyInfoNode:file=xmldsig.c:line=871:obj=unknown:subj=unknown:error=45:key<br>&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; is not found:<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt;<br>&gt; func=xmlSecDSigCtxProcessSignatureNode:file=xmldsig.c:line=565:obj=unknown:subj=xmlSecDSigCtxProcessKeyInfoNode:error=1:xmlsec<br>&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt; &gt; &gt; &gt; library function failed:<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt;<br>
&gt; func=xmlSecDSigCtxVerify:file=xmldsig.c:line=366:obj=unknown:subj=xmlSecDSigCtxSigantureProcessNode:error=1:xmlsec<br>&gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; library function failed:<br>
&gt; &gt; &gt; &gt; &gt; &gt; Signature verification failed for saml:assertion<br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; Thanks in advance<br>&gt; &gt; &gt; &gt; &gt; &gt; Weizhong Qiang<br>&gt; &gt; &gt; &gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; &gt; &gt; &gt; xmlsec mailing list<br>&gt; &gt; &gt; &gt; &gt; &gt; <a href="mailto:xmlsec@aleksey.com">xmlsec@aleksey.com</a><br>&gt; &gt; &gt; &gt; &gt; &gt; <a href="http://www.aleksey.com/mailman/listinfo/xmlsec">http://www.aleksey.com/mailman/listinfo/xmlsec</a><br>
&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; &gt; _______________________________________________<br>&gt; &gt; &gt; &gt; xmlsec mailing list<br>
&gt; &gt; &gt; &gt; <a href="mailto:xmlsec@aleksey.com">xmlsec@aleksey.com</a><br>&gt; &gt; &gt; &gt; <a href="http://www.aleksey.com/mailman/listinfo/xmlsec">http://www.aleksey.com/mailman/listinfo/xmlsec</a><br>&gt; &gt; &gt; &gt; <br>
&gt; &gt; &gt; &gt; <br>&gt; &gt; &gt; <br>&gt; &gt; _______________________________________________<br>&gt; &gt; xmlsec mailing list<br>&gt; &gt; <a href="mailto:xmlsec@aleksey.com">xmlsec@aleksey.com</a><br>&gt; &gt; <a href="http://www.aleksey.com/mailman/listinfo/xmlsec">http://www.aleksey.com/mailman/listinfo/xmlsec</a><br>
&gt; &gt; <br>&gt; <br>&nbsp;</div>